IBM-PC汇编语言程序设计 作者 余朝琨 第3章 存储器的分段.pptVIP

IBM-PC汇编语言程序设计 作者 余朝琨 第3章 存储器的分段.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 存储器的分段 为了便于用户使用外设,IBM-PC机提供了两种类型的例行程序供用户调用。一种是BIOS(Basic Input Output System),另一种是DOS(Disk Operating System)功能调用。它们都是系统编制的子程序,通过中断方式转入所需要的子程序去执行,执行完后返回原来的程序继续执行。这些例行程序有的完成一次简单的外设信息传送,如从键盘输入一个字符用MOV AH,1和INT 21H两条指令即可,或送一个字符至显示器等;也有的要完成一次相当复杂的外设操作,如从磁盘读写一个文件等。总之,操作系统把一些复杂的外设操作编制成了例行程序,用户只须按入口参数设定,功能号的设定,再执行一条INT n(n为中断类型号)就可以进入这些例行程序,完成所需要的外设操作,所以用户应尽量利用这些系统所提供的工具来编写自己的程序。 BIOS和DOS功能调用虽然都是系统提供的例行程序,但是它们之间又有差别。BIOS存放在机器的只读存储器ROM中,所以,可以把它看成机器硬件的一个组成部分,它的层次比DOS更低,更接近硬件,因此,它的语句要完成每一个对设备的直接命令,或信息传送。DOS功能调用是操作系统DOS的一个组成部分,它在开机时由磁盘装入到存储器,只要不关机,这些例行程序都在主存中,在它的例行程序中可以一次或多次调用BIOS以完成比BIOS更高级的功能。用户需要使用外设时,应尽可能使用层次较高的DOS功能调用,但有时还不能满足要求,此时,就需要直接调用BIOS,如果BIOS还不能解决问题,那就只好自己编制中断服务程序。 3.1 存储单元的地址和内容    在线教务辅导网: 教材其余课件及动画素材请查阅在线教务辅导网 QQ:349134187 或者直接输入下面地址: 尽管存储器是由字节单元组成的,但是任何两个相邻字节可以构成一个字(WORD),即16位二进制代码。显然一个字有二个地址,约定用地址值较小的那个字节单元地址作为这个字单元地址的代表。一个字有两个字节,其中低字节在相应的低地址中,高字节数在高地址中。如在字地址23400H中存放7869H字数据,则69H存放在地址23400H单元中,78H(高字节)存放在23401H单元中,也就是遵循“低位在前,高位在后”的原则。 在8086/8088 CPU 访问内存的指令中,可分为字节访问和字访问两种。而在386以上CPU还具有32位访问。因此要求指令中表示出是哪种访问。在程序中,通常用伪指令定义符号地址(Variable)时已隐式指出该变量所具有的类型属性。访问存储器时,从某个单元取出(读出)其内容后,该单元仍然保存着原来的内容不变,可以重复取出,称为非破坏性读出,只有存入新的信息后,原来保存的内容就自动丢失了。 3.2 存储器地址的分段 8086/8088 CPU 有20根地址总线A19A18…A1A0,可以访问存储器的最大容量为:220B=1048576B=1024KB=1MB 在8086 CPU 中所有可用来存放地址的寄存器都是16位的。那么在16位字长的机器里,用什么办法来提供20位地址呢?在IBM PC机里采用了存储器地址分段的办法。把IMB的存储空间划分成若干个段(Segment),每个段可由1~64KB(即65536B)个连续的字节单元组成。每个段是一个可独立寻址的逻辑单位。在8086/8088的程序设计中,需要设立几个段,每个段有多少个字节以及每个段的用途完全由用户自己确定。同时每个段中存储的代码或数据,可以存放在段内任意单元中。 一个存储器可以划分为若干个段,但是每个段的起始单元的首地址不是任意的,而是有所限制,它必须从任意的小段(Paragraph)的首地址开始。机器规定,从0地址开始,每16个字节为一个小段。IMB可分成65536个小段。观察下面每小段的首地址的特性: 虽然存储器可以划分成若干个段,但在任何时刻,一个程序只能访问4个段中的内容,这4个段分别是代码段(Code Segment),堆栈段(Stack Segment),数据段(Data Segment)和附加段(Extra Segment)。它们的段首地址的段基值分别由对应的4个段寄存器CS,SS,DS,ES指明。它们分别保存各自段首地址的高16位值(A19~A4),由4个段寄存器指向的那些段叫当前段(Current Segment)。所以当前段至多可容纳64KB的程序代码,64KB的堆栈和128KB的数据(分别由DS、ES指向的当

您可能关注的文档

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档