Ассемблер макросредства - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д