汇编语言--64位乘法运算

汇编语言–64位乘法运算



前言

本文解决的问题:两个32位数据相乘,得到64位数据的过程。

一、采用的方法

代码原理:两个32位数据相乘,可以采用类似普通的乘法运算,先低16位和低16位相乘,和两个低16位和高16位相乘,在高16位和高16位相乘,原理可以看下图。这里 “+” 不是直接相加的意思,而是一个32位数据的意思,要注意各位相加的产生进位的问题,要注意程序运行过程中CF的变化。
提示:主要的问题就在这里
在这里插入图片描述

二、算法代码

1.算法代码

DATA SEGMENT
A1 DW 0D678H,0D678H;乘数
B1 DW 0D678H,0D678H;乘数
C1 DW 4 DUP (?) ;预留积 
C2 DW 2 DUP (?)
DATA ENDS
STACK1 SEGMENT STACK
 DB 100 DUP(0)
STACK1 ENDS
CODE SEGMENT
 ASSUME CS:CODE,DS:DATA,SS:STACK1
START PROC FAR
PUSH DS   ;压栈
MOV AX, 0 ;标准序
PUSH AX    ;压栈AX 
MOV AX, DATA  ;DATA的地址赋给AX 
MOV DS, AX    ;  DS的值改为DATA  
MOV AX, A1;
MUL B1 ;两个低16位相乘
MOV C1, AX
MOV C1+2, DX  ;结果储存在C1,32位
MOV AX, A1+2
MUL B1       ;A1高16*B1的低16位
MOV C2, AX
MOV C2+2, DX    ;结果存储在C2,32位
MOV AX, B1+2
MUL A1         ;B1的高16*A1的低16位
ADD AX,C2      ;低位相加
ADC DX,C2+2     ;高位相加
PUSHF           ;保留相加的进位结果  
ADD C1+2,AX     ;结果保留带C1
ADC C1+4,DX
MOV AX, A1+2  
MUL B1+2          ;A1,B1的高16位相乘
POPF                    ;出栈FR
ADC C1+60             ;进位相加,清理进位
ADD C1+4,AX
ADC C1+6,DX
RET
START ENDP
CODE ENDS
END START

2.代码结果

采用emu8086平台

总结

这个问题考察ADD,ADC,MUL等操作。同时理解汇编代码也有助于学习51单片机,希望大家一起进步啊。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值