学过微机原理的进来下,问下问题才刚看微机原理,里面.
编辑: admin 2017-25-02
-
4
8086/8088处理器对内存采用分段管理机制.
8086/8088处理器的地址信号线有20根,可以寻址2^20=1M的地址空间,但是它们内部用于存放地址的寄存器(段寄存器、通用寄存器)只有16位,只用一个寄存器进行寻址的话,只可以寻2^16=64K的地址空间,那么怎么来寻1M的空间呢?
就采用了分段管理机制,一个段就是一个寄存器所能寻的空间,就是64K的大小.简单来说就是利用两个寄存器来对1M的空间进行寻址,那么肯定可以了,这两个寄存器一个叫段寄存器、一个叫段内地址偏移寄存器,后者只能联系寻址64K的地址空间,而前者所谓的段寄存器就是放了当前段的首地址,比如地址10000H开始的段,这个段的空间是10000H~1FFFFH,一共是64K的空间,那么用来存放段内地址偏移量的寄存器(假设用BX)BX的取值范围是0000~FFFFH,叫做偏移地址或逻辑地址,也就是相对地址,相对段基址10000H的地址偏差的意思,而段基址寄存器(假设用DS)就是用来放整个段开始的那个地址,即10000H放到DS中,问题出现了,20位的段基址怎么放到16位的段基址寄存器中呢?是这样的,分段机制里面说20位的物理地址(PA)可以用段基址寄存器存放的值(DS中放的数据)与偏移地址(EA,这里是用BX来存放的)进行计算得到,计算公式为PA=段基址寄存器*16+EA,那么在这里为PA=DS*16+BX,所以段开始地址为10000H,那么段寄存器DS中放的就是1000H,DS*16即左移4位后再加上BX就可以对10000H~1FFFFH这64K的内容进行寻址了,如果超过64K的话,就要改变段寄存器里面的值,这就是对存储器的分段管理机制.
知道了分段管理机制,再来看你所提出的问题就比较容易了,(DS)=2000H,(BX)=300H,(DI)=400H这个题目,括号表示取里面的内容,就是数据段寄存器DS中放2000H,基址寄存器BX中放300H,变址寄存器DI中放400H,求对应的物理地址里面的内容.首先我们要根据已知计算出实际的物理地址即PA,再根据物理地址去找里面的内容,先计算PA=DS*16+BX+DI=2000H*16+300H+400H=20700H,题目就是让我们找到物理地址20700H中的内容,而且是让我们读取一个字的内容,就是所说的1990H,实际我们是读取了两个字节的内容,即:20700H中的内容为低字节90H,20701H中的内容为高字节19H,从20700H单元读一个字也就是两个字节的内容就是读了20700H和20701H两个单元的内容,即1990H
所以有(20700H)=1990H.
地址算法的公式就是:PA=段寄存器*16+EA
PA是物理地址,EA是逻辑地址,逻辑地址EA由基址寄存器BX、变址寄存器SI或DI、直接偏移地址给出.即EA=BX+SI/DI+立即数.例题就是基址加变址寻址.
解释完了,不知对你是否有帮助,要想理解透还需要将书里面的寻址方式及寄存器这部分内容仔细看看.
类似问题
类似问题1:请问微机原理学的好的,这几个题怎么做啊?3. 设OP1、OP2是字节型内存变量,试指出下列指令是否正确? 若错误,写出错误原因.(1) MOV AH, BX .(2) AND [BX], [SI] [数学科目]
(1) MOV AH, BX 长度不匹配 .
.
(3) SUB AX, [SI][DI] SI与DI应与BX与BP搭配 呵呵不好意思只会这两个