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