Держите...
[code h=207];ввести с клавиатуры число в 16 -ной системе счисления
;и вывести на экран в виде двоичного числа
stk segment para stack ;Сегмент стека с выравниваем на 10h (para)
dw 256 dup (?)
stk ends
data segment
sHex db 'Enter hex: $'
data ends
code segment
assume cs:code, ds:data, ss:stk
main proc
mov ax, data ;ds = es = data
mov ds, ax
mov es, ax
GH_loop:
lea dx, sHex ;Enter hex:
mov ah, 9
int 21h
GH_key:
mov ah, 0 ;ждем код
int 16h
cmp al, 1bh ;по Esc выходим
je GH_ret
cmp al, '0' ;меньше цифр
jb GH_key ;игнорируем
cmp al, '9'
jbe GH_digit ;цифра - выводим
or al, 20h ;сделаем букву маленькой
cmp al, 'a'
jb GH_key ;меньше 'a' игнорируем
cmp al, 'f'
ja GH_loop ;и больше 'f'
mov dl, al ;сохраним hex-символ для вывода
sub al, 'a'-10 ;сделаем hex-цифру 'a'-'f' -> 0ah-0fh
GH_out:
mov ah, 2
push ax
int 21h ;выведем hex из dl
mov dl, ' '
int 21h
mov dl, '=' ;' = '
int 21h
mov dl, ' '
int 21h
pop ax
mov cx, 4 ;выводим только 4 бит младшей тетрады
shl al, 4 ;делаем их старшими
OB_bit: ;цикл по битам
shl al, 1 ;старший бит в С
push ax ;сохраним
mov dl, '0'
adc dl, 0 ;dl = '0' или '1'
int 21h ;выводим
pop ax
loop OB_bit ;4 бита
mov dl, 0dh
int 21h
mov dl,0ah ;перевод строки
int 21h
jmp GH_loop
GH_digit: ;цифра
mov dl, al ;сохраним hex-символ для вывода
sub al, '0' ;превратим в hex-цифру '0'-'9' -> 00h-09h
jmp GH_out ;выводим
GH_ret:
mov ax, 4c00h
int 21h
main endp
code ends
end main[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен