Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vecher_lektsii_Beregovoy.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Запись программ на языке ассемблера

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

.data ;директива начала сегмента данных

  • d1 dw 34h

  • d2 db 10100110b

  • d3 dd 3 dup (?)

.code

start: mov ax,data ; Загрузить адрес

mov ds,ax ; сегмента данных

.

. ; текст программы

quit: mov ax,4c00h ; Код завершения 0

int 21h ; Выход в DOS

end start

Загрузка адреса сегмента данных состоит из двух команд, так как непосредственные данные нельзя заносить прямо в сегментный регистр.

Для завершения программы и выхода в DOS имеется несколько возможностей, рекомендуется использовать две команды, начинающиеся с метки quit.

Пример записи формулы

Вычислить Х = 3А + ( В + 5 ) / 2 – С – 1,

где А, В, С, Х- целые знаковые числа занимающие слово, написать программу реализующую данную формулу.

Распишем формулу по отдельным операциям:

  • АХ ← А ; значение А в регистре АХ

АХ ← 2 *( АХ ) ; 2А в АХ

АХ ← ( АХ ) + А ; 3А в АХ

ВХ ← В ; В в ВХ

ВХ ← 5 + ( ВХ ) ; В+5 в ВХ

ВХ ← (ВХ ) / 2 ; ( В+5) / 2 в ВХ

АХ ← (BX ) + ( AX ) ; 3А+( В+5 ) / 2 в АХ

АХ ← ( АХ ) – С ; 3А+( В+5 ) / 2 – С в АХ

АХ ← ( АХ ) -1 ; 3А+( В+5 )/2 – С – 1 в АХ

Х ← ( АХ ) ; 3А+( В+5 )/2 – С – 1 в Х

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

Текст программы:

.model small

.data

  • a dw 10

  • b dw 20

  • c dw 5

  • x dw ?

.stack 100h

. code

  • start: mov ax, @data ; загрузить адрес

  • mov dx, ax ; сегмента данных

  • mov ax, a

  • sal ax, 1

  • add ax, a

  • mov bx, b

  • add bx, 5

  • sar bx, 1

  • add ax, bx

  • sub ax, c

  • dec ax

  • mov x, ax ; запись результата в память

  • quit: mov ax, 4c00h ; код завершения 0

  • int 21 ; выход в dos

  • end start

Варианты заданий

Разработать программу реализующую указанную формулу, исполнить программу с несколькими ( три – четыре) наборами исходных данных, проверить правильность результатов.

  1. Х= А – 5 (В – 2С) + 2

  2. Х= - 4А + (В + С) / 4 + 2

  3. Х= 7А – 2В – 100 + С

  4. Х= - А / 2 + 4 (В + 1) + 3С

  5. Х= 5 (А – В) – 2С + 5

  6. Х= (А/ 2 + В) / 4 + С – 1

  7. Х= - (С + 2А + 4В + В)

  8. Х= 6С + (В – С + 1) / 2

  9. Х= 2 – В (А + В) + С / 4

  10. Х= 2В – 1 + 4 (А – 3С)

  11. Х= (2А + В) / 4 – С / 2 + 168

  12. Х= 6 (А – 2В + С / 4) + 10

  13. Х= 5 (А – В ) + С mod 4

  14. Х= - (5 – (С + 2А) * 4В + 38)

  15. Х= А – 3 (А + В) + С mod 4

  16. Х= 3(А – 2В) +50 – С / 2

  17. Х= (3А + 2В) – С / 4 + 217

  18. Х= 3(С – 2A) + (В – С + 1) / 2

  19. Х= (2А + В) / 4 – С / 2 + 168

  20. Х= 6 (А – 2В + С / 4) + 10

  21. Х= 3 (А – 4В ) + С / 4

  22. Х= - ( - (С + 2А) * 5В – 27)

  23. Х= А / 2 – 3 (А + В) + С * 4

  24. Х= 3(А – 2В) +50 – С / 2

  25. Х= 5А + 2В – B / 4 + 131

Оператор получения смещения выражения offset позволяет получить значение смещения выражения в байтах относительно начала того сегмента, в котором выражение пределено

.data

pole  dw 5

…

.code

…

mov ax,seg  pole

mov es,ax

mov dx,offset pole ;теперь в паре es:dx полный адрес pole

Циклические и разветвляющиеся программы

Команда передачи, управления служит для передачи управления инструкции, не следующей непосредственно за данной. Управление может передаваться как внутри текущего сегмента кода (внутрисегментная передача управления), так и за его пределы (межсегментная передача управления). Тип передачи управления может быть задан ассемблеру предшествующим адресу перехода ключевым словом NEAR (внутрисегментная) или FAR (межсегментная).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]