为什么他们说一个字符串在 NASM 中最多包含八个字符?



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没有双关语

最新更新