大家好,最近看到一个汇编程序,因为汇编知识有些薄弱,有点眼花缭乱了,希望大家能帮我解答下,源程序描述是MSP430 16×16=>32 multiply
程序为:
//16×16=>32 multiply
//long mul16(register int x, register int y)
public mul16
RSEG CODE
mul16
#define x1 r9
#define z0 r14
#define z1 r15
#define x r12
#define y r13
push r9
clr z0 int z = 0
mov z0,z1 short x1 = 0
mov z0,x1 z = x; tst x if(x < 0) x1 = -1;
jge xbooth_2 mov #-1,x1
jmp xbooth_2
xbooth_6
add x,z1 addc x1,z0
xbooth_1
rla x
rlc x1
xbooth_2
rra y
jc xbooth_5
jne xbooth_1
jmp xbooth_4
xbooth_5
sub x,z1
subc x1,z0
xbooth_3
rla x
rlc x1
rra y
jnc xbooth_6
cmp #0FFFFh,y
jne xbooth_3
xbooth_4
mov z1,r12
mov z0,r13
pop r9
ret
end
描述上看这是个16位乘16位的函数,不明白的是没找到返回值是多少,是否是R12,R13
主程序调用 sum = mul16(x,y);的话,sum的结果是不是为x*y呢?这样的话能否用c语言的 MPYS = x; OP2 = y;代替?
真心求助,请原谅我的无知
另外有没有在CCS上用汇编编程的完整例子,谢谢分享
灰小子:
不懂汇编。为什么不用C语言来实现呢?
msp430的硬件乘法器很实用,用起来也很简单
user151383853:
看最后, 应该是 Z0,Z1 吧
TI中文支持网



