Макросредства ассемблера - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5