Цель работы: Изучить использование макросредств на языке Ассемблера.
Задание: 15. Составить макрокоманду умножения U а V путем сложения V самого с собой U раз. U, V — адреса памяти.
Алгоритм:
Текст макроопределения и программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
sseg segment stack 'stack' dw 256 dup(?) sseg ends ; Определение данных data segment ; Сообщения пользователю msg1 db 10,13,'Program started' db 10,13,'Result ','$' msg2 db 10,13,'Input second digit: ','$' msg3 db 10,13,'Result = ','$' data ends multiply macro push ax ; mov cx,bx; mov dl,0; return_position: add dl,al; LOOP return_position; pop ax endm ; Сегмент кода code segment assume cs:code,ds:data,ss:sseg start: mov ax,data ; настроить сегментный mov ds,ax ; регистр DS на данные lea dx,msg1 ; вывести сообщение call print_msg mov ah,4ch ; завершить программу mov cx,3h; mov al,2h; multiply ; mov ah,2h; ; выбрать режим чтения времени add dl, 30h; int 21h ; считать время mov ah,4ch; int 21h ; и выйти в DOS print_msg proc push ax ; сохранить AX mov ah,09h ; вывести сообщение с int 21h ; помощью функции DOS pop ax ; восстановить AX ret ; вернуться в вызывающую программу print_msg endp code ends end start |
Результат работы программы:
Номер опыта | U | V | Результат |
1 | 2 | 3 | 6 |
2 | 3 | 3 | 9 |
3с | 1 | 3 | 3 |
Вывод: Полученная программа работает верно.