Bra*_*l0w 0 memory 64-bit assembly 32-bit instructions
现在的处理器大多是 32 位或 64 位。这意味着它们处理的指令具有这个大小。
我们经常听说 32 位操作系统的 RAM 限制为 4GB=(2^32 位),因为 RAM 地址的长度需要保存在 32 位内。
但事实上,当我们查看指令的外观时,您通常需要不到 32 位来加载一个字。
以 x86mov指令为例,您有一个操作码、一个源地址和一个目标地址。
我的问题是,我们如何才能从 32 位长的地址加载某些内容?
我们是否总是需要在内存中某个位置有一个指向该地址的指针,该位置具有可在指令中使用的较小地址?
谢谢
这个问题的前提是错误的。处理器“x 位”并不意味着所有指令都是 x 位长。这可能意味着,特别是在 RISC 架构上,x86 不是一个例子。如今,在 x86 上,一条指令的长度可以从 1 字节到 15 字节不等(以前的上限较低)。
因此 x86 在将地址(或其他常量)放入其指令中时没有任何问题。有足够的空间。顺便请注意,它永远不需要源地址和目标地址,这根本就是不可编码的。在大多数指令中,它们中至少有一个必须是寄存器,并且在确实具有两个内存地址的一对指令中,这些地址是隐式的。
在其他一些体系结构上,您是绝对正确的:指令的长度不足以容纳完整的地址(因为它们的大小相同,并且不会留下任何操作码位)。常见的解决方案是提供相对于指令指针的寻址模式,然后如果需要绝对地址,可以在“附近”存储完整地址。
| 归档时间: | 
 | 
| 查看次数: | 555 次 | 
| 最近记录: |