谁能解释一下cpu寻址方式吗?
答案:2 悬赏:70 手机版
解决时间 2021-02-27 08:53
- 提问者网友:却不属于对方
- 2021-02-26 21:30
谁能解释一下cpu寻址方式吗?
最佳答案
- 五星知识达人网友:冷風如刀
- 2021-02-26 22:41
8086/8088 CPU寻址方式:
1. 立即寻址
立即寻址方式的操作数直接存放在指令中,它紧跟在操作码之后,作为指令的一部分存放在代码段中.
例如:
MOV AL,66H
MOV AX,6677H
2. 直接寻址
直接寻址方式中操作数地址的16位偏移量(有效地址)直接存放在指令操作码之后,它和操作码一起存放在代码段中.
默认情况下,基址存放在DS中.
例如:
mov ax,[4000h]
mov ax,value (如果我们在前面定义了"符号地址"value=4000h,那么这句和上面的是一样的)
3. 寄存器寻址
★16位时,可以使用ax,bx,cx,dx,bx,bp,si,di中的任何一个.
★8位时,可以使用ah,al;bh,bl;ch,cl;dh,dl中的任何一个.
例如:
mov ds,ax
4. 寄存器间接寻址
(1)以bx,si,di作为间址寄存器时,操作数在数据段中,所以用DS作为基址寄存器.
(2)以bp作为间址寄存器时,操作数在堆栈段中,所以使用SS作为基址寄存器.
例如:
mov ax,[bx] 或 mov ax,[si] 或 mov ax,[di]-----DS基址
mov ax,[bp]-----SS基址
5. 寄存器相对寻址方式
(1)基址相对寻址
★ 对于BX寄存器来说,使用DS作为基址寄存器.
例如:
mov ax,count[bx] 或 mov ax, [count+bx]------DS基址
上面2条指令作用是相同的.
★ 对于BP寄存器来说,使用SS作为基址寄存器.
例如:
mov ax,count[bp] 或 mov ax, [count+bp]------SS基址
(2)变址相对寻址
使用2个变址寄存器si,di.
例如:
mov ax, count[si] 或 mov ax,[count+si]
mov ax, count[di] 或 mov ax,[count+di]
6. 基址变址寻址
★ EA=DS*16+BX+SI(或DI)
★ EA=SS*16+BP+SI(或DI)
例如:
movax,[bx][si] 或 movax,[bx+si] '原变址寻址
movax,[bx][di] 或 movax,[bx+di] '目的变址寻址
7. 相对基址变址寻址
★ EA=DS*16+BX+SI(或DI)+DISP(8位或16位偏移量)
★ EA=SS*16+BP+SI(或DI)+DISP(8位或16位偏移量)
例如:
mov ax, [bx+si+count]
小结:
上面的情况是没有出现"段超越前缀"时的情况.
1. 立即寻址
立即寻址方式的操作数直接存放在指令中,它紧跟在操作码之后,作为指令的一部分存放在代码段中.
例如:
MOV AL,66H
MOV AX,6677H
2. 直接寻址
直接寻址方式中操作数地址的16位偏移量(有效地址)直接存放在指令操作码之后,它和操作码一起存放在代码段中.
默认情况下,基址存放在DS中.
例如:
mov ax,[4000h]
mov ax,value (如果我们在前面定义了"符号地址"value=4000h,那么这句和上面的是一样的)
3. 寄存器寻址
★16位时,可以使用ax,bx,cx,dx,bx,bp,si,di中的任何一个.
★8位时,可以使用ah,al;bh,bl;ch,cl;dh,dl中的任何一个.
例如:
mov ds,ax
4. 寄存器间接寻址
(1)以bx,si,di作为间址寄存器时,操作数在数据段中,所以用DS作为基址寄存器.
(2)以bp作为间址寄存器时,操作数在堆栈段中,所以使用SS作为基址寄存器.
例如:
mov ax,[bx] 或 mov ax,[si] 或 mov ax,[di]-----DS基址
mov ax,[bp]-----SS基址
5. 寄存器相对寻址方式
(1)基址相对寻址
★ 对于BX寄存器来说,使用DS作为基址寄存器.
例如:
mov ax,count[bx] 或 mov ax, [count+bx]------DS基址
上面2条指令作用是相同的.
★ 对于BP寄存器来说,使用SS作为基址寄存器.
例如:
mov ax,count[bp] 或 mov ax, [count+bp]------SS基址
(2)变址相对寻址
使用2个变址寄存器si,di.
例如:
mov ax, count[si] 或 mov ax,[count+si]
mov ax, count[di] 或 mov ax,[count+di]
6. 基址变址寻址
★ EA=DS*16+BX+SI(或DI)
★ EA=SS*16+BP+SI(或DI)
例如:
movax,[bx][si] 或 movax,[bx+si] '原变址寻址
movax,[bx][di] 或 movax,[bx+di] '目的变址寻址
7. 相对基址变址寻址
★ EA=DS*16+BX+SI(或DI)+DISP(8位或16位偏移量)
★ EA=SS*16+BP+SI(或DI)+DISP(8位或16位偏移量)
例如:
mov ax, [bx+si+count]
小结:
上面的情况是没有出现"段超越前缀"时的情况.
全部回答
- 1楼网友:蓝房子
- 2021-02-27 00:11
直接寻址,直接给出数据的地址
寄存器间接寻址,数据的地址在寄存器中
寄存器相对寻址方式,数据的地址是寄存器的值再加上一个偏移量
基址变址寻址方式,数据的地址是两个寄存器的值相加
相对基址变址寻址方式 ,有点像以上两种的综合,数据的地址是两个寄存器的值相加,再加上一个偏移量
所以,有相对就有偏移量
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯