永发信息网

各位高手,我想求教汇编中MUL指令的用法,我的单片机寄存器是8位的,现在有两个16位的数相乘,

答案:2  悬赏:0  手机版
解决时间 2021-12-23 20:29
  • 提问者网友:欺烟
  • 2021-12-23 10:23
各位高手,我想求教汇编中MUL指令的用法,我的单片机寄存器是8位的,现在有两个16位的数相乘,
最佳答案
  • 五星知识达人网友:过活
  • 2021-12-23 11:46
MUL 指令只有一种用法即:
MUL AB 即累加器A与寄存器B相乘,结果保留到A和B中
如果是两个16位相乘,那么需要编制一个小函数来实现了。
双字节无符号数乘法程序 (R3R4*R6R7)=(R5R2R3R4)
;入口: R3,R4,R6,R7
;占用资源: ACC,B
;堆栈需求: 2字节
;出口: R5,R2,R3,R4
NMUL22 : MOV A,R4
MOV B,R7
MUL AB
XCH A,R4
MOV R5,B
MOV B,R6
MUL AB
ADD A,R5
MOV R5,A
CLR A
ADDC A,B
MOV R2,A
MOV A,R3
MOV B,R7
MUL AB
ADD A,R5
MOV R5,A
MOV A,B
ADDC A,R2
MOV R2,A
CLR A
ADDC A,#00H
XCH A,R3
MOV B,R6
MUL AB
ADD A,R2
MOV R2,A
MOV A,B
ADDC A,R3
XCH A,R5
MOV R3,A
CLR OV
RET
全部回答
  • 1楼网友:走死在岁月里
  • 2021-12-23 12:00
mul指令是乘法指令。使用mul做乘法的时候: 1) 两个相乘的数:两个相乘的数,要么都是8位,要么都是16位。如果是8位,一个默认放在al中,另外一个存放在8为寄存器或字节内存单元中;如果是16位,一个默认在ax中,另外一个放在16为寄存器或内存寄存器字单元中。 2) 结果:如果是8位乘法,结果默认放在ax中;如果是16位乘法,结果高位默认在dx中存放,低位在ax中存放。 格式: mul reg mul 内存单元 内存单元可以用不同的寻址方式给出,比如: mul byte ptr ds:[0] 含义:(ax) =(al)*((ds)*16+0); mul word ptr [bx+si+8] 含义:(ax) =(ax)*((ds)*16+(si)+8)结果的低16位;(dx) =(ax)*((ds)*16+(si)+8)的结果的高16位。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯