Это интересно

ГЛАВА 02

Регистры микропроцессоров 8086 – 80186.

В прошлой главе мы рассмотрели с вами шестнадцатеричную систему счисления и простую программу вывода строки на экран.

В данной главе рассматриваются регистры процессоров 8086 / 8088 / 80186.

Регистр, как мы уже рассматривали раньше, – это, просто говоря, специально отведенная память для временного хранения каких-то данных, переменная.

Микропроцессоры 8086 – 80186 имеют 14 регистров. В прошлой главе мы встретили два из них: AH и DX. В Таблицах № 1, 2 и 3 приведены списки всех регистров, кроме IP и регистра флагов, которые со временем будут рассматриваться отдельно:

EAX EBX
AX BX CX DX
AH AL BH BL CH CL DH DL
               

Таблица № 1. Регистры данных

SI DI BP SP

Таблица № 2. Регистры-указатели

CS DS ES SS

Таблица № 3. Сегментные регистры

Регистры данных (Таблица № 1)

Могут использоваться программистом по своему усмотрению (за исключением некоторых случаев). В них можно хранить любые данные (числа, адреса и пр.).

В верхнем ряду Таблицы (AX (аккумулятор), BX (база), CX (счетчик), DX (регистр данных)) находятся шестнадцатиразрядные регистры, которые могут хранить числа от 0 до 65.535 (от 0h до FFFFh в шестнадцатеричной системе (вспоминаем прошлую главу)). Под ними идет ряд восьмиразрядных регистров (AH, AL, BH, BL, CH, CL, DH, DL), которые могут хранить максимальное число 255 (FFh). Это половинки (старшая или младшая) шестнадцатиразрядных регистров.

Например:

Мы уже знаем оператор mov, который предназначен для загрузки числа в регистр. Чтобы присвоить, к примеру, регистру AL число 35h, нам необходимо записать так:

mov al,35h

а регистру AX число 346Ah – так:

mov ax,346Ah

Если мы попытаемся загрузить большее число, чем может содержать регистр, то, при ассемблировании программы произойдет ошибка.

Например, следующие записи будут ошибочны:

mov ah,123h à максимум FFh

mov bx,12345h à максимум FFFFh

mov dl,100h à максимум FFh

Здесь надо отметить, что если шестнадцатеричное число начинается не с цифры (напр.: 12h), а с буквы (A-F) (напр.: С5h), то перед таким числом ставится нуль: 0 C5h. Это необходимо для того, чтобы программа-ассемблер могла отличить, где шестнадцатеричное число, а где метка. Ниже мы рассмотрим это на примере.

Допустим, мы выполнили команду mov ax,1234h. В этом случае в регистре AH будет находиться число 12h, а в регистре AL – 34h. Т.е. A H, A L, B H, B L, C H, C L, D H и D L – это младшие (L ow) или старшие (H igh) половинки шестнадцатиразрядных регистров (см. Таблицу № 4).

Команда: Результат:
mov ax,1234h mov bx,5678h mov cx,9ABCh mov dx,0DEF0h AX = 1234h, AH = 12h, AL = 34h BX = 5678h, BH = 56h, BL = 78h CX = 9ABCh, CH = 9Ah, CL = 0BCh DX = 0DEF0h, DH = 0DEh, DL = 0F0h

Таблица № 4. Результаты выполнения различных команд

Рассмотрим еще два оператора: add и sub.

Оператор add имеет следующий формат (в последствии мы всегда будем оформлять новые команды в такие таблицы):

Команда Перевод Назначение Процессор
ADD приемник, источник ADDition – сложение Сложение  

В столбце Команда будет описываться новая команда и ее применение. В столбце Назначение – что выполняет или для чего служит данная команда, а в столбце Процессор – модель (тип) процессора с которого она поддерживается. Перевод – с какого английского слова образован оператор и его перевод. В данном примере – это 8086 процессор, но работать команда будет, естественно и на последующих, более современных процессорах (80286, 80386 и т.д.).

Команда add производит сложение двух чисел.

Примеры:

mov al,10 à загружаем в регистр AL число 10

add al,15 à AL = 25; AL – приемник, 15 – источник

mov ax,25000 à загружаем в регистр AX число 25000

add ax,10000 à AX = 35000; AX – приемник, 10000 – источник

mov cx,200 à загружаем в регистр CX число 200

mov bx,760 à а в регистр BX – 760

add cx,bx à CX = 960, BX = 760 (BX не меняется); CX –

приемник, BX – источник

Команда Перевод Назначение Процессор
SUB приемник, источник SUBtraction – вычитание Вычитание  

Команда sub производит вычитание двух чисел.

Примеры:

mov al,10

sub al,7 à AL = 3; AL – приемник, 7 – источник

mov ax,25000

sub ax,10000 à AX = 15000; AX – приемник, 10000 – источник

mov cx,100

mov bx,15

sub cx,bx à CX = 85, BX = 15 (BX не меняется!); CX –

приемник, BX – источник

Это интересно.

Следует отметить, что Ассемблер максимально быстрый язык. Можно посчитать сколько раз за одну секунду процессор сможет сложить два любых числа от 0 до 65535.

Каждая команда процессора выполняется определенное количество тактов. Когда говорят, что тактовая частота процессора 100Mhz, то это значит, что за секунду проходит 100 миллионов тактов.

Чтобы сложить два числа в Ассемблере нужно выполнить следующие команды:

mov ax,2700

mov bx,15000

add ax,bx

В результате выполнения данных инструкций, в регистре AX будет число 17700, а в регистре BX – 15000. Команда add ax,bx выполняется за один такт на процессоре 80486. Получается, что компьютер 486 DX2-66Mhz за одну секунду сложит два любых числа (от 0 до 0FFFFh) 66 миллионов (!) раз! А еще называют "четверку" медленной!..

Регистры-указатели (Таблица № 2)

Регистры SI (индекс источника) и DI (индекс приемника) используются в строковых операциях. Регистры BP и SP необходимы при работе со стеком. Мы их будем подробно рассматривать в последующих главах.

Сегментные регистры (Таблица № 3)

Сегментные регистры необходимы для обращения к тому или иному сегменту памяти (например, видеобуферу). Сегментация памяти довольно сложная и объемная тема, которую также будем рассматривать в последующих главах.

_________________

Давайте изучим еще несколько команд в данной главе:

Команда Перевод Назначение Процессор
INC приемник Increment – инкремент Увеличение на единицу  

Команда inc увеличивает на единицу регистр. Она эквивалентна команде:

ADD источник, 1

только выполняется быстрее на старых компьютерах (до 80486) и занимает меньше байт.

Примеры:

mov al,15

inc al à теперь AL = 16 (эквивалентна add al,1)

mov dh,39h

inc dh à DH = 3Ah (эквивалентна add dh,1)

mov cl,4Fh

inc cl à CL = 50h (эквивалентна add cl,1)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: