汇编语言 实现两个十进制数加法、乘法

代码如下:
;========================================================
; 文件名: comprehensive1.asm
; 功能描述: 完成2个十进制数字的加法和乘法, 使用打印字符串功能提供文字列表提示, 		;进行加法和乘法的选择,两个一位十进制数可以从键盘中读取,计算结果可以通过屏幕打印输出,
; 执行一次运算后,重新在屏幕上显示功能菜单,以便重新选择开始一次新的运算      
;========================================================
; 实验目的: 本实验目的在于加深对输入输出、循环、进制之间转换、运算的理解和掌握
;========================================================

DATA	SEGMENT
 MSG2 DB '1--plus',0DH,0AH,'$'
 MSG3 DB '2--multiply',0DH,0AH,'$'
 MSG4 DB 'please input 2 numbers,depart by space',0DH,0AH,'$'
 num1 DB 0
 num2 DB 0
 result DB 0,0
 
DATA	ENDS 					
			

SSTACK	SEGMENT STACK
		DW 64 DUP(?)
SSTACK	ENDS

CODE	SEGMENT
		ASSUME CS:CODE,DS:DATA

start:	MOV AX,DATA
		MOV DS,AX
			
		MOV AH,09H
		LEA DX,MSG2
		INT 21H
		
		MOV AH,09H
		LEA DX,MSG3
		INT 21H
		
CHOICE:  MOV AH,01H
		INT 21H
		SUB AL,'0'
		
		CMP AL,1
		JE plus
		CMP AL,2
		JE multiply
        JMP CHOICE
		
		
plus: 	MOV AH,9
		LEA DX,MSG4
		INT 21h
		
		MOV AH,1
		INT 21h
		SUB AL,'0'
		MOV num1,AL
		
		MOV AH,1;吃空格
		INT 21h 
		
		MOV AH,1
		INT 21h
		SUB AL,'0'
		MOV num2,AL
		
		MOV DL,0DH
		MOV AH,2
		INT 21h  
		MOV DL,0AH
		MOV AH,2
		INT 21h
		
		MOV AL,num1
		ADD AL,num2
   
		MOV result,AL
		
		MOV CL,10  
		XOR AH,AH
	    DIV CL;商(高位)送AL,余数(低位)送AH
	    MOV result,AH
		
		
		
		MOV BL,AL;高位
		AND BL,0Fh  
		MOV DL,BL  		
		
		CMP DL,0AH
		JBE A2
		ADD DL,07H
	A2:	ADD DL,'0'
		MOV AH,2
		INT 21h
		
		MOV BL,result;低位
		AND BL,0Fh		
		MOV DL,BL

		
		CMP DL,0AH
		JBE A1
		ADD DL,07H
	A1:	ADD DL,'0'
		MOV AH,2
		INT 21h
		
		MOV DL,0DH
		MOV AH,2
		INT 21h  
		MOV DL,0AH
		MOV AH,2
		INT 21h
		
		JMP start
		
multiply:MOV AH,9
	    LEA DX,msg4
	    INT 21h
	 
	    MOV AH,1
	    INT 21h
	    SUB AL,'0'
	    MOV num1,AL;
	 	AND num1,0Fh;取低位
	 
	 
	    MOV AH,1;吃空格
	    INT 21h 
		
	    MOV AH,1
	    INT 21h
	    SUB AL,'0'
	    MOV num2,AL
	    AND num2,0Fh;取低位
	 
        MOV DL,0DH
		MOV AH,2
		INT 21h  
		MOV DL,0AH
		MOV AH,2
		INT 21h
		
	    MOV AL,num1
	    MUL num2

	    MOV result,AL  
	    		
		;出现了一个新的问题,结果al和result仍然是16进制储存的 
		;对result比如18即12H,除以10H即16,结果为1,将1打印出来,再18对16即10H			;取余,得2打印出来          
	     
	    MOV CL,10
	    DIV CL;商(高位)送al,余数(低位)送AH
	    MOV result,AH	    
	    
        MOV BL,AL  

		AND BL,0Fh   		
		MOV DL,BL
		
		CMP DL,0AH
		JBE A4
		ADD DL,07H
	A4:	ADD DL,'0'
		MOV AH,2
		INT 21h
		
		;注意一个问题,上面语句有mov ah,2改变了ah的值,需要先保存除法运算的结果ah
		MOV BL,result

		AND BL,0Fh		
		MOV DL,BL
		
		CMP DL,0AH
		JBE A3
		ADD DL,07H
	A3:	ADD DL,'0'
		MOV AH,2
		INT 21h
	  	 	  
		MOV DL,0DH
		MOV AH,2
		INT 21h
		MOV DL,0AH
		MOV AH,2
		INT 21h
		
		JMP start
	  
CODE	ENDS
		END START			

1.1 实验要求分析
基本功能:完成2个一位十进制数字的加法和乘法
使用打印字符串功能提供文字列表提示,进行加法和乘法的计算功能选择
两个一位十进制数字通过键盘输入获取
计算结果通过屏幕打印输出
执行完一次运算后,重新在屏幕显示功能菜单,以便重新选择开始一次新的运算。

 

核心算法:通过功能号为09H的INT 21H指令将功能菜单打印输出。利用功能号为01H的INT 21H指令,从键盘获取两个十进制数,由于获取的十进制是ASCII形式存储的,因此减去30H即‘0’的ASCII值转换为十进制,再对所得十进制数进行加法或乘法运算,所得的结果需要分为高位和低位打印依次打印输出,因此需要分离高位和低位,通过除法指令DIV即除以10分别得到高位和低位,由于得到是十进制数,需要分别加上30H再转化为ASCII码才能打印输出显示在屏幕上,利用功能号为02H的INT 21H 指令回显结果。最后使用无条件跳转指令JMP跳转返回到程序start开始运行处,进行下一次功能菜单打印输出和选择加法或乘法运算。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值