时间有限,就做了这个,有不足之处,还望指点,谢谢! QQ:1041176269 黑白君
以下程序,是实现三个任意小于256的数的加减乘除运算,并且结果不超过256(本来想设置一个循环判断的,但由于时间限制,就暂时这样吧)
;本程序实现的主要功能:三位数以内的加减乘除。(注:除法中舍去小数,即只进行取整操作)
;
;
;思路:
; 1.用dos10号功能,从键盘录入三个数
; 2.每输入一个数对该数进行一次判断
; 3.根据判断的结果对三个数进行不同的操作处理
;
;
;
data segment
s1 db "Please input x:$"
s2 db "Please input y:$"
s3 db "Please input z:$"
s4 db "Please input methods(+-*/):$"
e db "error!$"
ex db "input x error!$"
ey db "input y error!$"
ez db "input z error!$"
ou db "The last answer is:$"
x db 4,?,5 dup(?)
y db 4,?,5 dup(?)
z db 4,?,5 dup(?)
w db ?,?
f1 db ?
f2 db ?
x1 db ? ;存x
y1 db ? ;存y
z1 db ? ;存z
k1 db ?
k2 db ?
data ends
stack segment
stack ends
code segment
assume ds:data,cs:code,ss:stack
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;输入三个数,对三个数进行操作;;;;;;;;;;;;;;;;;;;;;;;;;;;
main0:
call inx ;输入三个数
set1:
call input ;输入运算符
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;对输入的运算符进行判断;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mainf1:
cmp f1,'+'
jz call_01
cmp f1,'-'
jz call_02
cmp f1,'*'
jz call_03
cmp f1,'/'
jz call_04
jmp error1
mainf2:
cmp f2,'+'
jz call_11
cmp f2,'-'
jz call_12
cmp f2,'*'
jz call_13
cmp f2,'/'
jz call_14
jmp error1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;判断结果的大小,分别进行输出;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
output1:
lea dx,ou
mov ah,9
int 21h ;The last answer is:
cmp bx,0
jl fu1 ;若结果为负,则跳转至fu1处进行输出
cmp bx,100
jge bigger1 ;若结果大于等于100,则跳转至bigger1处进行输出
cmp bx,10
jge big1 ;若结果大于等于10,则跳转至big1处进行输出
;否则,直接输出
mov dl,bl
add dl,30h
mov ah,2
int 21h
jmp out1 ;结束程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;输入三个数;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
inx: ;输入x
lea dx,s1
mov ah,9
int 21h ;Please input x:
lea dx,x
mov ah,10
int 21h
mov bl,x+1
cmp bl,0
jz errorx ;如果位数为0,则跳转至报错处errorx
;根据x+2号单元的值对输入的字符进行一个判断,从而确定x的正负
mov bl,x+2
cmp bl,'-'
jz fushuchul;x<0
;若x不为负数,则先对其位数进行处理
mov bl,x+1
cmp bl,1
jz weix1
cmp bl,2
jz weix2
cmp bl,3
jz weix3
jmp errorx ;若x位数超过3位,则跳转至错误处errorx
iny: ;输入y
mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
lea dx,s2
mov ah,9
int 21h ;Please input y:
lea dx,y
mov ah,10
int 21h
mov bl,y+1
cmp bl,0
jz errory ;如果位数为0,则跳转至报错处errory
;根据y+2号单元的值对输入的字符进行一个判断,从而确定y的正负
mov bl,y+2
cmp bl,'-'
jz fushuchuly;y<0
;若y不为负数,则先对其位数进行处理
mov bl,y+1
cmp bl,1
jz weiy1
cmp bl,2
jz weiy2
cmp bl,3
jz weiy3
jmp errory ;若y位数超过3位,则跳转至错误处errory
inz: ;输入z
mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
lea dx,s3
mov ah,9
int 21h ;Please input z:
lea dx,z
mov ah,10
int 21h
mov bl,z+1
cmp bl,0
jz errorz ;如果位数为0,则跳转至报错处errorz
;根据z+2号单元的值对输入的字符进行一个判断,从而确定z的正负
mov bl,z+2
cmp bl,'-'
jz fushuchulz;y<0
;若z不为负数,则先对其位数进行处理
mov bl,z+1
cmp bl,1
jz weiz1
cmp bl,2
jz weiz2
cmp bl,3
jz weiz3
jmp errorz ;若y位数超过3位,则跳转至错误处errorz
inn:
mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
ret ;返回至断点处,继续执行主程序,也就意味着三个数输入结束
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;输入两个运算符;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
input:
lea dx,s4
mov ah,9
int 21h ;Please input methods(+-*/):
mov ah,1
int 21h
mov f1,al
mov ah,1
int 21h
mov f2,al
mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
ret ;返回至断点处,继续执行主程序,也就意味着两个运算符输入结束
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X Y -> W;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
add1:
mov al,x1
add al,y1
mov w,al
ret
sub1:
mov al,x1
sub al,y1
mov w,al
ret
imul1:
mov al,x1
mov bl,y1
imul bl
mov w,al
ret
idiv1:
mov al,x1
cbw
mov bl,y1
idiv bl
mov w,al
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;W Z -> BX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
add2:
mov al,w
add al,z1
cbw
mov bx,ax
ret
sub2:
mov ah,0
mov al,w
sub al,z1
sbb ah,0
mov bx,ax
ret
imul2:
mov al,w
mov bl,z1
imul bl
mov bx,ax
ret
idiv2:
mov al,w
cbw
mov bl,z1
idiv bl
cbw
mov bx,ax
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
call_01:
call add1
jmp mainf2 ;若第一个运算符为加号,则执行add1,并且返回mainf2对第二个运算符进行判断
call_02:
call sub1
jmp mainf2 ;若第一个运算符为减号,则执行sub1,并且返回mainf2对第二个运算符进行判断
call_03:
call imul1
jmp mainf2 ;若第一个运算符为乘号,则执行imul1,并且返回mainf2对第二个运算符进行判断
call_04:
call idiv1
jmp mainf2 ;若第一个运算符为除号,则执行idiv1,并且返回mainf2对第二个运算符进行判断
call_11:
call add2
jmp output1 ;若第二个运算符为加号,则执行add2,并且返回output1对结果进行判断
call_12:
call sub2
jmp output1 ;若第二个运算符为减号,则执行sub2,并且返回output1对结果进行判断
call_13:
call imul2
jmp output1 ;若第二个运算符为乘号,则执行imul2,并且返回output1对结果进行判断
call_14:
call idiv2
jmp output1 ;若第二个运算符为除号,则执行idiv2,并且返回output1对结果进行判断
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;输入的运算符有误;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
error1:
lea dx,e
mov ah,9
int 21h
mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
jmp set1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;输入的x每一位不合法;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
errorx:
mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
lea dx,ex
mov ah,9
int 21h
mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
jmp inx
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;输入的y每一位不合法;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
errory:
mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
lea dx,ey
mov ah,9
int 21h
mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
jmp iny
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;输入的z每一位不合法;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
errorz:
mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
lea dx,ez
mov ah,9
int 21h
mov dl,10
mov ah,2
int 21h
mov dl,13
mov ah,2
int 21h
jmp inz
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;结果小于0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
fu1:
mov dl,'-'
mov ah,2
int 21h
neg bx
cmp bx,100
jge bigger1
cmp bx,10
jge big1
mov dl,bl
add dl,30h
mov ah,2
int 21h
jmp out1 ;结束程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;结果大于10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
big1:
mov ax,bx
mov bl,10
idiv bl
mov bh,ah
mov bl,al
mov dl,bl
add dl,30h
mov ah,2
int 21h
mov dl,bh
add dl,30h
mov ah,2
int 21h
jmp out1 ;结束程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;结果大于100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
bigger1:
mov ax,bx
mov cl,100
idiv cl
mov k1,al
mov al,ah
cbw
mov cl,10
idiv cl
mov k2,al
mov bl,ah
mov dl,k1
add dl,30h
mov ah,2
int 21h
mov dl,k2
add dl,30h
mov ah,2
int 21h
mov dl,bl
add dl,30h
mov ah,2
int 21h
jmp out1 ;结束程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;判断x的每一位是否合法;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
weix:
cmp bl,30h
jl errorx
cmp bl,39h
jg errorx
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;判断y的每一位是否合法;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
weiy:
cmp bl,30h
jl errory
cmp bl,39h
jg errory
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;判断z的每一位是否合法;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
weiz:
cmp bl,30h
jl errorz
cmp bl,39h
jg errorz
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;x不为负数时的不同位数处理;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
weix1: ;x为一位数
mov bl,x+2
call weix ;判断第一位是否合法
sub bl,30h
mov x1,bl ;把x的值存入x1中
jmp iny
weix2: ;x为两位数
mov bl,x+2
call weix ;判断第一位是否合法
sub bl,30h
mov al,bl
mov bl,x+3
call weix ;判断第二位是否合法
sub bl,30h
mov cl,10
imul cl
add al,bl
mov x1,al ;把x的值存入x1中
jmp iny
weix3: ;x为三位数
mov bl,x+2
call weix
sub bl,30h
mov al,bl ;第一位合法,把第一位送入al中
mov bl,x+3
call weix
sub bl,30h
mov k1,bl ;第二位合法,把第二位送入k1中
mov bl,x+4
call weix
sub bl,30h ;第三位合法,把第三位放入bl中
mov cl,100
imul cl
mov k2,al ;第一位乘100放入k2中
mov al,k1 ;把第二位送入al中
mov cl,10
imul cl
add k2,al ;第二位a1乘10并与第一位k2相加,结果存入k2
add k2,bl ;第三位bl与k2相加,结果存入k2
mov bl,k2
mov x1,bl ;把x的值存入x1中
jmp iny
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;x为负;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
fushuchul:
;根据x+1号单元的值,算出x的位数
mov bl,x+1
dec bl ;x的位数为输入字符个数-1(负号占用第一个缓冲区)
cmp bl,0
jz errorx ;若字符数为0,则跳转至错误处errorx
cmp bl,1
jz fweix1
cmp bl,2
jz fweix2
cmp bl,3
jz fweix3
jmp errorx ;若x的位数超过3位,则跳转至错误处errorx
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;x为负时的不同位数处理;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
fweix1: ;x为一位数
mov bl,x+3
call weix ;判断第一位是否合法
sub bl,30h
mov x1,bl ;把x的值存入x1中
jmp iny
fweix2: ;x为两位数
mov bl,x+3
call weix ;判断第一位是否合法
sub bl,30h
mov al,bl
mov bl,x+4
call weix ;判断第二位是否合法
sub bl,30h
mov cl,10
imul cl
add al,bl
mov x1,al ;把x的值存入x1中
jmp iny
fweix3: ;x为三位数
mov bl,x+3
call weix
sub bl,30h
mov al,bl ;第一位合法,把第一位送入al中
mov bl,x+4
call weix
sub bl,30h
mov k1,bl ;第二位合法,把第二位送入k1中
mov bl,x+5
call weix
sub bl,30h ;第三位合法,把第三位放入bl中
mov cl,100
imul cl
mov k2,al ;第一位乘100放入k2中
mov al,k1 ;把第二位送入al中
mov cl,10
imul cl
add k2,al ;第二位a1乘10并与第一位k2相加,结果存入k2
add k2,bl ;第三位bl与k2相加,结果存入k2
mov bl,k2
mov x1,bl ;把x的值存入x1中
jmp iny
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;y不为负数时的不同位数处理;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
weiy1: ;y为一位数
mov bl,y+2
call weiy ;判断第一位是否合法
sub bl,30h
mov y1,bl ;把y的值存入y1中
jmp inz
weiy2: ;y为两位数
mov bl,y+2
call weiy ;判断第一位是否合法
sub bl,30h
mov al,bl
mov bl,y+3
call weiy ;判断第二位是否合法
sub bl,30h
mov cl,10
imul cl
add al,bl
mov y1,al ;把y的值存入y1中
jmp inz
weiy3: ;y为三位数
mov bl,y+2
call weiy
sub bl,30h
mov al,bl ;第一位合法,把第一位送入al中
mov bl,y+3
call weiy
sub bl,30h
mov k1,bl ;第二位合法,把第二位送入k1中
mov bl,y+4
call weiy
sub bl,30h ;第三位合法,把第三位放入bl中
mov cl,100
imul cl
mov k2,al ;第一位乘100放入k2中
mov al,k1 ;把第二位送入al中
mov cl,10
imul cl
add k2,al ;第二位a1乘10并与第一位k2相加,结果存入k2
add k2,bl ;第三位bl与k2相加,结果存入k2
mov bl,k2
mov y1,bl ;把y的值存入y1中
jmp inz
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;y为负;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
fushuchuly:
;根据y+1号单元的值,算出y的位数
mov bl,y+1
dec bl ;y的位数为输入字符个数-1(负号占用第一个缓冲区)
cmp bl,0
jz errory ;若字符数为0,则跳转至错误处errory
cmp bl,1
jz fweiy1
cmp bl,2
jz fweiy2
cmp bl,3
jz fweiy3
jmp errory ;若y的位数超过3位,则跳转至错误处errory
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;y为负时的不同位数处理;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
fweiy1: ;y为一位数
mov bl,y+3
call weiy ;判断第一位是否合法
sub bl,30h
mov y1,bl ;把y的值存入y1中
jmp inz
fweiy2: ;y为两位数
mov bl,y+3
call weiy ;判断第一位是否合法
sub bl,30h
mov al,bl
mov bl,y+4
call weiy ;判断第二位是否合法
sub bl,30h
mov cl,10
imul cl
add al,bl
mov y1,al ;把y的值存入y1中
jmp inz
fweiy3: ;y为三位数
mov bl,y+3
call weiy
sub bl,30h
mov al,bl ;第一位合法,把第一位送入al中
mov bl,y+4
call weiy
sub bl,30h
mov k1,bl ;第二位合法,把第二位送入k1中
mov bl,y+5
call weiy
sub bl,30h ;第三位合法,把第三位放入bl中
mov cl,100
imul cl
mov k2,al ;第一位乘100放入k2中
mov al,k1 ;把第二位送入al中
mov cl,10
imul cl
add k2,al ;第二位a1乘10并与第一位k2相加,结果存入k2
add k2,bl ;第三位bl与k2相加,结果存入k2
mov bl,k2
mov y1,bl ;把y的值存入y1中
jmp inz
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;z不为负数时的不同位数处理;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
weiz1: ;z为一位数
mov bl,z+2
call weiz ;判断第一位是否合法
sub bl,30h
mov z1,bl ;把z的值存入z1中
jmp inn
weiz2: ;z为两位数
mov bl,z+2
call weiz ;判断第一位是否合法
sub bl,30h
mov al,bl
mov bl,z+3
call weiz ;判断第二位是否合法
sub bl,30h
mov cl,10
imul cl
add al,bl
mov z1,al ;把z的值存入z1中
jmp inn
weiz3: ;z为三位数
mov bl,z+2
call weiz
sub bl,30h
mov al,bl ;第一位合法,把第一位送入al中
mov bl,z+3
call weiz
sub bl,30h
mov k1,bl ;第二位合法,把第二位送入k1中
mov bl,z+4
call weiz
sub bl,30h ;第三位合法,把第三位放入bl中
mov cl,100
imul cl
mov k2,al ;第一位乘100放入k2中
mov al,k1 ;把第二位送入al中
mov cl,10
imul cl
add k2,al ;第二位a1乘10并与第一位k2相加,结果存入k2
add k2,bl ;第三位bl与k2相加,结果存入k2
mov bl,k2
mov z1,bl ;把z的值存入z1中
jmp inn
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;z为负;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
fushuchulz:
;根据z+1号单元的值,算出z的位数
mov bl,z+1
dec bl ;z的位数为输入字符个数-1(负号占用第一个缓冲区)
cmp bl,0
jz errorz ;若字符数为0,则跳转至错误处errorz
cmp bl,1
jz fweiz1
cmp bl,2
jz fweiz2
cmp bl,3
jz fweiz3
jmp errorz ;若z的位数超过3位,则跳转至错误处errorz
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;z为负时的不同位数处理;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
fweiz1: ;z为一位数
mov bl,z+3
call weiz ;判断第一位是否合法
sub bl,30h
mov z1,bl ;把z的值存入z1中
jmp inn
fweiz2: ;z为两位数
mov bl,z+3
call weiz ;判断第一位是否合法
sub bl,30h
mov al,bl
mov bl,z+4
call weiz ;判断第二位是否合法
sub bl,30h
mov cl,10
imul cl
add al,bl
mov z1,al ;把z的值存入z1中
jmp inn
fweiz3: ;z为三位数
mov bl,z+3
call weiz
sub bl,30h
mov al,bl ;第一位合法,把第一位送入al中
mov bl,z+4
call weiz
sub bl,30h
mov k1,bl ;第二位合法,把第二位送入k1中
mov bl,z+5
call weiz
sub bl,30h ;第三位合法,把第三位放入bl中
mov cl,100
imul cl
mov k2,al ;第一位乘100放入k2中
mov al,k1 ;把第二位送入al中
mov cl,10
imul cl
add k2,al ;第二位a1乘10并与第一位k2相加,结果存入k2
add k2,bl ;第三位bl与k2相加,结果存入k2
mov bl,k2
mov z1,bl ;把z的值存入z1中
jmp inn
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
out1:
mov ah,4ch
int 21h
code ends
end start
1.10以内的运行结果:
2.大于10,小于256的运行结果:
3.小于0,但大于-256的运行结果:
时间有限,就做了这个,有不足之处,还望指点,谢谢! QQ:1041176269 黑白君