Макросредства ассемблера - Assembler
Формулировка задачи:
составить программу, включающую макрообращение. Макрокоманда поиска в упорядоченном списке элемента, равного содержимому ячейки Х, и замены его содержимом ячейки Y. Число элементов списка задается первым элементом списка. Начальный адрес списка находится в 16-разрядном регистре BX.
Решение задачи: «Макросредства ассемблера»
textual
Листинг программы
- LOCALS
- .model small
- .stack 100h
- .data
- XX db 'a'
- YY db 'Z'
- S db EndSt-S-1-1, 'abcdefghjklmnopqrstuvwxyz', '$'
- EndSt equ $
- CrLf db 0Dh, 0Ah, '$'
- Before db 'Before: ', 0Dh, 0Ah, '$'
- After db 'After: ', 0Dh, 0Ah, '$'
- .code
- Replace macro X, Y
- LOCAL @@For, @@Next, @@Break
- mov si, offset X ;;al - искомое значение
- mov al, [si]
- mov ch, 0 ;;cx - количество элементов в списке
- mov cl, [bx]
- add bx, 1
- @@For:
- cmp al, [bx]
- jb @@Break ;;если элемент больше искомого - прекратить поиск
- jne @@Next ;;если элемент не равен искомому - перейти к следующему
- ;;замена содержимого ячейки
- mov si, offset Y
- mov al, [si]
- mov [bx], al
- jmp @@Break
- @@Next:
- add bx, 1
- loop @@For
- @@Break:
- endm
- main proc
- mov ax, @data
- mov ds, ax
- ;вывод исходной строки на экран
- mov ah, 09h
- lea dx, Before
- int 21h
- mov ah, 09h
- lea dx, S+1
- int 21h
- mov ah, 09h
- lea dx, CrLf
- int 21h
- ;обработка строки
- lea bx, S
- Replace XX, YY
- ;вывод обработанной строки на экран
- mov ah, 09h
- lea dx, After
- int 21h
- mov ah, 09h
- lea dx, S+1
- int 21h
- mov ah, 09h
- lea dx, CrLf
- int 21h
- mov ax, 4C00h
- int 21h
- main endp
- end main
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д