我正在学习汇编我看到两个定义字符串的例子:
msg db'你好,世界!',0xa
消息DB'我喜欢它!',0
如果以上示例是两种定义汇编字符串的方法,那么程序如何区分它们呢?
在此先感谢任何帮助:)
joh*_*und 10
不同的汇编程序具有不同的语法,但在db指令的情况下,它们非常一致.
db是一个汇编指令,它在指令所在的位置定义具有给定值的字节.可选地,可以将一些标签分配给指令.
常用语法是:
[label] db n1, n2, n3, ..., nk
Run Code Online (Sandbox Code Playgroud)
其中n1..nk是一些字节大小的数字(从0..0xff)或一些字符串常量.
只要ASCII字符串由字节组成,指令就会将这些字节简单地放在内存中,与指令中的其他数字完全相同.
例:
db 1, 2, 3, 4
Run Code Online (Sandbox Code Playgroud)
将分配4个字节,并用数字1,2,3和4填充它们
string db 'Assembly', 0, 1, 2, 3
Run Code Online (Sandbox Code Playgroud)
将编译为:
string: 41h, 73h, 73h, 65h, 6Dh, 62h, 6Ch, 79h, 00h, 01h, 02h, 03h
Run Code Online (Sandbox Code Playgroud)
ASCII代码为0Ah(0xa)的字符是在Linux中用作控制台的新行命令的字符LF(换行符).
ASCII码00h(0)的字符是NULL字符,用作C语言中的字符串结尾标记.(可能在OS API调用中,因为大多数操作系统都是用C语言编写的)
附录1:有几个类似于DB的其他汇编指令,它们在内存中定义了一些数据,但是具有其他大小.最常见的是DW(定义字),DD(定义双字)和DQ(定义四字),用于16位,32位和64位数据.但是,它们的语法只接受数字,而不接受字符串.