首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编代码中的堆栈管理

汇编代码中的堆栈管理
EN

Stack Overflow用户
提问于 2016-01-13 10:07:38
回答 1查看 124关注 0票数 0

我是汇编语言的新手,我正在努力理解汇编语言代码。在我看来,除了一些操作,特别是堆栈指针寄存器(r1)上的操作之外,一切都很清楚。

以下是代码:

代码语言:javascript
复制
#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位寄存器.

我的问题是:为什么操作?

代码语言:javascript
复制
sub r1, #0x10
stq r4, [r1]

在开始的时候

代码语言:javascript
复制
ldq r4, [r1]
add r1,#0x10

最后还需要吗?我不明白它是干什么的。

另外,是否有任何理由将结果放在寄存器r2中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-13 12:13:21

正如Michael所说,您必须了解该体系结构的过程调用标准是什么。

sub从堆栈中分配空间,这是存储r4所需的,也可能用于省略的计算代码中的局部变量。想必r4也是在该代码块中被修改的,调用约定可以将其指定为被调用保存的寄存器,因此必须保留它的值。如果您不需要本地代码,也不需要修改r4,那么您很可能不需要这些指令。

类似地,调用约定指定用于传递和返回参数的寄存器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34763760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档