汇编语言,双精度加法运算

要求计算X+Y=Z,将结果Z输出到屏幕上,其中X=001565A0H,Y=0021B79EH。实验利用累加器AX,先求低十六位和,并存入地址存储单元,后求高16位和,再存入高址存储单元。由于地位可能向高位有进位,因而高位相加语句需用ADC指令,则地位相加有进位时,CF=1,高位字相加时,同时加上CF中的1。在80386以上微机中可以直接使用32位寄存器和32位加法指令完成。
;二进制双精度加法运算

STACK1  SEGMENT STACK
         DW 256 DUP(?)
STACK1  ENDS

DATA SEGMENT
MES1	DB	'The result is:$'
XL      DW  65A0H
XH	DW  0015H
YL	DW  0B79EH
YH	DW  0021H
DATA	ENDS

CODE SEGMENT
       ASSUME CS:CODE,DS:DATA
START: MOV  AX,DATA
       MOV  DS,AX

       MOV  DX,OFFSET MES1  ;将MES1偏移地址给DX
       MOV  AH,09H	    ;将MES1中的内容输出到屏幕
       INT  21H
       MOV  AX,XL
       ADD  AX,YL
       MOV  BX,AX
       MOV  AX,XH
       ADC  AX,YH
       PUSH BX           ;入栈保存BX
       CALL SHWORD	        ;先去执行SHWORD
       POP  BX              ;返回继续执行BX出栈处理
       MOV  AX,BX           ;此时AX中是低16位之和
       CALL SHWORD          ;再次调用SHWORD

       MOV  AX,4C00H
       INT  21H

SHWORD	PROC	NEAR
	   MOV	BL,AH           ;保持高16位的高8位
	   CALL	SHOW            ;显示结果
	   MOV	BL,AL           ;保持高16位的低8位
	   CALL	SHOW            ;显示结果
	   RET	
	   ENDP
		
SHOW	PROC	NEAR
	   PUSH	AX              ;保持AX
	   PUSH	DX              ;保存DX
	   MOV	AL,BL
	   AND	AL,0F0H			;AL与0F0H相与取高4位
	   SHR	AL,4
	   CMP	AL,0AH			;是否是A以上的数
	   JB	C2		
	   ADD	AL,07H                  ;A以上的数加07H折显示的是字母	
C2:	   ADD	AL,30H		
	   MOV	DL,AL			;show character 
	   MOV	AH,02H
	   INT	21H
	   MOV	AL,BL
	   AND	AL,0FH			;AL与0FH相与取低4位
	   CMP	AL,0AH
	   JB	C3
	   ADD 	AL,07H
C3:	   ADD	AL,30H
	   MOV	DL,AL			;show character 
	   MOV	AH,02H
	   INT	21H
	   POP	DX
	   POP	AX
	   RET
	   ENDP	
CODE ENDS
       END START
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值