首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Y86代码-不返回或显示rax

Y86代码-不返回或显示rax
EN

Stack Overflow用户
提问于 2016-10-09 22:31:29
回答 1查看 676关注 0票数 0

我正在做一个类项目,我要使用C代码,在x86-64程序集中将它提交,然后将它更改为Y86。在这种情况下,我应该将链接列表中元素的和返回为rax。但是,当我尝试使用y86编译器时,它不会出现。我做的y86看起来是这样的:

代码语言:javascript
复制
.pos 0
irmovq Stack,%rsp
irmovq Stack,%rbp
jmp Main

Main:
        irmovq ele1,%rax
        pushq %rax
        call sum_list
        halt

sum_list:
        pushq %rbp
        rrmovq %rsp,%rbp
        irmovq $24,%rdx
        subq %rdx,%rsp
        irmovq $0,%rdx
        rmmovq %rdx,-8(%rbp)
        jmp L2
L3:
        mrmovq 24(%rbp),%rax
        mrmovq (%rax),%rax
        mrmovq -8(%rbp),%rdx
        addq %rax,%rdx
        rmmovq %rdx,-8(%rbp)
        mrmovq 24(%rbp),%rax
        mrmovq -8(%rax),%rax
        rmmovq %rax,24(%rbp)
L2:
        irmovq $0,%rcx
        mrmovq 24(%rbp),%rdx
        subq %rcx,%rdx
        jne L3
        mrmovq -8(%rbp),%rax
        rrmovq %rbp,%rsp
        popq %rbp
        ret

#linked-list
.align 8
ele1:
        .quad 0x00d
        .quad ele2
ele2:
        .quad 0x0e0
        .quad ele3
ele3:
        .quad 0xf00
        .quad 0

.pos 0x500
Stack:

所以rax应该是0,但在我的结果中,什么也没有出现。

这是我从以下代码获得的C代码:

代码语言:javascript
复制
typedef struct ELE{
  long val;
  struct ELE *next;
} *list_ptr

long sum_list(list_ptr ls){
  long val = 0;
  while(ls){
    val += ls->val;
    ls = ls->next;
  }
  return val;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-10 00:08:45

看一下代码,指向节点的指针应该是16(rbp),而不是24(rbp)。0( rbp ) =保存的rbp值,8(rbp) =返回地址,16(rbp) =指向节点的指针(指向链接列表)。我看不出在保存rbp之前,额外的8个字节被推到堆栈上的位置。

程序以停止指令结束。当发生这种情况时(例如使用调试器),您能够确定rax的内容吗?

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

https://stackoverflow.com/questions/39949200

复制
相关文章

相似问题

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