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