堆栈宽度是否总是与CPU寄存器大小相同?

问题描述 投票:3回答:4

例如,对于8位CPU,堆栈大小预计为8位宽,而16位CPU则为16位堆栈宽度,而32位,64位CPU等。所有架构都适用吗?

cpu
4个回答
5
投票

CPU具有数据总线和地址总线。它们可以具有相同的宽度,但通常不相同。

堆栈指针是指向内存的指针,因此它通常与地址总线一样宽,除非内部使用了某些(奇怪/晦涩)的转换。指令指针(指向当前指令)也是指向内存的指针,例如与堆栈指针一样宽。

[其他寄存器主要处理数据,因此具有与数据总线相同的尺寸。但是像往常一样,也有例外。

以旧的例子。 6502。一个8位cpu(8位数据总线,16位地址总线)。它具有(或多或少)通用寄存器X和Y,以及称为A的“累加器”。所有8位寄存器。有一个堆栈指针和一个指令指针,该堆栈指针具有8个显式位和8个隐式位(堆栈始终位于相同的256字节区域中),因此堆栈指针寄存器具有8位,指令指针具有16位。] >

8086,具有16位数据总线和20位地址总线。通用寄存器在哪里8(和16位)。指令指针和堆栈指针为16位,但使用段寄存器(也为16位)来获取完整的20位地址。


4
投票

8位CPU,预期的堆栈大小为8位宽度


1
投票

堆栈实际上只是一个概念,“堆栈宽度”实际上没有任何意义。


1
投票

尚未提及的一点是,某些CPU(例如Microchip PIC系列)具有专用堆栈,无法像普通RAM那样对其进行访问。在PIC16系列上,堆栈仅与程序计数器绑定,并且堆栈的宽度(大概)与程序计数器的宽度相同。在PIC18系列上,堆栈和程序计数器均为21位宽;可以将高20位复制到程序计数器或从程序计数器复制;代码还可以将顶部堆栈元素作为5位部分和2个8位部分进行检查。

© www.soinside.com 2019 - 2024. All rights reserved.