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

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

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

В сегменте данных задана последовательность из шести слов:7FFFh, 7AC9h, F481h, 7314h, 2224h, 124h. Найти значения, которое меньше или равно 7FF1h и вывести его на экран. Вывод символа на экран оформить в виде процедуры. Для байтовых значений все понятно, выводимый байт в al, а как быть со словом? его то надо в размерность ax, тогда куда функция вывода 0eh в bx?
name procedur
         assume cs:cod, ds:data
         data segment
         aa db 9h,8h,3h,6h,5h,2h,3h,7h,1h,5h
         data ends
         cod  segment
         start proc far
         push ds
         mov ax,0
         push ax
               mov ax, data ;инициализация сегментного
               mov ds,ax ;регистра
               lea bx,aa ;адрес байтовой последовательности в регистре BX  
               mov ah,0eh ;в AH номер функции прерывания вывода символа на  экран
               mov cx,10 ;инициализация счётчика числа байт
         l1:   mov al,[bx] ;запись в AL значения текущего байта
               cmp al, 5h ;дальше если меньше или равно
               jg l2 ;переход если больше
               call sym ;вызов подпрограммы вывода байта на экран
         l2:   inc bx ;смещение указателя на следующий байт
               mov al, 20h ;занесение в AL кода символа пробела
               int 10h ;вызов программного прерывания вывода символа на экран
               loop l1
         ret
         start endp 
         sym proc
               push cx ;сохранение в стеке содержимого счётчика байт
               mov dl,al ;сохранение в DL значения выводимого байта
               mov cl,2 ; инициализация счётчика числа символов в байте
       p4:   mov dh,0 ;обнуление регистра, в который выдвигается цифра из байта
               mov ch,4 ;инициализация счётчика числа бит в шестнадцатеричной цифре
       p1:   shl dh,1 ;освобождение места для записи бита выдвигаемой цифры
               shl dl,1 ;выдвижение бита цифры во флаг С
               adc dh,0 ;занесение содержимого флага С (бита цифры) в регистр DH
               dec ch ;декремент счётчика числа бит в цифре
               jnz p1 ;если не 0 - переход к началу цикла
               mov al,dh ;перезапись выдвинутой цифры в AL
               cmp al,9 ;проверка - является ли цифра "буквенной", если да – переход на
               ja p2 ;метку, иначе - преобразование
               add al,30h ;цифры в её символическое представление (ASCII код)
               jmp p3
       p2:   add al,37h ;преобразование  буквенной цифры в её символическое            представление                                                                           
       p3:   int 10h ;вывод символа на экран
               loop p4
               pop cx
               ret
      sym endp
      cod ends
      end start

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

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

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

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

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

10   голосов , оценка 4.4 из 5
Похожие ответы