对IA-32汇编语言中内存位置的快速提问,我似乎无法在其他任何位置找到答案。使用IA-32汇编语言时变量的内存位置
在IA-32上,每个存储器地址长度为4个字节(例如0x0040120e)。这些地址中的每一个都指向一个1字节的值(或者在数值较大的情况下,它的第一个字节)。现在看这两个简单的IA-32位汇编语言的语句:
var1 db 2
var2 db 3
这将放置在相邻的存储单元VAR1和VAR2(假设0x0040120e和0F)。现在我意识到define指令db为该值分配1个字节。但是,在上面的情况下,我有两个值(2和3),实际上只需要两个比特来存储。
问题:
- 当使用DB指令,做这两个值仍然消耗一个完整的字节,即使他们比1个字节的小吗?
- 正在使用一个完整的字节来获取更少的值,但仍然是常用的方法(因为我们有太多的内存,我们不在乎)?
- 整数0到255然后通常占用1个字节,整数256到(2^16 - 1)占用2个字节(一个字)等。
谢谢
马格努斯
编辑1:提出的问题更加清晰(为后面道歉来回)
编辑2:下面加一个结构化的回复,基于在其他海报的输入
对不起,应该在我的文章中注意到,我知道db是define指令,指示给该值赋予一个字节。所以,对于0-255的整数,这基本上浪费了大量的内存? (在主帖中增加了几个问题)。谢谢! – Magnus
谢谢,我根据您和#geert3的回答(仅为未来访客的利益)修改了我的帖子,以便更清楚并在下面添加了结构化回复。 – Magnus