Assembly NASM程序集打印错误
我试图构建一个非常小的编译器Assembly NASM程序集打印错误,assembly,x86,nasm,Assembly,X86,Nasm,我试图构建一个非常小的编译器 打印“Hello world” SECTION .data DAT0: db "Hello world" SECTION .text global _main extern _printf _main: push DAT0 call _printf add esp, 4 ret 0 正确组装和链接后,将打印Hello world。 现在,当我有两个打印语句时 print "Hello world" print "Hey!" 它产生: SECTION
打印“Hello world”
SECTION .data
DAT0:
db "Hello world"
SECTION .text
global _main
extern _printf
_main:
push DAT0
call _printf
add esp, 4
ret 0
正确组装和链接后,将打印Hello world。
现在,当我有两个打印语句时
print "Hello world"
print "Hey!"
它产生:
SECTION .data
DAT0:
db "Hello world"
DAT1:
db "Hey!"
SECTION .text
global _main
extern _printf
_main:
push DAT0
call _printf
add esp, 4
push DAT1
call _printf
add esp, 4
ret 0
这张照片显示了你好,世界嘿!嘿强>
我的问题是为什么文本嘿正在打印两次。我到底在做什么
错了吗?如果有必要,我使用NASM和MinGW(在Windows上)编译了这段代码。您需要将字符串设为ASCIIZ,即:在字符串后面附加一个值为0的字节。
printf()
函数使用C样式的字符串
所以DAT0所指的字符串实际上是helloworldhey代码>可能在“嘿!”之后有一些零字节来分隔可执行文件中的各个部分
SECTION .data
DAT0:
db "Hello world",0
DAT1:
db "Hey!",0