NASM在线运行

版本:
运行结果
教程手册
代码仓库
极速运行
交互输入
极速运行模式,不支持键盘输入语句但是拥有更高的运行速度,输出简洁明了 。 点击编辑器上方的运行按钮即刻体验吧。
以下是用户最新保存的代码
计算字符串长度 发布于:2021-05-04 08:50 Hello, world! 发布于:2021-05-04 08:41 [更多]
显示目录

零终止字节



为什么第二个消息打印了两次而我们只在msg2上调用了sprint函数一次?实际上它只打印了一次。你可以看到我的意思,如果你评论我们的第二次呼吁冲刺。输出将是我们的两个消息字符串。

但这怎么可能呢?

我们没有正确终止字符串。在汇编中,变量一个接一个地存储在内存中,因此msg1变量的最后一个字节就紧挨着msg2变量的第一个字节。我们知道我们的字符串长度计算是寻找一个零字节,所以除非我们的msg2变量以一个零字节开始,它继续计数,就像它是相同的字符串(就程序集而言,它是相同的字符串)。因此,我们需要在字符串后放一个0字节或0h,让程序集知道在哪里停止计数。

注意:在编程中,0h表示空字节,而字符串后的空字节则告诉程序集它在内存中的结束位置。

helloworld-inc.asm

; Hello World Program (NULL terminating bytes)
; Compile with: nasm -f elf helloworld-inc.asm
; Link with (64 bit systems require elf_i386 option): ld -m elf_i386 helloworld-inc.o -o helloworld-inc
; Run with: ./helloworld-inc

%include        'functions.asm'

SECTION .data
msg1    db      'Hello, brave new world!', 0Ah, 0h          ; NOTE the null terminating byte
msg2    db      'This is how we recycle in NASM.', 0Ah, 0h  ; NOTE the null terminating byte

SECTION .text
global  _start

_start:

    mov     eax, msg1
    call    sprint

    mov     eax, msg2
    call    sprint

    call    quit
~$ nasm -f elf helloworld-inc.asm
~$ ld -m elf_i386 helloworld-inc.o -o helloworld-inc
~$ ./helloworld-inc
Hello, brave new world!
This is how we recycle in NASM.
由JSRUN为你提供的NASM在线运行、在线编译工具
        JSRUN提供的NASM在线运行,NASM 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。

title

使用此草稿 删除草稿

皮肤:

运行模式:

嵌入代码 iframe嵌入: