【发布时间】:2016-01-13 10:07:38
【问题描述】:
我是汇编语言的菜鸟,我正在尝试理解汇编代码。除了一些操作,特别是堆栈指针寄存器 (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?
【问题讨论】:
-
这是什么架构?波标量?您必须找出该架构的过程调用标准是什么。
-
它是哈佛架构,具有类似 RISC 的加载/存储指令