80x86指令系统和寻址方式

来源:互联网 发布:监控 linux 编辑:程序博客网 时间:2024/06/02 05:31

一、数据类型   

   计算机执行指令过程中需要处理各种类型的机器数,可处理的数据类型有七种:

   1)无符号二进制数

   2)带符号二进制数

   3)BCD码

   4)数的定点和浮点表示法

   5)串数据

   6)ASCII码数据

   7)指针类数据

二、寻址方式

      寻址方式是指寻找指令中操作数或指令转移地址的方式,分为数据寻址方式和程序寻址方式。数据寻址方式是指获取指令所需的操作数或操作数地址的方式;程序寻址方式指在程序中出现转移和调用时的程序定位方式。指令系统是指机器所支持的所有指令的集合。

   数据寻址方式:立即数寻址、寄存器寻址、存储器寻址。

   (CPU可以直接将数据本身与指令一起编码作为指令代码的一部分,也可以存放在寄存器或主存储器中,直接寻址、寄存器间接寻址、基址寻址、变址寻址、基址、变址寻址都属于存储器寻址方式。

   程序寻址方式:段内直接寻址方式、段内间接寻址方式、段间直接寻址方式、段间间接寻址方式。

   指令系统:数据传输指令、算术运算指令、逻辑运算指令和存储器控制指令,以及保护模式下的指令等。


1.数据寻址方式

1.1 立即数寻址(操作数直接存放在指令中)

   操作数直接包含在指令机器码中,它紧跟在操作码的后面,与操作码一起放在代码中。特点是执行速度快,主要给寄存器赋值。同样不需要执行总线周期。   

    MOV AX,0A7FH     ;AX←0A7FH,执行后,AH=0AH,AL=7FH    MOV AL,5H        ;AL←5H

1.2 寄存器寻址(操作数在寄存器中)

    操作数包含在CPU内部的寄存器中。对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI、DP、BP;8位操作数,寄存器可以是AH、AL、BH、BL、CH、CL、DH、DL。寄存器寻址的指令本身存放在存储器的代码段,操作数在CPU寄存器中。特点是执行速度快。

    MOV AH,AL </span>  
1.3 直接寻址(操作数在存储器中,指令给出存储器的偏移地址)

   在指令的操作码后面直接给出操作数的16位偏移地址(有效地址),它与指令的操作码一起,存放在内存的代码段,低8位在前,高8位在后。操作数隐含数据段操作,存放在内存的数据段DS区域中,在给定的16位有效地址的地方。

    MOV AX,[2000H]    ;把内存中的地址为DS,偏移地址为2000H的2个字节数据送到AX中。
1.4 寄存器间接寻址(操作数的地址在基址寄存器或变址寄存器中,操作数在存储器中)

   指令中的操作数存放在存储器中,存储单元的有效地址由寄存器指出,这些寄存器可以是BX(基址寄存器)、BP、SI(变址寄存器)、DI(变址寄存器)之一,即有效地址等于其中某一寄存器的值,对寄存器指向的存储单元进行数据操作,这些用来存放存储器操作数偏移地址的寄存器称为地址指针。允许段超越改变段地址。
   (1)以BX、SI、DI(作为地址指针)进行寄存器间接寻址的方式

   MOV AX,[BX]  ;PA=DS*16+BX   MOV BX,[SI]   ;PA=DS*16+SI   MOC [DI],DX  ;PA=DS*16+DI

   (2)以BP(作为地址指针)进行寄存器间接寻址的方式

   MOV [BP],BX  ;PA=SS*16+BP

1.5 变址寻址

   用SI、DI变址寄存器进行的间接寻址。操作数存放在存储单元中,操作数的物理地址是段寄存器的内容左移4位加上变址寄存器SI或DI的内容,再加上由指令中所指出的16位或8位位移量DISP。 

   MOV AX,3003H[SI]          ;设DS=3000H,SI=2000H,3003H位位移量DISP。PA=DS*10H+EA=3000H+2000H+3003H=35003H
1.6 基址寻址

   使用基址寄存器BX或基址指针寄存器BP进行寻址。当使用BX寄存器实现基址寻址时,隐含的段地址在DS寄存器中;当使用BP时,隐含的段地址在SS寄存器中。同样允许段超越。

   操作数存放在存储单元中,操作数的物理地址是段寄存器的内容左移4位加上BX或BP的内容,再加上由指令中所指出的16位或8位位移量。 

   MOV SI,08H[BX]         ;PA=DS*16+BX+08H   MOV AX,[BX+100H]       ;PA=DS*16+BX                                      MOV AL,[BP+08H]        ;PA=DS*16+SP+08H   MOV 0200H[BP],AX       ;PA=SS*16+BP                        
1.7 基址、变址寻址

   操作数在存储单元中,其物理地址由段寄存器内容左移4位加上一个基址寄存器和一个变址寄存器,再加上16位或8位位移量。  

   MOV AX,MASK[BX][SI]  ;PA=DS*10H+EA=6000H*10H+A500H+2200H+64H=6C764H(设MASK=64H,BX=A500H,SI=2200H,DS=6000H)

2.程序寻址方式

2.1 直接寻址方式(相对寻址方式)
    把指令本身提供的位移量加到指令指针寄存器中,形成有效目标地址的寻址方式。

   JMP   1000H ;跳到CS:1000H这个位置   CALL 1000H ;调用CS:1000H这个位置的函数
2.2 段内间接寻址方式


2.3 段间直接寻址方式


2.4 段间间接寻址方式



0 0
原创粉丝点击