gpt4 book ai didi

c - 汇编语言 - C 语言和助记符

转载 作者:太空宇宙 更新时间:2023-11-04 00:51:01 24 4
gpt4 key购买 nike

我用c语言写了一个简单的程序,经典的helloworld。我想知道当编译器将它翻译成汇编代码时它看起来像什么。

我使用 MinGW 和命令:

gcc -S hellow.c

当我打开这个文件时,我预计它至少会有点类似于直接用汇编编写的 hello-world 程序,即:

jmp 115
db 'Hello world!$' (db = define bytes)
-a 115
mov ah, 09 (09 for displaying strings ... ah = 'command register')
mov dx, 102 (adress of the string)
int 21
int 20

它看起来像这样:

   .file    "hellow.c"

.def ___main;
.scl 2;
.type 32;
.endef
.section
.rdata,"dr"
LC0:

.ascii "Hello world!\0"

.text
.globl _main

.def _main;
.scl 2;
.type 32;
.endef
_main:
LFB6:

.cfi_startproc
pushl %ebp

.cfi_def_cfa_offset 8

.cfi_offset 5, -8
movl %esp, %ebp

.cfi_def_cfa_register 5
andl $-16, %esp
subl $16, %esp
call ___main
movl $LC0, (%esp)
call _puts
movl $0, %eax
leave

.cfi_restore 5

.cfi_def_cfa 4, 4
ret

.cfi_endproc
LFE6:

.def _puts;
.scl 2;
.type 32;
.endef

我对汇编语言知之甚少,但我确实认识所谓的助记符,如 ADD、POP、PUSH、MOV、JMP、INT 等。在 C 编译器生成的代码中看不到这些。

我误解了什么?

最佳答案

这准备调用函数 __main 的参数,该函数可能完成 C 程序所需的所有初始设置

andl    $-16, %esp
subl $16, %esp
call ___main

这会准备参数并调用函数 _putsLC0 是包含要打印的字符串的符号。

movl    $LC0, (%esp)
call _puts

这准备了main的返回值并返回

movl    $0, %eax
leave
ret

关于c - 汇编语言 - C 语言和助记符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18765776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com