第三课主存储器和堆栈Word格式.docx
- 文档编号:3948847
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:4
- 大小:38.04KB
第三课主存储器和堆栈Word格式.docx
《第三课主存储器和堆栈Word格式.docx》由会员分享,可在线阅读,更多相关《第三课主存储器和堆栈Word格式.docx(4页珍藏版)》请在冰点文库上搜索。
一个寄存器保存下一条指令的内存地址,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
POPBX
BX=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(左移四位)+该变量的偏移地址。
段的分配
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三课 主存储器和堆栈 第三 主存储器 堆栈