Не могу вывести слово после сравнения - Assembler

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

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

В сегменте данных задана последовательность из шести слов:7FFFh, 7AC9h, F481h, 7314h, 2224h, 124h. Найти значения, которое меньше или равно 7FF1h и вывести его на экран. Вывод символа на экран оформить в виде процедуры. Для байтовых значений все понятно, выводимый байт в al, а как быть со словом? его то надо в размерность ax, тогда куда функция вывода 0eh в bx?
Листинг программы
  1. name procedur
  2. assume cs:cod, ds:data
  3. data segment
  4. aa db 9h,8h,3h,6h,5h,2h,3h,7h,1h,5h
  5. data ends
  6. cod segment
  7. start proc far
  8. push ds
  9. mov ax,0
  10. push ax
  11. mov ax, data ;инициализация сегментного
  12. mov ds,ax ;регистра
  13. lea bx,aa ;адрес байтовой последовательности в регистре BX
  14. mov ah,0eh AH номер функции прерывания вывода символа на экран
  15. mov cx,10 ;инициализация счётчика числа байт
  16. l1: mov al,[bx] ;запись в AL значения текущего байта
  17. cmp al, 5h ;дальше если меньше или равно
  18. jg l2 ;переход если больше
  19. call sym ;вызов подпрограммы вывода байта на экран
  20. l2: inc bx ;смещение указателя на следующий байт
  21. mov al, 20h ;занесение в AL кода символа пробела
  22. int 10h ;вызов программного прерывания вывода символа на экран
  23. loop l1
  24. ret
  25. start endp
  26. sym proc
  27. push cx ;сохранение в стеке содержимого счётчика байт
  28. mov dl,al ;сохранение в DL значения выводимого байта
  29. mov cl,2 ; инициализация счётчика числа символов в байте
  30. p4: mov dh,0 ;обнуление регистра, в который выдвигается цифра из байта
  31. mov ch,4 ;инициализация счётчика числа бит в шестнадцатеричной цифре
  32. p1: shl dh,1 ;освобождение места для записи бита выдвигаемой цифры
  33. shl dl,1 ;выдвижение бита цифры во флаг С
  34. adc dh,0 ;занесение содержимого флага С (бита цифры) в регистр DH
  35. dec ch ;декремент счётчика числа бит в цифре
  36. jnz p1 ;если не 0 - переход к началу цикла
  37. mov al,dh ;перезапись выдвинутой цифры в AL
  38. cmp al,9 ;проверка - является ли цифра "буквенной", если да переход на
  39. ja p2 ;метку, иначе - преобразование
  40. add al,30h ;цифры в её символическое представление (ASCII код)
  41. jmp p3
  42. p2: add al,37h ;преобразование буквенной цифры в её символическое представление
  43. p3: int 10h ;вывод символа на экран
  44. loop p4
  45. pop cx
  46. ret
  47. sym endp
  48. cod ends
  49. end start

Решение задачи: «Не могу вывести слово после сравнения»

textual
Листинг программы
  1.                lea bx,x+1 ;адрес байтовой последовательности в регистре BX

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

  1. lea bx,x+1 - в данном коде используется инструкция LEA (Load Effective Address), которая загружает в регистр BX (Binder) адрес байтовой последовательности, при этом значение смещения хранится в регистре X и увеличивается на единицу. В результате, в регистре BX будет храниться адрес следующего байта после текущей позиции.

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


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

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

10   голосов , оценка 4.4 из 5

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

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

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