CPU寻址方式

寻址方式:表示指令中操作数所在的真实位置,说白了就是CPU怎么去找指令中的数据

总共七种寻址方式,其中 直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对基址加变址寻址 有一个共同的特征,就是操作数最终是存在内存中的,区别在于内的地址到底是怎么放的

1. 立即寻址(不用寻址)

操作数直接放在指令中,作为指令的一部分存放在代码段中。

MOV AX, 1234H      ; 其中,源操作数1234H直接放在了指令中

2. 寄存器寻址(到寄存器中找)

操作数放在寄存器中,寄存器标识作为指令的一部分。CPU从寄存器中获取数据比内存中快的多,所以寄存器寻址是一种非常常见的寻址方式。

MOV AX, BX              ; 该条指令中,源操作数和目的操作数都是放在寄存器中的

3. 直接寻址(直接给出内存地址)

操作数在内存中,将操作数的有效地址(EA)直接放在指令中,形式:[操作数地址]

MOV AX,[2345H]       ; 将地址 DS:[0001 2345H] 所指向的数据放入目标寄存器中
MOV ES:[5678H], BL    ; 源操作数是寄存器寻址,目的寄存器是直接寻址

通常可见到这样的指令形式: MOV AX, num  
其中,num表示的是高级语言中的变量名,比如C语言中 short num = 12H。则上述指令相当于将 num 的值 12H 放入目标寄存器AX中

4. 寄存器间接寻址

操作数在内存中,将操作数的有效地址(EA)放到寄存器中

ADD AX,[BX]         ; 将BX寄存器所标识的地址中的值,累加到AX寄存器中,源操作数采用的是寄存器间接寻址方式

5. 寄存器相对寻址(相对间接)

操作数在内存中,操作数的有效地址是一个基址(BX,BP)或变址寄存器(SI, DI)的内容加上指令中给定的位移量之和

MOV AX, [DI+1223H]  ; DI + 1234H表示的就是操作数的有效地址

注意: MOV AX, [SI+3] 和 MOV AX, 3[SI]是等价的, 即位移可以不卸载方括号中

6. 基址加变址寻址(基址加编址间接寻址)

操作数在内存中,操作数的有效地址由基址寄存器(BX, BP)之一的内容与变址寄存器(SI, DI)之一的内容相加得到

MOV AX, [BX+DI]      ; BX是基址寄存器 DI是变址寄存器

注意:MOV AX,[BX+DI] 与 MOV [DI][BX] 是等价的

7. 相对基址加变址寻址

操作数在内存中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容及指令中给定的位移量相加得到

MOV AX, [BX+DI-2]    ; 源操作数是相对基址加变址寻址

 




发表评论

电子邮件地址不会被公开。 必填项已用*标注