Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

MOV DX, BX. Команды LDS и LES. Команда LAHF. Команда SAHF. 4. 2 Арифметические команды. Команда ADD. Команда ADC. ADD WORD PTR N2, AX  ; сложение младших 16 бит




MOV DX, BX

ADD DX, SI

ADD DX, 2

Очевидно, что использование вместо этих трех команд команды LEA дает существенный выигрыш по занимаемой командами памяти и ускорение выполнения операции вычисления смещения. В табл. 9 приведены дополнительные примеры правильного и неправильного использования команды LEA.

 

Таблица 9

Примеры использования команды LEA

Примеры правильного использования Примеры неправильного использования
LEA AX, [BX + 5] LEA DS, [BX + 5]
LEA BX, [BP + DI] LEA 0234h, [SI]
LEA CX, ES: [SI – 2] LEA DS: [BX], [BP + DI]
LEA DX, SS: [BX] LEA AL, [BP – 1]

Команды LDS и LES

Команды LDS и LES загружают сегмент и смещение (указатель вида сегмент: смещение) из памяти по адресу, определяемому указанным адресным выражением, в фиксированные сегментные регистры и указанный регистр. Команда LDS загружает номер сегмента из памяти в сегментный регистр DS, а команда LES – в сегментный регистр ES. Обе команды загружают смещение из памяти в указанный 16-битный регистр. Форматы команд:

LDS < имя_регистра>, < адресное_выражение>

LES < имя_регистра>, < адресное_выражение>

 

Регистр для команд LDS и LES выбирается по таким же правилам, как и для команды LEA. Адресное выражение используется для определения места в памяти, где хранятся сегмент и смещение для загрузки в регистры.

Ниже приведен фрагмент программы, который поясняет работу команд LDS и LES.

A DW 0001h, 0002h

B DW 0003h, 0004h

. . .

LDS SI, A                  ; теперь в DS – 0002h, а в SI – 0001h

MOV BX, OFFSET B; в BX – смещение переменной B

LES DI, [BX]            ; теперь в ES – 0004h, а в DI – 0003h

 

Следует отметить, что указатель вида сегмент: смещение записывается в памяти в виде двух последовательно расположенных слов в обратном порядке: первое слово – это смещение, а второе – сегмент. Поэтому в примере в DS записывается 0002h, а не 0001h.

В табл. 10 приведены примеры правильного и неправильного использования команд LDS и LES.

 

Таблица 10

Примеры использования команд LDS и LES

Примеры правильного использования Примеры неправильного использования
LDS AX, [BX + 0Ah] LDS DS, [SI + 1]
LES BP, [DI – 5] LES 0123h, [BX + DI]
LDS SI, [BX] LDS [BX], [BX]
LES DI, [BX + SI] LES AX, [SI + DI]

 

Команда LAHF

Команда LAHF копирует младшие 8 бит регистра флагов в регистр AH. Команда не имеет операндов. В регистр AH копируются 5 флагов (SF, ZF, AF, PF, CF), а остальные 3 бита регистра AH имеют неопределенное значение и от этих бит не должно зависеть выполнение программы.

 

Команда SAHF

Команда SAHF копирует содержимое регистра AH в младшие 8 бит регистра флагов. Команда не имеет операндов. Из регистра AH копируются флаги SF, ZF, AF, PF, CF. На другие флаги воздействие не оказывается.

 

 

4. 2 Арифметические команды

Арифметические команды позволяют выполнять такие действия как сложение, вычитание, умножение, деление, инкремент, декремент, изменение знака, а также расширение байта до слова и слова до двойного слова. Все арифметические команды оперируют целочисленными данными, а команды деления формируют целую часть от деления и остаток от деления. При использовании арифметических команд важное значение имеют флаги, которые могут воздействовать на выполнение команды и характеризуют результат ее выполнения

 

Команда ADD

Команда ADD – это команда сложения. Синтаксис команды, такой же, как и у команды MOV. Правила выбора операндов – такие же, как и для команды MOV, но сегментные регистры не могут являться операндами команды ADD. В приемник записывается результат сложения приемника с источником, по-другому: приемник: = приемник + источник. При выполнении сложения может возникнуть переполнение – когда результат не помещается в приемник. В этом случае командой ADD устанавливается флаг CF. При равенстве суммы 0 устанавливается флаг ZF. Если сумма меньше нуля, т. е. старший бит результата равен 1, устанавливается флаг SF. Флаг PF устанавливается при четном числе единиц в результате. Флаг AF устанавливается, если при сложении возникает перенос из 3-го разряда в 4-й. Пример использования команды ADD:

MOV AX, 100

MOV BX, 9999

ADD AX, BX            ; теперь AX = 10099

 

Команда ADC

Команда ADC (сложение с переносом) аналогична команде ADD, но на ее выполнение влияет значение флага CF – значение этого флага (0 или 1) добавляется к сумме, или приемник: = приемник + источник + CF. Это может использоваться для побайтового или пословного сложения чисел большой разрядности. Например, при помощи команды ADC можно сложить 64-битные целые числа, каждое из которых представлено 8 байтами. Флаги, устанавливаемые командой ADC – такие же, как и для команды ADD.

Пример использования команд ADD и ADC для сложения двух 32-битных целых чисел:

N1 DD 123456789            ; описание 32-битных переменных

N2 DD 987654321

. . .

MOV AX, WORD PTR N1

ADD WORD PTR N2, AX        ; сложение младших 16 бит

MOV AX, WORD PTR N1 + 2      

ADC WORD PTR N2 + 2, AX  ; сложение старших 16 бит

 

В этом примере выражение “WORD PTR N1 + 2” означает использование прямой адресации, где смещение вычисляется транслятором как сумма смещения переменной N1 и числа 2.

 

Команда SUB

Команда SUB – это команда вычитания. Ее синтаксис и правила выбора операндов такие же, как и для команды сложения ADD. Команда выполняет вычитание из значения приемника значение источника и записывает результат в приемник, иначе: приемник: = приемник – источник. Флаги, формируемые командой SUB, такие же, как и для команды ADD. Флаг CF устанавливается при возникновении заема из старшего разряда приемника, а флаг AF – при возникновении заема из 3-го разряда в 4-й.

Пример использования команды SUB:

MOV AX, 100

MOV BX, 200

SUB AX, BX            ; теперь AX = -100

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...