3.4.2字符串
一个字符串最多包含八个字符 单引号(' ...'),双引号(" ...")或反引号 (`... `)。单引号或双引号相当于NASM(除了 当然,用单引号围绕常量允许加倍 报价出现在其中,反之亦然);那些内容是 逐字表示。封闭在反引号中的字符串支持C风格 \ -escapes表示特殊字符。
我不明白为什么他们说一个字符串最多由八个字符组成,这是否意味着如果一个字符串由9个字符组成,它不会被称为字符串?!
答案 0 :(得分:5)
一切都源于此
sub al, '0'
能够立即使用字符来极大地提高代码的可读性。
由此,连续的步骤立即 1 :
sub al, '0'
sub ax, '00'
sub eax, '0000'
sub rax, '00000000'
NASM在界定字符中并不是很挑剔,因为文档澄清了(我使用字符串的单引号和字符串的双引号但它只是我的个人品味)。
请注意,字符串会生成一个数字立即数,其中最左边的字符放在最不重要的字节中
mov rbx, '01234567'
对应mov rbx,0x3736353433323130
,其基本原理是当该值存储在内存中时,会获得键入的确切字符串。
另外,请注意,它是指示字符串和字符串分开的上下文:
字符常量由最多八个字节长的字符串组成,用于表达式上下文。它被视为整数。
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 没有双关语