例如,对于8位CPU,堆栈大小预期为8位宽,16位CPU与16位堆栈宽度,以及32位、64位CPU等等。所有的架构都是这样吗?
发布于 2009-08-21 12:54:09
CPU具有数据总线和地址总线。它们可以具有相同的宽度,但通常不是。
堆栈指针是指向内存的指针,因此它通常与地址总线一样宽,除非内部使用了某种(奇怪/模糊)转换。指令指针(指向当前指令)也是指向内存的指针,与堆栈指针一样宽。
其他寄存器主要处理数据,因此具有与数据总线相同的维度。但和往常一样,也有例外。
举个老例子。6502。8位cpu (8位数据总线,16位地址总线)。它有(或多或少)通用寄存器X和Y,以及称为A的“累加器”。所有8位寄存器。存在堆栈指针和指令指针,堆栈指针具有8个显式和8个隐式位(堆栈总是在相同的256字节区域中),因此堆栈指针寄存器具有8位,指令指针具有16位。
8086具有16位数据总线和20位地址总线。通用寄存器的位置为8( 16位)。指令指针和堆栈指针的位置为16位,但使用段寄存器(也是16位)来获得完整的20位地址。
发布于 2009-08-21 12:57:20
对于8位CPU,堆栈大小应为8位宽度。
你可能会预料到这一点,但你错了。堆栈的基本用途是存储和检索返回地址,在8位处理器上,这些地址实际上是16位的值。例如,Z80指令:
PUSH HL将16位值(两个8位寄存器H和L的内容)压入堆栈。没有推送8位值的Z80指令。
发布于 2009-08-21 13:19:11
堆栈实际上只是一个概念,“堆栈宽度”实际上并不意味着什么。
假设您指的是堆栈元素的宽度,但您通常可以在任何堆栈上存储任意大小的值(使用一些填充或对齐),而不管体系结构的总线宽度或寄存器大小的大小。
请注意,术语8位、16位等有点随意,并不是真正严格的定义,因此这会使任何“宽度”的定义变得复杂。
https://stackoverflow.com/questions/1311740
复制相似问题