写得比较乱,而且思路和逻辑不对,大幅修改不如重写一遍
;---------------------
DATA SEGMENTstr1 db 'Input 2 digit:','$'
str2 db 0dh,0ah,'Input error!','$'
inputbuf DB 3,0,3 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
LEA DX,STR1
MOV AH,9
INT 21H ;显示str1
LEA DX,inputbuf ; 取输入函数地址
MOV AH,0AH
INT 21H
lea si,inputbuf + 2 ;取输入缓冲区地址
xor bx,bx ;初始化
mov cx,10
next:
mov al,[si]
cmp al,0dh ;是否回车
jz ok ;是
sub al,'0' ;ascii转值
cmp al,9 ;是否0-9
**e go ;不是
mov dx,offset str2
mov ah,9
int 21h
jmp short exit
go:
mov ah,0
xchg bx,ax ;交换
mul cx ; 前值 x 10,即进位
xchg bx,ax ;交换
add bx,ax ;加个位
inc si
jmp short next ;回圈
ok:
mov dl,0ah ;以下印出回车
mov ah,2
int 21h
mov dl,0dh
int 21h
mov cx,8 ;8bit
next1:
shl bl,1 ;左移
mov dl,'0'
adc dl,0 ;加上进位,若有进位则dl='1',否则dl='0'
mov ah,2
int 21h
loop next1
exit:
MOV AX,4C00H
INT 21H
CODE ENDS
END START