这段汇编语言翻译对了吗

46次阅读

共计 862 个字符,预计需要花费 3 分钟才能阅读完成。

g:
    pushl %ebp
    movl %esp,%ebp
    movl 8(%ebp),%eax
    addl $8,%eax
    popl %ebp
    ret
main:
    pushl %ebp
    movl %esp,%ebp
    pushl $8
    call g
    subl $8,%eax
    movl %ebp,%esp
    ret

我翻译成
int g(int x) {return x+8;}
int main(void) {return g(8)+8; }

不知道翻译对了没

网友回复:

注册 这段汇编语言是一个简单的函数调用示例,包含两个函数 g 和 main。下面是每个函数的功能和代码含义:函数 g:保存当前函数的栈帧指针 %ebp 到栈中,使其成为前一个栈帧的基址 将当前栈指针 %esp 复制到 %ebp,成为当前栈帧的基址 从 %ebp 指向的地址加上 8 的偏移,将结果保存到 %eax 中 将栈中保存的前一个栈帧的基址弹出到 %ebp,恢复前一个栈帧的状态 通过 ret 指令返回函数调用,返回地址存储在栈中的 %eip 中 函数 main:保存当前函数的栈帧指针 %ebp 到栈中,使其成为前一个栈帧的基址 将当前栈指针 %esp 复制到 %ebp,成为当前栈帧的基址 将常数值 8 压入栈中 调用函数 g,g 函数返回后将返回值保存到 %eax 中 将 %eax 中的返回值减去 8,保存结果到 %eax 中 恢复当前函数栈指针 %esp 为之前保存的 %ebp 通过 ret 指令返回函数调用,返回地址存储在栈中的 %eip 中 总体来说,这段代码的作用是在函数 main 中调用函数 g,将 8 传递给 g 函数并获得返回值,最终将返回值减去 8 并返回。

rkidc sub 那个是减去 8 吧

daizuan 感谢汇编大佬解析

acpp 所以是 在 g 中加 8 又在 main 中减 8 对吧

rkidc int g(int a) {int b = a + 8;     return b;} int main() {     int c = g(8) – 8;     return 0; }

rkidc 现在都要来 LOC 写作业了啊,以后上课不要玩手机了

dsusu 感谢

HOH 以后 loc 冷不丁地冒出一个图灵奖

rkidc 全球汇编论坛

注册 喜欢上课摸 jj

正文完
 0