[软件设计/软件工程] resb 2 是否等同于 resw 1?

[复制链接]
发表于 2022-5-6 15:56:00
问题
在这段代码中:
  1.    global _start
  2. section .bss
  3.     v1 resw 1
  4.     v2 resb 2    ;array of 2 chars
  5. section .text
  6. _start:
  7.     mov word[v1],500
  8.     mov word[v2],500

  9.     mov rax,60
  10.     mov rdi,0
  11.     syscall
复制代码

这个密码正确吗?
  1. word[v1]
  2. work the same way as
  3. 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 以避免混淆和潜在的错误。





上一篇:“无法启动 Visual Studio”错误(在 Mac 上)
下一篇:如何使用 openssl 创建公钥和私钥?

使用道具 举报

Archiver|手机版|小黑屋|吾爱开源 |网站地图

Copyright 2011 - 2012 Lnqq.NET.All Rights Reserved( ICP备案粤ICP备14042591号-1粤ICP14042591号 )

关于本站 - 版权申明 - 侵删联系 - Ln Studio! - 广告联系

本站资源来自互联网,仅供用户测试使用,相关版权归原作者所有

快速回复 返回顶部 返回列表