Ассемблер с нуля. Часть 11. Регистры.

Процессор Intel изнутри.

Регистры процессора.

Процессор работает с данными. Обрабатываемые данные содержаться в оперативной памяти, куда считываются с жёсткого диска. Для того, чтобы ими манипулировать, а также верно организовывать свою работу по их обработке — выполнению программного кода, у процессора имеется система, построенная на небольших, но очень быстрых блоках памяти — регистров. Регистры процессора — это входящие непосредственно в процессор блоки памяти.

Изучать регистры процессора мы будем с использованием отладчика TD (Turbo Debugger) и нашей первой программы «Hello, world!» (prg.com). Так что запускаем предустановленный DOSBox и поехали (всё необходимое имеется в архиве DOS-1.rar, который можно скачать с нашего сайта).

Изучаем регистры процессора.
Изучаем регистры процессора с помощью TD и нашей первой программы.

Для удобства работы с Turbo Debugger целесообразно увеличить рабочую площадь программы на всё окно.

Turbo Debugger - F5.
Используем F5 для увеличения рабочей площади TD.

Регистры процессора Intel и их аналоги.

Количество регистров и их размер зависит от разрядности и сложности процессора.
Практически при написании кода регистры нужно понимать как постоянно имеющиеся под рукой программиста переменные.

Начиная с 80386, процессоры Intel и их аналоги имеют 16 основных регистров и 11 регистров для работы с числами с плавающей запятой (FPU/NPX) и мультимедийными приложениями (MMX). Для машины всегда быстрее и удобнее обращаться к регистру процессора, чем к памяти.

Помимо основных регистров существуют регистры управления памятью (GDTR, IDTR, TR, LDTR), регистры управления (CR0, CR1 – CR4), отладочные регистры (DR0 – DR7) и машинно-зависимые регистры, которые практически не используются в прикладном программировании.

Регистры процессора 8086.

Так как мы имеем дело с 16 битной операционной системой MS-DOS, то вернёмся во времена процессоров 8086 и 80286. В процессорах следующих поколений указанные регистры являются частями соответствующих 32 и 64 битных регистров с сохранением названия и функционала.

Например, регистр ax (16 бит) является составляющей частью регистра eax (32 бита). Благодаря указанному подходу достигается совместимость работы старых программ на новых компьютерах. Также сохраняются команды и директивы, переходя с 16 битного в 32 битный код.

Итак, процессор (8086 и 80286) содержит 12 16-ти разрядных программно-адресуемых регистров. Регистры процессора принято объединять в три группы:

  • Регистры данных.
  • Регистры указатели.
  • Сегментные регистры.

Краме этого, в состав процессора входят:

  • Счётчик команд.
  • Регистр флагов.

16-ти разрядность обозначает, что в каждом регистре может содержаться 0FFFFh бит информации, то есть два байта: 0FFh-0FFh информации.

Регистры данных (регистры общего назначения).

Регистры данных допускают независимое обращение к старшим (High — обозначается литерой H) и младшим (Lough — обозначается литерой L) половинам.

Регистры данных эквивалентны в использовании. Во времена старых процессоров, рекомендавалость использовать в первую очередь AX, так как многие команды, если их операндом (составной частью команды) является AX (AH, AL) занимают в памяти меньше места и выполняются быстрее.

Регистры указатели.

Регистры указатели в отличие от регистррв общего назначения не допускают побайтовую адресацию. SI и DI называют индексными регистрами.

Регистры указатели в принципе также могут использоваться в любых целях, как и регистры общего назначения. В некоторых командах (работы со строками) используется конкретный установленный перечень регистров. Например, команда movs — «пересылка строк» предполагает использование исключительно регистров SI и DI для хранения адресов источника и приемника строки байт, слов и двойных слов. В случае использования префикса rep, дополнительно задействуется сегмент CX.

Сегментные регистры.

Сегментные регистры хранят начальные адреса сегментов программы, что дант возможность обращаться к этим сегментам.

Счётчик команд.

На каждом шаге выполнения программы указывает на адрес команды, следующей за исполняемой. Регистр IP програмно не доступен. Можно только получить его значение (и то, не на прямую), программно влиять на IP — не возможно.

Регистр флагов.

Побитно содержит флаги : OF, DF, IF, TF, SF, ZF, AF,PF, CF. Флаги устанавливаются процессором и на них можно влиять программно. Определенные команды влияют на изменение значения флага. Например, флаг нуля (ZF) устанавливается в 1, если результат операции равен нулю. Так, если в AX содержится число 1, то после команды

содержимое AX станет равным 0, а в регистре флагов установится бит ZF.

Используем отладчик для усвоения материала.

С помощью Turbo Debugger самостоятельно изучите рассмотренные регистры процессора, отлаживая нашу первую программу prg.com.

Регистры процессора в Turbo Debugger.
Усвоим материал, изучив регистры процессора с помощью TD.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *