resb 2等于resw 1吗?

问题描述 投票:2回答:1

使用此代码:

    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。

assembly x86-64 nasm
1个回答
1
投票

是,它们都保留相同的内存量(2字节),因此您可以使用mov word[...], ...安全地访问它们。

请注意,这大致相当于用C编写uint8_t v1[2]uint16_t v2[1]。但是NASM并不强制执行类型,因此每个内存引用都类似于使用C memcpy()进行严格的别名安全加载或存储传输N个字节而不必关心内存的C类型。

[如果您打算将分配的数据用作reswword的数组,强烈建议实际使用word,以避免造成混淆和潜在的错误。

© www.soinside.com 2019 - 2024. All rights reserved.