Не могу вывести слово после сравнения - 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 будет храниться адрес следующего байта после текущей позиции.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д