CPU寻址方式--8086为例
首先说明cpu为啥要段基址+段内偏移地址寻址,因为8086地址线20位,所以地址范围=2^20 = 1MB,但是8086寄存器都是16位的,所以用寄存器寻址的话,只能寻2^16 < 2^20,也就是有一部分地址寻不到,所以使用段基址<<<4+段内偏移地址,这样结果就是可以寻址全部地址。
入正题,CPU寻址方式大致分为3种,分别是
1. 寄存器寻址
“数”在寄存器中,直接从寄存器中拿数据。
mov ax,0x10
mov dx,0x9
mov ax,bx
2. 立即数寻址
“数”不在寄存器中,也不在内存区,而是直接给出的一个具体数。
mov ax,0x80 这个同时也是寄存器寻址
3. 内存寻址
内存寻址,寻找的数在内存中。这个数的地址在寄存器中,所以内存寻址仍然要用到寄存器。
内存寻址又可以分为
3.1 直接寻址
操作数给出的作为地址,以【】表示地址
mov ax, [0x1234]
3.2 基址寻址
以bx 或者 bp中数作为偏移地址,ds作为段基址
mov bx,0x10
mov ax,bx 此时 ax = ds:bx
3.3 变址寻址
以si 或者 di中数作为偏移地址,ds作为段基址
mov ax,[ds+si]
3.4 基址变址寻址
基址+变址 即 bx或者bp + si或者di,ds作为段基址
mov ax,[ds:bx+si]
为什么需要这么多寻址方式
因为他们的硬件实现不同,想要不同的效果必须采用不同寻址方式