NASM手册说:
3.4.2 字符串
一个字符串最多包含 8 个字符,括在 单引号 ('...'(、双引号 ("..."(或反引号 (`... `).单引号或双引号等同于 NASM(除了 用单引号包围常量的课程允许双引号 引号出现在其中,反之亦然(;这些内容是 逐字表示。括在反引号中的字符串支持 C 样式 \–特殊字符的转义。
我不明白为什么他们说字符串最多由八个字符组成,这是否意味着如果字符串由 9 个字符组成,它就不称为字符串?!
这一切都源于此
sub al, '0'
能够立即使用字符,极大地提高代码的可读性。
从那以后,连续的步骤是立即的 1:
sub al, '0'
sub ax, '00'
sub eax, '0000'
sub rax, '00000000'
正如文档所澄清的那样,NASM 在分隔字符方面并不挑剔(我对字符使用单引号,对字符串使用双引号,但这只是我个人的口味(。
请注意,字符串会立即生成一个数字,其中最左侧的字符放在最低有效字节中。mov rbx, '01234567'
对应于mov rbx,0x3736353433323130
,其基本原理是当该值存储在内存中时,人们会得到确切的字符串类型。
另外,请注意,它是区分字符串和字符串的上下文:
字符常量由最长为 8 个字节的字符串组成,用于表达式上下文。它被视为整数。
MY_SYMBOL EQU 'abcd' ;Character string
MY_VAR dw 'abcd' ;String
mov eax, MY_SYMBOL ;mov eax, 64636261h
mov eax, MY_VAR ;mov eax, address_of(MY_VAR)
mov eax, 'cdef'*2 ;Character string
因为它们在语法上重叠。
1没有双关语