Код:
masm
model small
.data
mes1 db 'Input first decimal number: $'
mes2 db 'Input second decimal number: $'
mes3 db 'Hex form of first number: $'
mes4 db 'Hex form of second number: $'
nline db 0Dh, 0Ah, '$'
tabl db 48 dup (0), 0,1,2,3,4,5,6,7,8,9, 198 dup (0)
hex0 db '0$'
hex1 db '1$'
hex2 db '2$'
hex3 db '3$'
hex4 db '4$'
hex5 db '5$'
hex6 db '6$'
hex7 db '7$'
hex8 db '8$'
hex9 db '9$'
hexA db 'A$'
hexB db 'B$'
hexC db 'C$'
hexD db 'D$'
hexE db 'E$'
hexF db 'F$'
temp db 0
.stack 256h
mov ax,@data ; инициализация регистра ds ...
mov ds,ax ; ... через регистр ax
lea bx,tabl ; загрузить относительный адрес псевдо-таблицы кодов
mov ax,3 ; пересылаем в ax номер функции - очистки экрана
int 10h ; вызываем необходимое прерывание
mov ah,9 ; пересылаем в ah номер функции - вывод строки на экран
mov dx,offset mes1 ; пересылаем в dx смещение первого байта строки mes1 в сегменте данных
int 21h ; вызываем необходимое прерывание
xor ax,ax ; очищаем регистр ах
mov ah,1h ; пересылаем в ah номер функции - ввод символа в консоли
int 21h ; вызываем необходимое прерывание
xlat ; трансляция байта номер ах из псевдо-таблицы кодов в регистр ах
mov dl,al ; сохраняем в dl промежуточный результат
shl dl,4 ; сдвигом на четыре бита влево освобождаем место в dl для следующей цифры
xor ax,ax ; очищаем регистр ах
mov ah,1h ; пересылаем в ah номер функции - ввод символа в консоли
int 21h ; вызываем необходимое прерывание
xlat ; трансляция байта номер ах из псевдо-таблицы кодов в регистр ах
add al,dl ; теперь в al введённое десятичное число
mov temp, al ; сохраняем содержимое al по адресу temp
mov ah,9 ; пересылаем в ah номер функции - вывод строки на экран
mov dx,offset nline ; пересылаем в dx смещение первого байта строки nline в сегменте данных
int 21h ; вызываем необходимое прерывание
mov dx,offset mes2 ; пересылаем в dx смещение первого байта строки mes2 в сегменте данных
int 21h ; вызываем необходимое прерывание
xor ax,ax ; очищаем регистр ах
mov ah,1h ; пересылаем в ah номер функции - ввод символа в консоли
int 21h ; вызываем необходимое прерывание
xlat ; трансляция байта номер ах из псевдо-таблицы кодов в регистр ах
mov dl,al ; сохраняем в dl промежуточный результат
shl dl,4 ; сдвигом на четыре бита влево освобождаем место в dl для следующей цифры
int 21h ; вызываем необходимое прерывание
xor ax,ax ; очищаем регистр ах
mov ah,1h
int 21h
xlat
add al,dl
push ax
mov al, temp
xor cx, cx
shr al, 4
mov cx, 2
comp:
cmp al, 00h
je l0
cmp al, 01h
je l1
cmp al, 02h
je l2
cmp al, 03h
je l3
cmp al, 04h
je l4
cmp al, 05h
je l5
cmp al, 06h
je l6
cmp al, 07h
je l7
cmp al, 08h
je l8
cmp al, 09h
je l9
cmp al, 0Ah
je lA
cmp al, 0Bh
je lB
cmp al, 0Ch
je lC
cmp al, 0Dh
je lD
cmp al, 0Eh
je laE
cmp al, 0Fh
je lF
l0: mov dx,offset hex0
jmp outp
l1: mov dx,offset hex1
jmp outp
l2: mov dx,offset hex2
jmp outp
l3: mov dx,offset hex3
jmp outp
l4: mov dx,offset hex4
jmp outp
l5: mov dx,offset hex5
jmp outp
l6: mov dx,offset hex6
jmp outp
l7: mov dx,offset hex7
jmp outp
l8: mov dx,offset hex8
jmp outp
l9: mov dx,offset hex9
jmp outp
lA: mov dx,offset hexA
jmp outp
lB: mov dx,offset hexB
jmp outp
lC: mov dx,offset hexC
jmp outp
lD: mov dx,offset hexD
jmp outp
laE: mov dx,offset hexE
jmp outp
lF: mov dx,offset hexF
jmp outp
outp:
mov ah,9
int 21h
mov ah,9
mov dx,offset nline
int 21h
pop ax
shl al,8
shr al,12
dec cx
jz stop
jmp comp
stop: mov ax,4c00h ;
int 21h ;
main endp ;
end main ;