第三课主存储器和堆栈

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

主存储器一个计算机系统的存储系统由主存储器和辅存储器组成。他从内存中获取一个指令并执行该指令,然后从内存中获取下一个指令并执行。一个千兆CPU可以在一秒内进行大约一亿次这样的操作,我靠这丫的,歪歪一下,我脑子要是也这么好事的话~~~~,所以CPU能力惊人的速度从事其枯燥的工作。CPU有自己的一个小工作区,该工作区由若干个寄存器组成,每个寄存器可以保存一个数。一个寄存器保存下一条指令的内存地址,CPU使用该信息获取下一条的指令,获取一条指令后,CPU在另一个寄存器中保存该指令并将第一个寄存器的值更新为下一条指令的地址。CPU只能理解有限的指令。还有,这些指令是相当具体的,其中许多指令要求计算机将一个数从一个位置移动到另一个位置,例如,从内存单元中移动到寄存器。存储单位每8位组成一个字节,相邻的两个字节又可以组成一个字。假设内存容量为1M字节,则它的最低地址为00000H,最高地址为0FFFFFH。由于字是由2个相邻的字节组成的,因而规定字地址由2个字节地址中较小的一个确定。这样一来,存放在主存中的程序和数据一律按照物理地址存取。堆栈堆栈中数据遵循一个原则‘先进后出’。堆栈中的数据也称之为元素或者栈项,数据进栈称为‘压栈’,出栈称之为‘弹出’。8086允许用户建立自己的字堆栈,最大可达64K,其存储区位置由堆栈段寄存器SS给定,并固定采用SP作指针,即SP的内容为栈顶相对于SS的偏移地址。空栈时,SP指向堆栈段的最高地址也就是栈底,存入数据时栈顶均由高地址向低地址变化。往堆栈中存入数据必须采用专门的指令进行,而且只能是字操作。进栈指令PUSH语句格式:PUSH源操作数功能:将寄存器、存储单元或者存储器中的一个字压入堆栈中。例如:在执行指令前AX=04F8H,SP=1000H执行指令:PUSHAX指令执行的操作:SP-2=1000H-2=0FFEH执行结束后,堆栈段中偏移地址0FFEH中的内容为04F8H。出栈指令POP指令格式:POP目的操作数功能:将栈顶元素弹出送至某一个寄存器、存储单元或者段寄存器(代码段CS除外)执行前:BX=1111H执行指令:POPBXBX=04F8H,SP+2=0FFEH+2=1000H除了PUSH和POP指令之外,如果其他的指令要访问堆栈时,只能通过基址寄存器BP进行。存储器物理地址的形成SPBPSIDIIP等为了用16位的来表示20位的地址想出的方案:将1M字节的存储器按64K字节分段,设置四个段寄存器CS、DS、SS和ES用来保存当前可使用段的段首址。下图就是物理地址的形成方式由于只设置了4个段寄存器,那么CPU在当前同一时刻只能同时最多访问4个段,即当前代码段CS、当前数据段DS、当前堆栈段SS和当前附加数据段ES。如果将当前各段的首址用符号表示,设代码段首址是CODE、堆栈段首址是STACK,数据段首址为DATA1,附加数据段首址DATA2。代码段CS当前代码段在主存中的起始地址是由代码段寄存器CS确定,指令指示器IP保存下一条将要取出指令相对于CS的偏移地址,如果要取出这条指令执行,它的物理地址就是:CS(左移四位)+IP(偏移地址)例如:在当前代码段中的大小为32K字节,CS=0C018H,IP=7FFFH物理地址=0C018(左移四位)+7FFFH=0C0187H堆栈段SS栈顶的物理位置为:SS(左移四位)+SP其它指令时,其物理地址为SS:(左移四位)+BP数据段DS和附加数据段ES当要访问数据段中的某一个变量时,该变量的物理地址就是DS或ES(左移四位)+该变量的偏移地址。段的分配

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功