零终止字节
编辑教程为什么第二个消息打印了两次而我们只在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.
Mos固件,小电视必刷固件
ES6 教程
Vue.js 教程
JSON 教程
jQuery 教程
HTML 教程
HTML 5 教程
CSS 教程
CSS3 教程
JavaScript 教程
DHTML 教程
JSON在线格式化工具
JS在线运行
JSON解析格式化
jsfiddle中国国内版本
JS代码在线运行
PHP代码在线运行
Java代码在线运行
C语言代码在线运行
C++代码在线运行
Python代码在线运行
Go语言代码在线运行
C#代码在线运行
JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。
大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
选择支付方式:
立即支付
¥
9.99
无法付款,请点击这里
金额: 0 元
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟