8086指令系统的寻址方式有哪些???

我知道有六个好像是但不知道是哪六个
2024年11月28日 15:45
有3个网友回答
网友(1):

寻址方式:
1.立即寻址方式
功能:操作数紧跟在操作码之后,直接把操作数从内存里送进寄存器;
操作数直接存放在指令中,它作为指令的一部分存放在代码段里,这种操作数称为立即数;立即寻址方式用来表示常数,它经常用于给寄存器赋初值,并且只能用于源操作数字段,不能用于目的操作数字段;
格式:mov al,1h 把1h送进al
2.寄存器寻址方式
功能:直接把寄存器里的内容送进寄存器;
操作数在寄存器中,指令指定寄存器号;这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数,因而可以取得较高的运算速度;
格式:mov ax,bx
3.存储器寻址方式:形成操作数逻辑地址的偏移量;以下各种寻址方式的操作数都在除代码段以外的存储区中,通过采用不同方式求得操作数地址,从而取得操作数。
<1>直接寻址方式
功能:适用于处理单个变量;
有效地址:就在指令中,它存放在代码段中指令操作码之后,但操作数一般存放在数据段中,所以必须先求出操作数的物理地址,然后再访问存储器才能取得操作数;
语法:位移量存放操作数地址;
格式1:mov ax,var 把ds:s的内容送到ax
格式2:mov ax,[var/data] 与格式1是等效的
<2>寄存器间接寻址方式
功能:方便地访问一维数组;
有效地址:在基址寄存器bx、bp或变址寄存器si、di中,而操作数则在存储器中;如果指令中指定的寄存器是bx、si、di,则操作数在数据段中,所以用ds段寄存器的内容作为段地址;如果指令中指定的寄存器是bp,则操作数在堆栈段中,所以用ss段寄存器的内容作为段地址;
语法:基址寄存器或变址寄存器存放元素与段基值之间的字节距离;
格式1:mov ax,[bx] 把ds:(bx)的内容送到ax
格式2:mov ax,[bp] 把ss:(bp)的内容送到ax
格式3:mov ax,[si] 把ds:(si)的内容送到ax
格式4:mov ax,[di] 把ds:(di)的内容送到ax
<3>寄存器相对寻址方式
功能:也方便地访问一维数组;
有效地址:指令中指定的8位或16位位移量和一个基址寄存器bx、bp或是一个变址寄存器si、di的值之和;
语法:位移量存放数组首地址,基址寄存器或变址寄存器存放元素与数组之间的字节距离;
格式1:mov ax,[var/data+bx] 把ds:(var/data+(bx))的内容送到ax
格式2:mov ax,[var/data+bp] 把ss:(var/data+(bp))的内容送到ax
格式3:mov ax,[var/data+si] 把ds:(var/data+(si))的内容送到ax
格式4:mov ax,[var/data+di] 把ds:(var/data+(di))的内容送到ax
<4>基址变址寻址方式
功能:也方便地访问一维数组;
有效地址:一个基址寄存器bx、bp和一个变址寄存器si、di的值之和;
语法:基址寄存器存放数组首地址,变址寄存器存放元素与数组之间的字节距离;
格式1:mov ax,[bx+si] 把ds:((bx)+(si))的内容送到ax
格式2:mov ax,[bx+di] 把ds:((bx)+(di))的内容送到ax
格式3:mov ax,[bp+si] 把ss:((bp)+(si))的内容送到ax
格式4:mov ax,[bp+di] 把ss:((bp)+(si))的内容送到ax

<5>相对基址变址寻址方式
功能:方便地访问二维数组;
有效地址:指令中指定的8位或16位位移量和一个基址寄存器bx、bp和一个变址寄存器si、di的值之和;
语法:位移量存放数组首地址,基址寄存器存放数组元素的行址,变址寄存器存放数组元素的列址;
格式1:mov ax,[var/data+bx+si] 把ds:(var/data+(bx)+(si))的内容送到ax
格式2:mov ax,[var/data+bx+di] 把ds:(var/data+(bx)+(di))的内容送到ax
格式3:mov ax,[var/data+bp+si] 把ss:(var/data+(bp)+(si))的内容送到ax
格式4:mov ax,[var/data+bp+di] 把ss:(var/data+(bp)+(di))的内容送到ax

网友(2):

1. 立即数寻址方式例:mov ax,41h;(这个就是立即数)操作数就是41h立即数寻址不执行总线周期,所以执行速度快2. 寄存器寻址方式用寄存器的内容当做操作数来使用例:mov ax,cx寄存器在cpu内部,所以也是不需要执行总线周期滴,执行快***********************下面这些在存储器内的寻址3. 直接寻址方式顾名思义,直接给出了操作数的内存单元地址例:mov ah,[2100h];(就是直接给出偏移地址)数据默认在ds段中的偏移地址,如果在其他段,在指令中加段前缀如mov ah,es:[2100h]*********************4,5,6,7寻址方式的使用,使寻址更加灵活通过寄存器(bx,bp),变址寄存器(si,di)和指令的位移量(disp可以是8位或16位)4. 寄存器间接寻址方式用寄存器的内容作为操作数的存储单元的地址例:mov ah,[bx]可以使用的寄存器有BX,SI,DI,BPBX,SI,DI--->他们在DS段中BP他们在SS段中使用其他段同上使用段前缀这个方式可以使代码更灵活5. 寄存器相对寻址方式例:mov bx,10[si]或mov bx,[si].10或mov bx,[si+10]有点像c语言中的数组或结构体6. 基址变址寻址方式例:mov al,[bx+si]或mov al,[bx][si]7. 相对基址变址寻址方式例 mov al ,[bx+si+10]

网友(3):

不止6个的