Семейство Intel-процессоров (CPU) являются реализацией абстрактной вычислительной машины с архитектурой, которую разработал Дж. Фон Нейман (Von Neumann). Эта архитектура содержит 3 главных модуля: CPU (central processing unit), memory, и I/O (input/output devices). Они соединены друг с другом с помощью системной шины (system bus).
Самой главной частью CPU являются регистры. Они разбиты на 4 категории: регистры общего назначения (general purpose registers), специальные регистры приложений, специальные регистры ядра системы (kernel mode), регистры сегментов. Регистры сегментов почти не используются в 32-bit операционных системах. Специальные регистры ядра используют люди, которые пишут ОС, отладчики и другие системные утилиты. Поэтому мы не будем их рассматривать.
Регистр — это тип памяти, часть процессора, предназначенная для хранения и обработки данных. Регистры можно сравнить с операционным столом, на котором процессор препарирует данные. К данным, хранящимся в регистрах, процессор может обратиться очень быстро. Они обрабатываются значительно быстрее, чем данные обычной памяти (RAM). Команды используют регистры разнообразным образом. Для начала познакомимся с регистрами общего назначения, которые являются своего рода рабочими лошадками процессора. Вот их имена:
EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP
Префикс E означает extended. Он отличает 32-bit регистры от 16-bit регистров, которые именуются:
AX, BX, CX, DX, SI, DI, BP, SP
Кроме того, процессоры 80x86 имеют восемь 8-bit регистров, которые именуются:
AL, AH, BL, BH, CL, CH, DL, DH
На самом деле, последующие—являются частями предыдущих. Эта вложенность отражает исторический процесс развития архитектуры процессоров и позволяет поддерживать совместимость (backward compatibility). Рассмотрим регистры поближе.
Возьмем один из них — EAX. Он вмещает 32 bits. Физически существует один регистр EAX (32-bit), логически в него встроен регистр AX (16-bit), который логически делится еще на два: старшую (AH) и младшую (AL) части (high and low). Итак, 32-битный регистр делится на две части, затем 16-битная часть этого регистра вновь делится на две части. Это помогает обеспечить совместимость с языками ассемблера предыдущих процессоров Intel. Они работали с 8-битными регистрами.
1. Нажмите LWin+R и запустите консоль командной строки, введя cmd.
2. Введите debug. Запустится утилита Debug.exe. (Она находится в папке WINDOWS\SYSTEM32\).
3. Когда появится приглашение (символ минус), введите букву r (или R) и нажмите на Enter.
Вы увидите содержимое регистров процессора. Мой вариант выглядит так.
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B65 ES=0B65 SS=0B65 CS=0B65 IP=0100 NV UP EI PL NZ NA PO NC
0B65:0100 E88E04 CALL 0591
Как видите, значения регистров AX, BX, CX, DX равны 0. Уточним тип этих переменных. Это — шестнадцатеричные числа в диапазоне (0, FFFF). В десятичном исчислении диапазон равен (0, 65535), и, наконец, в двоичном исчислении: (0, 1111 1111 1111 1111). Создатели первых IBM-совместимых компьютеров считали, что диапазон в 65 тысяч достаточно велик. В те времена любили экономно программировать (я и сейчас люблю).
Заметьте, что утилита Debug.exe ничего не знает о существовании расширенных регистров (с префиксом E). Она — старая и работает в стиле DOS. Для работы с расширенными регистрами надо пользоваться современными инструментами (MASM, Soft Ice).
Мы можем записать в регистр AX значение (например, 72F9h) двумя разными способами:
¨ AX = 72F9h (одна команда);
¨ AH = 72h; AL = F9h (две команды).
Аналогично, (двумя способами) можно изменить значение регистра AH:
¨ AH = 78h
¨ AX = 7800h
Для регистра AL варианты присвоений будут иметь вид:
¨ AL = 78h
¨ AX = 0078h
Регистр AX имеет длину 16 бит, которые принято нумеровать справа налево. Представим, что в нем хранится число 2F4Dh. Следующая таблица моделирует этот факт.
AX |
2F4D |
|||||||||||||||
AH - AL |
2F |
4D |
||||||||||||||
Тетрады |
2 |
D |
4 |
D |
||||||||||||
Значения битов |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
Номера битов |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Одному байту соответствуют две шестнадцатеричные цифры, а одной цифре соответствует четверка (тетрада) двоичных цифр (или 4 бита). Емкость регистров AH и AL — две тетрады, или 8 бит. Такую же длину имеют: коды символов, скан-коды клавиш, номера функций прерываний и другие сущности
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.