【发布时间】:2016-08-11 00:16:21
【问题描述】:
我有以下代码打印传递给./main 的参数数量。请注意rodata 部分中的fmt。我已经包含了新行 \n,就像在 C 中一样,但不是打印新行,而是打印:
参数个数:1 \n
我的代码是:
;main.asm
GLOBAL main
EXTERN printf
section .rodata:
fmt db "Number of parameters: %d \n", 0
section .text:
main:
push ebp
mov ebp, esp ;stackframe
push dword[ebp+8] ;prepara los parametros para printf
push fmt
call printf
add esp, 2*4
mov eax, 0 ;return value
leave ;desarmado del stack frame
ret
我知道在 fmt 中的 0 之前和“数字...”之后包含 10 会打印它,但我希望 printf 这样做。我用 NASM 组装代码,然后通过 GCC 链接它来创建我的可执行文件。
【问题讨论】:
-
你不会像那样“编译”汇编器代码,而是使用 assembler。而且您不会“编译”生成的目标文件,而是 link 它。无论如何,这与 gcc 无关,也绝对与 C 语言无关。不要添加不相关的标签。
标签: linux assembly x86 printf nasm