Assembly 如何使用nasm在程序集中输出后暂停

Assembly 如何使用nasm在程序集中输出后暂停,assembly,x86,nasm,Assembly,X86,Nasm,我在学习汇编程序时遇到了一个问题,我从一本书中复制了som代码 在我为64位处理器和GoLink安装nasm之后 经过一些尝试后,a能够将其编译成一个exe文件,该文件应在comand promt中显示“Hello world” 该程序“工作”,但我看不到“hello world”,我想这是因为它从未停止过,或者是因为我读的这本书是针对linux的汇编,但如果我没有错的话,两者都使用x86 代码如下: section .data msg db "Hello, Worl

我在学习汇编程序时遇到了一个问题,我从一本书中复制了som代码 在我为64位处理器和GoLink安装nasm之后

经过一些尝试后,a能够将其编译成一个exe文件,该文件应在comand promt中显示“Hello world”

该程序“工作”,但我看不到“hello world”,我想这是因为它从未停止过,或者是因为我读的这本书是针对linux的汇编,但如果我没有错的话,两者都使用x86

代码如下:

section .data
    msg db      "Hello, World",0
section .bss
section .text
    global START
START:
        mov rax, 1
        mov rdi,1
        mov rsi, msg
        mov rdx, 12
        syscall
        mov rax, 60
        mov rdi ,0
syscall

我不想链接到c,我想编写原始程序集。

当我需要暂停程序时,我会在代码段末尾添加“暂停:jmp短暂停”。这是一个愚蠢的方法,但它可以工作。

是的,这段代码是针对Linux的;系统调用遵循Linux API。它基本上不会在Windows上工作。如果你想为Linux编写代码,你可以安装Linux;如果你想为Windows编写代码,你可以购买另一本书。它们都是x86,因此在两者上执行相同的指令;这是事实。但问题是,为了让操作系统执行特定的操作(如输出字符串),需要执行哪些指令,这在操作系统之间有很大的不同。这就像说“英语和法语都使用声波,所以我应该能够走进休斯顿的一家商店,说‘Je prendrai un café,s'il vous plaît’,然后喝杯咖啡。”你的问题标题似乎与你在问题中描述的内容无关。从已经打开的shell窗口运行此命令将在屏幕上保留输出(如果有)。或者将输出重定向到文件或管道到hextump。想要在输出后暂停通常是Windows的问题,因为人们经常将他们的东西配置为在一个窗口中运行程序,该窗口在程序退出后立即关闭。那太傻了;不要这样做。如果你要忙着等待而不是进行系统调用,至少在循环中放入一条指令以减少功耗。