;---------Prg_3_1.asm----------------------------------
;Программа преобразования двузначного шестнадцатеричного числа
;в символьном виде в двоичное представление.
;Вход: исходное шестнадцатеричное число из двух цифр,
;вводится с клавиатуры.
;Выход: результат преобразования должен
;быть в регистре dl.
;------------------------------------------------------
data segment para public 'data' ;сегмент данных
message db 'Введите две шестнадцатеричные цифры,$'
data ends
stk segment stack
db 256 dup ('?') ;сегмент стека
stk ends
code segment para public 'code' ;начало сегмента кода
main proc ;начало процедуры main
assume cs:code,ds:data,ss:stk
mov ax,data ;адрес сегмента данных в регистр ax
mov ds,ax ;ax в ds
mov ah,9
mov dx,offset message
int 21h
xor ax,ax ;очистить регистр ax
mov ah,1h ;1h в регистр ah
int 21h ;генерация прерывания с номером 21h
mov dl,al ;содержимое регистра al в регистр dl
sub dl,30h ;вычитание: (dl)=(dl)-30h
cmp dl,9h ;сравнить (dl) с 9h
jle M1 ;перейти на метку M1 если dl<9h или dl=9h
sub dl,7h ;вычитание: (dl)=(dl)-7h
M1: ;определение метки M1
mov cl,4h ;пересылка 4h в регистр cl
shl dl,cl ;сдвиг содержимого dl на 4 разряда влево
int 21h ;вызов прерывания с номером 21h
sub al,30h ;вычитание: (dl)=(dl)-30h
cmp al,9h ;сравнить (al) с 9h 28
jle M2 ;перейти на метку M2 если al<9h или al=9h
sub al,7h ;вычитание: (al)=(al)-7h
M2: ;определение метки M2
add dl,al ;сложение: (dl)=(dl)+(al)
mov ax,4c00h ;пересылка 4c00h в регистр ax
int 21h ;вызов прерывания с номером 21h
main endp ;конец процедуры main
code ends ;конец сегмента кода
end main ;конец программы с точкой входа main
|