我是汇编语言的新手,我正在努力理解汇编语言代码。在我看来,除了一些操作,特别是堆栈指针寄存器(r1)上的操作之外,一切都很清楚。
以下是代码:
#define A r2
#define B r3
#define R r6
.section .text, "ax"
.global u32mul16
u32mul16:
; R = AxB :
; A <= input r2 (16bits expected)
; B <= input r3 (16bits expected)
; R <= output r6 (32bits)
; stack update and save
sub r1, #0x10
stq r4, [r1]
; multiplication computation
...
; after computation
; prepare the 'return' value
mov r2, R
ldq r4, [r1]
add r1, #0x10
jmp [r15]并不是所有寄存器(r0,.,r15)都是32位寄存器.
我的问题是:为什么操作?
sub r1, #0x10
stq r4, [r1]在开始的时候
ldq r4, [r1]
add r1,#0x10最后还需要吗?我不明白它是干什么的。
另外,是否有任何理由将结果放在寄存器r2中?
发布于 2016-01-13 12:13:21
正如Michael所说,您必须了解该体系结构的过程调用标准是什么。
sub从堆栈中分配空间,这是存储r4所需的,也可能用于省略的计算代码中的局部变量。想必r4也是在该代码块中被修改的,调用约定可以将其指定为被调用保存的寄存器,因此必须保留它的值。如果您不需要本地代码,也不需要修改r4,那么您很可能不需要这些指令。
类似地,调用约定指定用于传递和返回参数的寄存器。
https://stackoverflow.com/questions/34763760
复制相似问题