Макросредства ассемблера - Assembler

Узнай цену своей работы

Формулировка задачи:

составить программу, включающую макрообращение. Макрокоманда поиска в упорядоченном списке элемента, равного содержимому ячейки Х, и замены его содержимом ячейки Y. Число элементов списка задается первым элементом списка. Начальный адрес списка находится в 16-разрядном регистре BX.

Решение задачи: «Макросредства ассемблера»

textual
Листинг программы
  1. LOCALS
  2. .model small
  3.  
  4. .stack 100h
  5.  
  6. .data
  7.  
  8.         XX      db      'a'
  9.         YY      db      'Z'
  10.         S       db      EndSt-S-1-1, 'abcdefghjklmnopqrstuvwxyz', '$'
  11.         EndSt   equ     $
  12.  
  13.         CrLf    db      0Dh, 0Ah, '$'
  14.  
  15.         Before  db      'Before: ', 0Dh, 0Ah, '$'
  16.         After   db      'After: ', 0Dh, 0Ah, '$'
  17.  
  18. .code
  19.  
  20. Replace macro   X, Y
  21.         LOCAL   @@For,  @@Next, @@Break
  22.         mov     si,     offset X        ;;al - искомое значение
  23.         mov     al,     [si]
  24.         mov     ch,     0               ;;cx - количество элементов в списке
  25.         mov     cl,     [bx]
  26.         add     bx,     1
  27.         @@For:
  28.                 cmp     al,     [bx]
  29.                 jb      @@Break ;;если элемент больше искомого - прекратить поиск
  30.                 jne     @@Next  ;;если элемент не равен искомому - перейти к следующему
  31.                 ;;замена содержимого ячейки
  32.                 mov     si,     offset Y
  33.                 mov     al,     [si]
  34.                 mov     [bx],   al
  35.                 jmp     @@Break
  36.  
  37.                 @@Next:
  38.                 add     bx,     1
  39.         loop    @@For
  40. @@Break:
  41.  
  42. endm
  43.  
  44. main    proc
  45.         mov     ax,     @data
  46.         mov     ds,     ax
  47.  
  48.         ;вывод исходной строки на экран
  49.         mov     ah,     09h
  50.         lea     dx,     Before
  51.         int     21h
  52.  
  53.         mov     ah,     09h
  54.         lea     dx,     S+1
  55.         int     21h
  56.  
  57.         mov     ah,     09h
  58.         lea     dx,     CrLf
  59.         int     21h
  60.  
  61.         ;обработка строки
  62.         lea     bx,     S
  63.         Replace XX, YY
  64.  
  65.         ;вывод обработанной строки на экран
  66.         mov     ah,     09h
  67.         lea     dx,     After
  68.         int     21h
  69.  
  70.         mov     ah,     09h
  71.         lea     dx,     S+1
  72.         int     21h
  73.  
  74.         mov     ah,     09h
  75.         lea     dx,     CrLf
  76.         int     21h
  77.  
  78.         mov     ax,     4C00h
  79.         int     21h
  80. main    endp
  81.  
  82. end     main

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут