- 已关闭**。此问题需要更多focused。当前不接受答案。
- 想要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。
去年关闭了。
此帖子已在2天前编辑并提交审核,无法重新打开帖子:
原始关闭原因未解决
Improve this question
我目前正在学习一些x86汇编,我想如果有人可以解释这个程序是做什么的。我知道这是一个"Hello World"程序,但我不明白它是如何做的,或任何代码的意思。
.data
.globl greet
greet:
.string "Hello world."
.text
.global main
main:
pushq %rbp
movq %rsp, %rbp
movq $greet, %rdi
call puts
movq $0, %rax
leave
ret
2条答案
按热度按时间tpxzln5u1#
.data
this the place were you put headers and defines to use in main:.global greet
.global means the label will be the visible to the linker because in main we will use it.greet:
the label initializingpushq %rbp
: push rbp register onto the stackmovq %rsp, %rbp
: RBP = RSPmovq $greet, %rdi
: RDI = address ofgreet
labelcall puts
: api to print string, which looks for a pointer in RDImovq $0, %rax
: nop rax(clear data)leave
: exit labelret
: terminationqmelpv7a2#
我不会在Assembly中编程但我会尝试:
.data
:声明新的RAM地址。.data表示.section .data,它将切换到.data节。(感谢Peter Cordes指出这一点!).globl greet
:将变量greet
设置为全局可见。greet
:声明问候语。.string "Hello World"
将其设置为Hello World。