使用此代码:
global _start
section .bss
v1 resw 1
v2 resb 2 ;array of 2 chars
section .text
_start:
mov word[v1],500
mov word[v2],500
mov rax,60
mov rdi,0
syscall
此代码正确吗?word[v1]
的工作方式与word[v2]
相同吗?
我在x86-64 Ubuntu上使用NASM。
是,它们都保留相同的内存量(2字节),因此您可以使用mov word[...], ...
安全地访问它们。
请注意,这大致相当于用C编写uint8_t v1[2]
与uint16_t v2[1]
。但是NASM并不强制执行类型,因此每个内存引用都类似于使用C memcpy()
进行严格的别名安全加载或存储传输N个字节而不必关心内存的C类型。
[如果您打算将分配的数据用作resw
或word
的数组,强烈建议实际使用word
,以避免造成混淆和潜在的错误。