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

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

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

Листинг программы
  1. Zamena macro a, b, addr
  2. local m1, pass, exit
  3. push si cx ax
  4. mov bx, addr
  5. mov cl, [bx]
  6. mov ch, 0
  7. jcxz exit
  8. mov al, a
  9. mov ah, b
  10. loop1: inc bx
  11. cmp [bx], al
  12. jne cont
  13. mov [bx], ah
  14. cont: loop loop1
  15. endm
  16.  
  17. data segment
  18. array db 7,1,2,3,4,5,6,7
  19. a db 3
  20. b db 25
  21. data ends
  22. code segment
  23. assume cs:code, ds:data
  24. start: mov ax,data
  25. mov ds,ax
  26. lea bx, array
  27. Zamena a, b, bx
  28.  
  29. mov si,4
  30. mov dl, array[si]
  31. mov ah,02h
  32. int 21h
  33. mov ah,4ch
  34. int 21h
  35. code ends
  36. end start
Почему в строке 29 выдает ошибку Undefined symbol: ??0002

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

textual
Листинг программы
  1. Zamena macro a, b, addr
  2. local loop1, cont, exit
  3. push si cx ax
  4. mov bx, addr
  5. mov ch, 0
  6. mov cl, [bx]
  7. jcxz exit
  8. mov al, a
  9. mov ah, b
  10. loop1: inc bx
  11. cmp [bx], al
  12. jne cont
  13.  
  14. mov [bx], ah
  15. cont:
  16.    loop loop1
  17. exit:
  18.    pop ax, cx, si
  19.  
  20. endm
  21.  
  22.  
  23.  
  24. data segment
  25.     array db 7,1,2,3,4,5,6,7
  26.     a db 3
  27.     b db 25
  28.     data ends
  29.     code segment
  30.        assume cs:code, ds:data
  31. start: mov ax,data
  32.        mov ds,ax
  33.        mov bx, offset array
  34.          Zamena a, b, bx
  35.          
  36.          
  37.          mov si,4
  38.          mov dl, array[si]
  39.            mov ah,4ch
  40.            int 21h
  41.  code ends
  42.       end start

Объяснение кода листинга программы

Список действий, которые происходят в коде:

  1. Макроопределение Zamena с тремя аргументами (a, b, addr) и тремя локальными переменными (loop1, cont, exit).
  2. Код цикла, который выполняется до тех пор, пока значение байта в текущей ячейке массива не станет равным значению переменной a.
  3. Сохранение результата в переменной ah.
  4. Переход к следующей ячейке массива.
  5. Выход из цикла и возврат в основную программу.
  6. Загрузка сегмента данных в регистр ax.
  7. Загрузка сегмента данных в регистр ds.
  8. Загрузка адреса массива в регистр bx.
  9. Вызов макроса Zamena с аргументами a, b и bx.
  10. Переменная si устанавливается равной 4.
  11. Переменная dl загружается значением элемента массива с индексом 4.
  12. Выполнение интеррутации int 21h.

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


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

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

13   голосов , оценка 4.077 из 5

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

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

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