用汇编实现256以内的三个数的加减乘除运算

时间有限,就做了这个,有不足之处,还望指点,谢谢!                 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  黑白君

猜你喜欢

转载自blog.csdn.net/baidu_38760069/article/details/80031801