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