⑴ 双字节乘法程序其实现方法有哪些
方法:双字节是16bit,双字节乘法的积是32bit。而32bit就是四字节了。
入口条件:被乘数在R2、R3中,乘数在R6、R7中。
出口信息:乘积在R2、R3、R4、R5中。
影响资源:PSW、A、B、R2~R7堆栈需求:2字节。
MULD:MOVA,R3;计算R3乘R7。
根据MSDN中解释:
1个二进制位称为1个bit(位),8个二进制位称为1个Byte(字节),8bit=1Byte。双字节就是1个Word(1个字,16位),DWORD(DoubleWord)就是双字的意思,两个字四个字节(32位)。
⑵ 单片机汇编程序双字节无符号乘法程序的解释,不明白总是在移位,不清楚
你随便写出两个16位二进制数,再用人工计算乘法,你就会知道为什么移位了。
⑶ 双字节乘法
双字节是16bit,双字节乘法的积是32bit。而32bit就是四字节了。
⑷ 求解释下51单片机指令(无符号双字节乘法)
F0是个位存储
把中间的过程值:C,进位标志存进去
到后面再取出来,一起加。
⑸ 51单片机实验:无符号双字节乘法运算子程序
以前搞的子程序库里的
(5) 标号: MULD 功能:双字节二进制无符号数乘法
入口条件:被乘数在R2、R3中,乘数在R6、R7中。
出口信息:乘积在R2、R3、R4、R5中。
影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
MULD: MOV A,R3 ;计算R3乘R7
MOV B,R7
MUL AB
MOV R4,B ;暂存部分积
MOV R5,A
MOV A,R3 ;计算R3乘R6
MOV B,R6
MUL AB
ADD A,R4 ;累加部分积
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2 ;计算R2乘R7
MOV B,R7
MUL AB
ADD A,R4 ;累加部分积
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2 ;计算R2乘R6
MOV B,R6
MUL AB
ADD A,R3 ;累加部分积
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET
⑹ 单片机双字节相乘
网上有这样的程序,直接复制过来,稍微改下就能用的。
/*---------------------------------------------------
义隆单片机
双字节的乘法
功能: (R22:R23)*(R24:R25)-->(R20:R21:R22:R23)
入口:
被乘数 :R22:R23 (R22高位)
乘数 :R24:R25 (R24高位)
出口:
积 :R20:R21:R22:R23(R20为高位)
局部变量 :
count
---------------------------------------------------*/
mul_sub:
clr r20 ; 清空寄存器和进位位
clr r21
mov a,@16 ; 循环16次
mov count,a
bc psw,c
rrc r22
rrc r23
mul_r1:
jbs psw,c ; 判断移出的一位为0还是1
jmp mul_r2 ; 0的话不做运算
mov a,r25 ; 1的话做运算 R20:R21 + R24R25 --> CR:R20:R21
add r21,a ; 低位相加
jbs psw,c
jmp mul_r0
mov a,@1 ; 如果低位进位则高位加1
add r20,a
jbs psw,c ; 判断高位加1后是否已经移出
jmp mul_r0
mov a,r24 ; 做高位运算
add r20,a
bs psw,c ; 需要手工补偿进位位
jmp mul_r2
mul_r0:
mov a,r24 ; 不需要补偿直接加高位的情况
add r20,a
mul_r2:
rrc r20
rrc r21
rrc r22
rrc r23
djz count
jmp mul_r1
ret
⑺ 单片机乘法指令
乘法指令当结果大于0FFH时,A就装不下了,所以“溢出”了,大于部分装入到B里面。