首页 > 编程知识 正文

微机原理8086课程设计,微机原理物理地址

时间:2023-05-06 07:54:41 阅读:177105 作者:4073

8086地址方式为数据寻址方式转移地址寻址方式

数据寻址是指通过地址查找数据(操作数),并告诉CPU访问数据的位置。

数据寻址方法通常分为四种。 即时寻址方式; 寄存器地址; 存储器地址指定; 隐式寻址。

其中,存储器地址可分为直接寻址5种寄存器间接地址; 寄存器相对地址; 地址转换地址; 基地址发生变化,指定相对地址。

数据地址方式以下,依次对各地址方式进行说明。

1 .立即清点地址

如果数据是8位或16位,则可以直接放置在指令本身的最后一个或两个字节中。 这样的数据将立即成为操作数。 操作数直接从指令代码中得到。 也就是说,即时数以常数的形式直接表现。

即时寻址方法仅用于源操作数,常用于为寄存器和存储器单元赋值。

例如:

MOV AX,0102H; 机器代码: B8 02 01操作码:B8即时数:0102

2 .寄存器地址数据存储在由指令规定的寄存器中,对于16位的数据,寄存器可以是AX BX CX DX SI DI SP BP; 8位数据可为数据寄存器的高8位或低8位,或AL AH BL BH CL CH DL DH

例如:

MOV AX,BX 3 .存储器地址操作数位于存储单元,编程需要逻辑地址,即段地址和偏移地址。 段地址可以使用默认逻辑段,而无需明确说明。 典型的BX SI DI的默认逻辑段是DS (数据段) BP SP的默认逻辑段是SS (累计段); 如果需要段地址,请使用段地址前缀明确说明。 例如: SS:[BX]

存储器地址可以分为五类。 直接寻址; 寄存器间接地址; 寄存器相对地址; 地址转换地址; 基地址发生变化,指定相对地址。

3.1直接地址操作数,在存储单元中,其16位有效地址、即段内偏移地址在指令代码中占2字节

例如:

MOV AX,[1000H]; 缺省值在数据段中相当于DS:[1000H],但在实际汇编语言编程中,如果程序复杂,存储数据的单元较多,则直接寻址方式会使用户按存储数据的单元进行因此,在实际的汇编语言编程中,经常在存储数据的单元格中定义变量名/变量等符号地址名称。

定义变量名后,有5个属性:该单元的段地址、该单元的偏移地址、类型、大小和长度。 因此,在编程中,可以用整个变量名替换原来存储单元的实际地址。

例如:

MOV AX,DATA1; 主存储操作数经常以变量形式引用,一般不需要使用段地址前缀3.2间接寻址存储单元,其有效地址是由指令代码指定的基址寄存器BX或索引寄存器si 有效地址可以表示为: 其段地址默认位于DS段中。

MOV AL,[BX]; 字节传输,16位有效地址MOV AX,[SI]; 字传送,16位有效地址MOV WORD PTR [BP],1234H; 字传送,16位有效地址3.3相对地址操作数位于存储单元中,其有效地址包括8位或16位移位量(用disp表示)和基址寄存器(包括基址指针)或ISP 位移量disp和该寄存器由指令码给出,有效地址可以表示如下

disp为常数时,具有操作数的单元的段地址以寄存器为基准,寄存器位BX SI DI时,操作数默认在段中。 对于寄存器位BP,操作数默认位于SS段中。

如果disp是变量,则操作数所在单元的段地址基于变量,变量通过该atgddg前往该段的段地址。

MOV AX,[DI 06H]; AXDS:[DI 06H]; 寄存器: DI; 位移量: 06H; 有效地址: EA=DI 06HMOV AX,[BP-06h]; AXSS:[BP-06H]; 使用BP寄存器,缺省情况下与SS段寄存器协作的寻址方式可以作为表处理使用。 表的起始地址可以设置为偏移量,可以修改基地址或索引寄存器的内容以获取表的值。

3.4基址索引操作数,在存储单元中,有效地址是基址寄存器和索引寄存器内容之和。 基址寄存器和索引寄存器由脚本指定。 有效地址可以表示为:

以该单元的段地址基地址寄存器为基准,基地址寄存器为BX时,段地址寄存器默认为DS,基地址寄存器为BP时,段地址寄存器默认为SS

例如:

MOV AX,[BX][SI]MOV AX,[BX SI]将支持一维数组、表等数据结构的起始地址存储在基址寄存器中,便于使用索引寄存器访问数组中的各元素。 由于可以变更两个寄存器的值,所以比寄存器的相对寻址方式更灵活。

3.5 基址变址且相对寻址操作数是在存储单元中,有效地址为8位或16位位移量disp、基址寄存器的内容、变址寄存器的内容的3个部分之和,即

例如:

;有效地址=基址寄存器+变址寄存器+位移量MOV AX,[BX+SI+06H] ;AX←DS:[BX+SI+06H];允许两个寄存器都用中括号,位移量在中括号前MOV AX,06H[BX+SI] ;AX←DS:[BX+SI+06H]MOV AX,06H[BX][SI] ;AX←DS:[BX+SI+06H]

这种寻址方式便于支持二维数组的寻址:存储器存放着多个记录组成的文件,位移量指向文件之首,基址寄存器指向某个记录,变址寄存器指向该记录的第一个元素。

这种寻址方式为堆栈处理提供了方便:一般BP可指向栈顶,从栈顶到数组的首地址可用位移量来表示,变址寄存器可用来访问数组中的某个元素。

综上所述

        位移量是存放指令中的一个8bit或者16bit的数,但它不是立即数,而是一个地址。

        基址(Base)是存放在基址寄存器(BP BP)中的内容,通常用来指向数据段中数组或者字符串的首地址。

        变址(Index)是存放在变址寄存器(SI DI)中的内容,它通常用来访问数组中的某个元素或字符串中的某个字符。

转移地址寻址方式

        指令是按照顺序存放在存储器中的,其执行顺序是由代码段起存其CS和指令指针IP的内容决定。在正常的情况下,BIU自动修改IP的内容,使它指向下一条指令。程序转移指令通过改变IP和CS的内容,就可以改变程序的正常执行顺序。

        转移地址的寻址方式指寻找操作数作地址用,给IP或给CS:IP,最终确定一条证零的地址,从而实现程序的转移。如果程序转移后只有IP发生了改变,则称为段内转移或进程转移(也称为NEAR转移);如果转移后CS IP均发生了变化,则成为段间转移或者称为远程转移(也称为FAR转移) 

        转移地址的寻址方式由4种:段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址

        8086指令系统中转移指令有两大类:无条件转移指令(JMP,CALL,RET,IRET)条件转移指令(JZ,JCM,JCXZ,LOOP)

1.段内直接寻址

        在段内直接寻址方式中,指令码包括一个位移量disp,转移的有效地址为(IP)+disp,因为位移量是相对于当前IP内容来计算的,所以有又称为相对寻址。disp可以是16位,也可以是8位。如果disp是8位,则称为段内短程转移。无论是8位还是16位,disp在指令码中都是用补码的表示有正负号的数。

        JMP指令操作数部分直接给出目标单元,指令在存储单元的地址形成CS*10H+IP;IP=IP+disp

例如

转移的目的地址与当前指令在同一个段,通常用目的地址标号表示 JMP MAIN        

2.段内间接寻址

        在段内间接寻址方式中,在同一代码段内,要转移到的地址的16位段内偏移地址(即有效地址)在一个16位寄存器中或在存储器相邻的两个单元中。这个寄存器或相邻的两个单元的第一个单元的地址,是在指令码中以上面讨论的数据的寻址方式给出的。只不过寻址方式决定的地址里放的不是一般的操作数,而是转移地址。

        转移的目的地址与当前指令在同一个段,通常用一个16位地址来表示目的地址。

        JMP指令转移的目标地址在某一个通用寄存器或者在某一个字存储单元中

举例:

JMP CX;或者JMP WORD PTR [BX] 3.段间直接寻址

        在段间直接寻址方式中,指令码中直接给出16位段地址和16位有效地址;目的地址和当前指令不在同一个段,通常用一个32位的地址表示目的地址。JMP FAR PTR MAIN1

       

       

4. 段间间接寻址

        段间间接寻址与段内间接寻址方式相似,但不可能有寄存器间接寻址,因为要得到的转移地址位32位(16位段地址和16位有效地址)。指令中一定给出某种访问内存单元的寻址方式。用这种寻址方式计算出存储单元地址开始的连续的4个单元的内容就是要转移的地址,其中前两个但馆内的16位值为有效地址,后两个单元内的16位为段地址。

        属于转移类指令的有转子程序指令CALL、无条件转移指令JMP和多种条件指令等。并不是每种指令都属于上述4中寻址方式。

        段间间接寻址和段内间接寻址方式相似,要得到的转移地址包括16位段地址和16位有效地址,使用地址连续的4个存储单元存储。

         指令所在存储单元的地址的形成:IP←EA存储单元的前两个字节;CS←段地址存储单元的后两个字节。

JMP DWORD PTR ADDR[BX];或者MP DWORD PTR [BX][SI]

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。