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

这篇博客展示了如何使用汇编语言进行256以内三个数的加减乘除运算,给出了不同范围的结果示例,但因时间限制未完善循环判断部分。
摘要由CSDN通过智能技术生成

时间有限,就做了这个,有不足之处,还望指点,谢谢!                 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值