我做了一些研究.一个字节是8位,一个字是可以在内存中寻址的最小单元.单词的确切长度会有所不同.我不明白的是有一个字节是什么意思?为什么不说8位?
我问过这个问题的教授,他说这些天大多数机器都是字节可寻址的,但这会产生什么结果呢?
尽管单词的常见定义(如维基百科所述)是:
用于指定存储器中的位置的最大可能地址大小通常是硬件字(这里,“硬件字”是指处理器的全尺寸自然字,而不是使用的任何其他定义)。
根据一些消息来源,x86 系统注意到它被视为 16 位:
在 x86 PC(Intel、AMD 等)中,虽然架构很早就支持 32 位和 64 位寄存器,但其本机字大小可以追溯到 16 位起源,“单个”字为 16 位。“双”字是 32 位。请参阅 32 位计算机和 64 位计算机。
然而英特尔的官方文档(sdm 第 2 卷,第 1.3.1 节)指出:
这意味着字的字节从最低有效字节开始编号。图 1-1 说明了这些约定。
图 1-1 显示了 x86-64 上下文中单词的小端序列中的 4 个字节,而不是 2 个字节或 8 个字节(如上面链接的来源的不同定义所建议的那样):
我对这一切真正感到困惑的是如何获取和解析指令。我正在编写一个模拟器,一旦我解析 PE 格式的可执行文件并进入文本部分,如果我要遵循 4 字节小端格式,这是否意味着将首先解析第 4 个字节?
让我们组成一些字节,例如:
.text segment buffer:
< 0x10, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20 > ....
Run Code Online (Sandbox Code Playgroud)
我会将第一条指令解析为 1C、1B、1A、10、20、1F、1E、1D ...(等等,由于长度可变,显然可能有更多的单词需要读取,具体取决于这里的实际字节是什么)?
如果
8位是一个字节
两个字节是一个单词
四个字节是双字节
8个字节是一个qword
什么是16字节的好名字?
我想知道,64 位操作系统和基于 x64 的处理器是否意味着字大小(即处理器和物理内存之间的内存传输大小)是 64 位?如果操作系统是 32 位且处理器为 x64 呢?那么基于 x86 的处理器呢?这两个规范(XX 位操作系统和基于 xXX 的处理器)与硬件中的实际字长有什么关系?
assembly ×2
cpu-word ×2
intel ×2
terminology ×2
x86-64 ×2
32-bit ×1
64-bit ×1
endianness ×1
hardware ×1
machine-code ×1
memory ×1
x86 ×1