linux 您能解释一下这个x86-64汇编程序吗[已关闭]

kmbjn2e3  于 2022-11-28  发布在  Linux
关注(0)|答案(2)|浏览(125)
    • 已关闭**。此问题需要更多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
tpxzln5u

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 initializing
  • pushq %rbp : push rbp register onto the stack
  • movq %rsp, %rbp : RBP = RSP
  • movq $greet, %rdi : RDI = address of greet label
  • call puts : api to print string, which looks for a pointer in RDI
  • movq $0, %rax : nop rax(clear data)
  • leave : exit label
  • ret : termination
qmelpv7a

qmelpv7a2#

我不会在Assembly中编程但我会尝试:

  • .data:声明新的RAM地址。.data表示.section .data,它将切换到.data节。(感谢Peter Cordes指出这一点!)
  • .globl greet:将变量greet设置为全局可见。
  • greet:声明问候语。
  • .string "Hello World"将其设置为Hello World。
  • 其余代码将打印出来。

相关问题