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
Команды 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
Команда 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|