Данная команда копирует содержимое правого операнда в левый операнд.


Эта команда, равно как и практически все остальные команды, оперирующие парой операндов, удовлетворяет двум важным условиям:

Результат операции сохраняется в левом операнде.

 

Ёмкости левого и правого операндов равны: Operand_1: 1 байт Operand_2: 1 байт или Operand_1: 2 байта Operand_2: 2 байта

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

[0150] − содержимое 1-байтовой ячейки оперативной памяти. 0150 − адрес 1-байтовой ячейки оперативной памяти. [BP] − содержимое 1-байтовой ячейки оперативной памяти. BP − регистр, содержащий адрес 1-байтовой ячейки памяти.

Адрес в квадратных скобках может задаваться двумя различными способами:

Прямая адресация.

Пример использования прямой адресации с однобайтовыми операндами:

 

MOV AL, [0150] До выполнения: [0150]= 9F   После выполнения: [0150]= 9Fи AL= 9F

Пример использования прямой адресации с двухбайтовыми операндами:

 

MOV AX, [0150] До выполнения: [0150]= 9F [0151]= 5A   После выполнения: [0150]= 9F [0151]= 5A и AX= 5A9F, то есть AL= 9F и AH= 5A

Косвенная адресация.

Пример использования косвенной адресации с однобайтовыми операндами:

MOV AL, [SI] До выполнения: [0150]= 9F SI= 0150   После выполнения: [0150]= 9F SI= 0150 и AL= 9F
  • Изменение порядка операндов отражается на результате следующим образом:
MOV [SI], AL До выполнения: AL= 9F SI= 0150   После выполнения: AL= 9F SI= 0150 и [0150]= 9F
  • Пример использования косвенной адресации с двухбайтовыми операндами:
MOV AX, [SI] До выполнения: [0150]= 9F [0151]= 5A SI= 0150   После выполнения: [0150]= 9F [0151]= 5A SI= 0150 и AX= 5A9F, то есть AL= 9F и AH= 5A
  • Практическое использование способов адресации (на примере команды MOV):
Команда MOV:

 

Адрес начала команды Команда, записанная на языке машинных кодов Та же самая команда, записанная на языке ассемблер Комментарий, поясняющий, как выполняется команда
B8 34 12 MOV AX,1234 НЕПОСРЕДСТВЕННАЯ АДРЕСАЦИЯ: Занесение 2-х байтового числа 1234 (12 – старший байт числа, 34 – младший байт числа) в 2-х байтовый регистр АХ
A3 20 01 MOV [0120],AX ПРЯМАЯ АДРЕСАЦИЯ: Копирование 2-х байтового числа, находящегося в АХ, в однобайтовые ячейки оперативной памяти 0120 и 0121 (в 0120 копируется младший байт АХ, в 0121 копируется старший байт АХ)
8B 1E 20 01 MOV BX,[0120] ПРЯМАЯ АДРЕСАЦИЯ: Копирование содержимого ячеек оперативной памяти 0120 и 0121, в 2-х байтовый регистр ВХ (в младший байт ВХ, регистр BL, копируется содержимое ячейки 0120, в старший байт ВХ, регистр BH, копируется содержимое ячейки 0121)
10A BD 38 01 MOV BP,0138 НЕПОСРЕДСТВЕННАЯ АДРЕСАЦИЯ: Занесение 2-х байтового числа 0138 в 2-х байтовый регистр BP
10D 88 46 00 MOV [BP+00],AL КОСВЕННАЯ АДРЕСАЦИЯ: Копирование однобайтового числа, находящегося в АL, в однобайтовую ячейку оперативной памяти, адрес которой содержится в регистре BP, т.е. в ячейку с вычисляемым адресом 0138 (0138+00=0138)
89 46 07 MOV [BP+07],AX КОСВЕННАЯ АДРЕСАЦИЯ: Копирование 2-х байтового числа, находящегося в АХ, в ячейки оперативной памяти, на адреса которых указывает регистр BP: младший байт регистра АХ, именуемый АL, копируется в ячейку с вычисляемым адресом 013F (0138 + 07 + 0 = 013F) старший байт регистра АХ, именуемый АН, копируется в ячейку с вычисляемым адресом 0140 (0138 + 07 + 1 = 0140)
CD 20 INT 20 Команда завершения работы программы

 

Практическое использование способов адресации (на примере команды ADD):

Команда ADD:

 

Адрес начала команды Команда, записанная на языке машинных кодов Та же самая команда, записанная на языке ассемблер Комментарий, поясняющий, как выполняется команда
05 34 12 ADD AX,1234 НЕПОСРЕДСТВЕННАЯ АДРЕСАЦИЯ: Сложение 2-х байтового числа 1234 (12 – старший байт числа, 34 – младший байт числа) и содержимого 2-х байтового регистра АХ.Результат размещается в регистре АХ.
01 06 20 01 ADD [0120],AX ПРЯМАЯ АДРЕСАЦИЯ: Сложение 2-х байтового числа, находящегося в АХ, с 2-х байтовым числом, расположенном в ячейках оперативной памяти 0120 и 0121 (с содержимым ячейки 0120 складывается содержимое младшего байта АХ, а с содержимым ячейки 0121 складывается содержимое старшего байта АХ). Результат размещается в ячейках 0120 и 0121.
03 1E 20 01 ADD BX,[0120] ПРЯМАЯ АДРЕСАЦИЯ: Сложение содержимого ячеек оперативной памяти 0120 и 0121 с содержимым 2-х байтового регистра ВХ (к младшему байту регистра ВХ, регистру BL, добавляется содержимое ячейки 0120, а к содержимому старшего байта регистра ВХ, регистра BH, добавляется содержимое ячейки 0121). Результат размещается в регистре BX.
10B BD 38 01 MOV BP,0138 НЕПОСРЕДСТВЕННАЯ АДРЕСАЦИЯ: Занесение 2-х байтового числа 0138 в 2-х байтовый регистр BP
10E 00 46 20 ADD [BP+20],AL КОСВЕННАЯ АДРЕСАЦИЯ: Сложение однобайтового числа, находящегося в АL, с содержимым 1-байтовой ячейки оперативной памяти, адрес которой определяется как сумма содержимого регистра BP и смещения 20, т.е. с содержимым ячейки с вычисляемым адресом 0158 (0138+20=0158). Результат размещается в ячейке 0158.
01 46 E0 ADD [BP-20],AX КОСВЕННАЯ АДРЕСАЦИЯ: Сложение 2-байтового числа, находящегося в AX с содержимым ячеек оперативной памяти, адреса которых вычисляются как BP-20: младший байт регистра АХ, именуемый АL, складывается с содержимым ячейки, вычисляемый адрес которой определяется как следующая сумма: 0118 (0138 - 20 +0 = 0118) старший байт регистра АХ, именуемый АН, складывается с содержимым ячейки с вычисляемым адресом 0119 (0138 - 20 + 1 = 0119) Результат размещается в ячейках 0118 и 0119.
CD 20 INT 20 Команда завершения работы программы

Трассировка представленного выше кода :

Позволяет проследить как выполняется операция сложения. Первая команда ADD AX,1234 приводит к тому, что AX= 0+1234= 1234 Вторая команда ADD [0120], AX приводит к результату: [0120]= [0120] + AX = 0 + 1234 = 1234 ([0120]= 34 [0121]= 12 ) Третья команда ADD BX,[0120] приводит к результату: BX= BX + 1234= 1234 Трассировка второй группы команд даёт следующие результаты: Первая команда MOV BP,138 приводит к результату: BP= 0138 Вторая команда ADD [BP+20],AL приводит к результату: адрес= 0138 + 20 = 0158. Далее, [0158]= [0158] + AL = 0 + 34= 34 Третья команда ADD [BP-20],AX приводит к результату: адрес= 0138 - 20 = 0118. Далее, [0118]= [0118] + AL = 0 + 34= 34 и [0119]= [0119] + AH = 0 + 12= 12

Задания к лабораторной работе:

Выполнить следующие задания:
  1. Изучить содержание лабораторной работы (в часы самоподготовки).
  2. Повторить выполнение разобранных в работе примеров (в часы самоподготовки).
  3. Законспектировать примеры применения команд (в часы самоподготовки).
  4. Чем завершится выполнение следующей группы команд:
MOV BX,80A0 MOV AX,90E0 ADD BX,BX ADD AX,BX MOV [BX],AX Чем завершится выполнение следующей группы команд: MOV DX,E0F0 MOV CX,A0C0 ADD CX,DX ADD DX,CX MOV [128],DX Чем завершится выполнение следующей группы команд: MOV DX,E0B0 MOV AX,F0D0 ADD AX,DX ADD AH,AL ADD AL,AH MOV [132],AX Чем завершится выполнение следующей группы команд: MOV CX,7090 MOV BX,9070 ADD BX,BX ADD CH,BL ADD CL,BH MOV [BX],CH Чем завершится выполнение следующей группы команд: MOV BP,190 MOV CX,9070 ADD CX,BP ADD CH,CL ADD CL,CH MOV [BP],CX

 

РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА:

1. Абель П. Язык ассемблера для IBM PC и программирования. - М.: Высшая школа, 1992.- 447 с. 2. Лямин Л.В. Макроассемблер MASM. - М.: Радио и связь, 1994.- 320 с. 3. Нортон П., Соухэ Д. Язык ассемблера для IBM PC. – М.: "Компьютер", Финансы и статистика, 1992. –352 с. 4. Сван Т. Освоение Turbo Assembler. – Киев: "Диалектика", 1996. 5. Юров В. Assembler: учебный курс. – СПб: Питер, 1998. 6. Юров В., Хорошенко С. Assembler : учебный курс.-Санкт-Петербург: Питер, 1999. -672 7. Юров В. Assembler: Специальный справочник. – СПб: Питер, 2000. 8. Юров В. ASSEMBLER : практикум. (с дискетой).-Санкт-Петербург: Питер, 2002. -400 9. Юров В. Assembler: практикум – СПб: Питер, 2003.- 400 с. 10. Пирогов В.Ю. Ассемблер на примерах. - СПб.: БХВ-Петербург, 2005. - 416 с. 11. Пирогов В.Ю. Ассемблер для Windows. - 3-е изд. - СПб.: БХВ-Петербург, 2005. - 864 с. 12. Шнайдер О. Язык ассемблера для персонального компьютера фирмы IBM. Пер. с англ. под ред. Е.К.Масловского.-Москва: Мир, 1988. -405C. 13. Юров В.И. Assembler. Учебник для вузов. 2-ое изд. – СПб: Питер, 2005. - 637 с. 14. Использование Turbo Assembler при разработке программ. – Киев: "Диалектика", 1994. - 288 с.

 



Дата добавления: 2016-06-29; просмотров: 2045;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.