dseg segment
hextb db '0123456789ABCDEF'
msg0 db 0dh,0ah, '**********Menu***********',0dh,0ah
db '* 1.Input Binary Number:*',0dh,0ah
db '* 2.Input Hex Number: *',0dh,0ah
db '* 3.exit *',0dh,0ah
db '*************************',0dh,0ah,'$'
msg1 db 0dh,0ah,'Input Binary Number:$'
msg2 db 0dh,0ah,'Input Hex Number:$'
res1 db 0dh,0ah,'Convert2Hex Number:$'
res2 db 0dh,0ah,'Convert2Bin Number:$'
crlf db 0dh,0ah,'$'
dseg ends
cseg segment
assume cs:cseg, ds:dseg
start:
mov ax, dseg
mov ds, ax
m0:
mov ah,9
lea dx, msg0
int 21h
mov ah, 7
int 21h
cmp al,'1'
jb m0
cmp al,'3'
ja m0
mov ah,0eh
int 10h
and al,0fh
cmp al,1
jz m1
cmp al,2
jz m2
cmp al,3
jz m3
m1:
mov ah,9
lea dx, msg1
int 21h
call readBin
mov ah,9
lea dx, res1
int 21h
call printHex
jmp m0
m2:
mov ah,9
lea dx, msg2
int 21h
call readHex
mov ah,9
lea dx, res2
int 21h
call printBin
jmp m0
m3:
mov ah,4ch
int 21h
readBin proc near
mov bx, 0
mov cx, 16
b0:
mov ah,7
int 21h
cmp al,0dh
jz b1
cmp al,'0'
jb b0
cmp al,'1'
ja b0
mov ah,0eh
int 10h
and ax,01h
shl bx,1
add bx,ax
dec cx
jnz b0
b1:
ret
readBin endp
printBin proc near
mov cx,16
mov ah,0eh
p1:
rol bx,1
mov al,bl
and al,1
xor al,30h
int 10h
loop p1
ret
printBin endp
readHex proc near
mov bx,0
mov cx,404h
h0:
mov ah,7
int 21h
cmp al,0dh
jz h6
cmp al,'0'
jb h0
cmp al,'9'
ja h1
mov ah,0eh
int 10h
and al,0fh
jmp h5
h1:
cmp al,'A'
jb h0
cmp al,'F'
ja h2
mov ah,0eh
int 10h
sub al,37H
jmp h5
h2:
cmp al,'a'
jb h0
cmp al,'f'
ja h0
mov ah,0eh
int 10h
sub al,57H
h5:
shl bx,cl
add bl,al
dec ch
jnz h0
h6:
ret
readHex endp
printHex proc near
mov cx,404h
mov ah,0eh
mov dx, bx
lea bx, hextb
p0:
rol dx, cl
mov al, dl
and al,0fh
xlat
int 10h
dec ch
jnz p0
ret
printHex endp
cseg ends
end start
编程实现二进制数和十六进制数之间的转换。
要求键入被转换数,转换的结果要求从屏幕上显示。
程序如下:
为了突出重点,只是实现了题目要求的内容。
省略了提示和菜单,本程序就非常简洁。