Ассемблер макросредства - Assembler
Формулировка задачи:
Zamena macro a, b, addr
local m1, pass, exit
push si cx ax
mov bx, addr
mov cl, [bx]
mov ch, 0
jcxz exit
mov al, a
mov ah, b
loop1: inc bx
cmp [bx], al
jne cont
mov [bx], ah
cont: loop loop1
endm
data segment
array db 7,1,2,3,4,5,6,7
a db 3
b db 25
data ends
code segment
assume cs:code, ds:data
start: mov ax,data
mov ds,ax
lea bx, array
Zamena a, b, bx
mov si,4
mov dl, array[si]
mov ah,02h
int 21h
mov ah,4ch
int 21h
code ends
end startРешение задачи: «Ассемблер макросредства»
textual
Листинг программы
Zamena macro a, b, addr local loop1, cont, exit push si cx ax mov bx, addr mov ch, 0 mov cl, [bx] jcxz exit mov al, a mov ah, b loop1: inc bx cmp [bx], al jne cont mov [bx], ah cont: loop loop1 exit: pop ax, cx, si endm data segment array db 7,1,2,3,4,5,6,7 a db 3 b db 25 data ends code segment assume cs:code, ds:data start: mov ax,data mov ds,ax mov bx, offset array Zamena a, b, bx mov si,4 mov dl, array[si] mov ah,4ch int 21h code ends end start
Объяснение кода листинга программы
Список действий, которые происходят в коде:
- Макроопределение Zamena с тремя аргументами (a, b, addr) и тремя локальными переменными (loop1, cont, exit).
- Код цикла, который выполняется до тех пор, пока значение байта в текущей ячейке массива не станет равным значению переменной a.
- Сохранение результата в переменной ah.
- Переход к следующей ячейке массива.
- Выход из цикла и возврат в основную программу.
- Загрузка сегмента данных в регистр ax.
- Загрузка сегмента данных в регистр ds.
- Загрузка адреса массива в регистр bx.
- Вызов макроса Zamena с аргументами a, b и bx.
- Переменная si устанавливается равной 4.
- Переменная dl загружается значением элемента массива с индексом 4.
- Выполнение интеррутации int 21h.