【发布时间】:2013-12-13 13:04:56
【问题描述】:
关于 IA-32 汇编语言中的内存位置的快速问题,我似乎无法在其他任何地方找到答案。
在 IA-32 上,每个内存地址都是 4 个字节长(例如 0x0040120e)。这些地址中的每一个都指向一个 1 字节的值(或者在较大值的情况下,指向它的第一个字节)。现在看看这两个简单的 IA-32 汇编语言语句:
var1 db 2
var2 db 3
这会将 var1 和 var2 放置在相邻的内存单元中(比如 0x0040120e 和 0f)。现在我意识到定义指令 db 为该值分配了 1 个字节。但是,在上述情况下,我有两个值(2 和 3),实际上每个值只需要两个位来存储。
问题:
- 使用 db 指令时,这两个值是否仍会占用一个完整字节,即使它们小于 1 个字节?
- 是否将完整字节用于可以少用的值,这仍然是常见的方法(因为我们有太多的内存,我们不在乎)?
- 那么整数 0 到 255 是否一般占用 1 个字节,整数 256 到 (2^16 - 1) 占用 2 个字节(一个字)等等?
谢谢,
马格纳斯
编辑 1:使问题更加清晰(来回道歉)
编辑 2:根据其他发帖者的输入,在下方添加了结构化回复
【问题讨论】: