我的程序十进制结果正确,二进制与十六进制的结果高位会多出一个6,求解
;问题1,二进制和十六进制输出会奇怪的多出一个6
data segment
inf1 db 0dh,0ah,"input the first one",0dh,0ah,'$'
inf2 db "input the second one",0dh,0ah,'$'
crlf db 0ah,0dh,'$';回车换行
menu db "1 print binary",0dh,0ah
db "2 print decimal",0dh,0ah
db "3 print hex",0dh,0ah
db "4 exit",0dh,0ah,'$'
data ends
code segment
assume cs:code,ds:data,es:data
start:
mov ax,data
mov ds,ax
mov dx, offset inf1;输入操作数1
mov ah,9
int 21H
mov ah,1
int 21H
mov bh,al;将操作数1移到bh中
mov dx,offset crlf
mov ah,9
int 21H
mov dx,offset inf2;输入操作数2
mov ah,9
int 21H
mov ah,1
int 21H
mov bl,al;将操作数2移到bl中
lea dx,crlf
mov ah,9
int 21H
mov dx,offset menu
mov ah,9
int 21H
mov ah,8
int 21H
cmp al,'1'
jz binar
cmp al,'2'
jz decim
cmp al,'3'
jz hexx
cmp al,'4'
jz exit
jmp start
binar:
add bl,bh;相加,结果存在bl中
mov al,bl
mov bl,8
next1:
mov dl,0
shl al,1
mov bh,al
adc dl,30h
mov ah,2
int 21H
mov al,BH
dec bl
jnz next1
jmp start
decim:
add bl,bh
mov dl,bl
sub dl,30h
cmp dl,39h;比较dl和十进制9的大小
jbe l1;如果小于9,则直接输出
sub dl,30h
mov al,dl
mov ah,0
mov bl,10
div bl
mov dl,al
mov cl,ah;防止ah中的商被02h冲掉,先把商转移到cl中
add dl,30h
mov ah,2
int 21H
mov dl,cl
add dl,30h
l1:
mov ah,2
int 21H
jmp start
hexx:
add bl,bh
mov al,bl
mov bh,al
mov cl,4
shr al,cl
cmp al,0ah
jb next2
add al,7h
next2:
add al,30h
mov dl,al
mov ah,2
int 21H
mov al,BH
and al,0fh
cmp al,0ah
jb next3
add al,7h
next3:
add al,30h
mov dl,al
mov ah,2
int 21H
jmp start
exit:
mov ah,4cH
int 21H
code ends
end start