寻址方式的速度是由指令周期决定的,写一个效率高的程序也就需要了解这些不同指令执行的速度
指令周期:是取出一条指令并执行这条指令的时间
查询指令执行的表可以看出寻址方式排序如下
指令周期
1.寄存器寻址 2
2.立即数寻址 4
3、寄存器间接寻址方式 13
4、直接寻址方式 14
5、基址变址寻址方式 16
6、寄存器相对寻址方式 17
7、相对基址变址寻址方式 20
1寄存器寻址
操作数在CPU的寄存器中,指令指定寄存器号,这种寻址速度快,它不需要访问存储器中的操作数,因为所有的操作数都在寄存器中,例子如下
mov ds,ax
2立即数寻址
操作数在指令中,紧跟在操作码之后,这样的操作数成为立即数
mov ax,1122h
3寄存器间接寻址方式
操作数在存储器中,操作数有效地址在SI,DI,BX,BP这四个寄存器之一中,在默认情况下,如果有效地址在SI,DI和BX中,则以DS段寄存器之内容为段值。如果有效地址在BP中,则以SS段寄存器之内容为段值
mov ax,[di] mov ax,[si] mov ax,[bx] 默认在ds中
mov ax,[bp] 默认在ss中
4直接寻址方式
操作数在存储器中,操作数的地址中的偏移量直接跟在操作码之后,默认情况下基址存放在DS中,这个时候不需要加前缀,如果是加了别的前缀,如ss,则表示基址在ss中
mov ax,[1000h]
5基址变址寻址方式
操作数在存储器中,操作数的地址在基址寄存器和变址寄存器中
bx+si/di bp+si/di
mov ax,[bx+si] / [bx+di] /[bp+si] /[bp+di]
6寄存器相对寻址方式
操作数在存储器中,操作数有效地址在SI,DI,BX,BP这四个寄存器加上偏移量
mov ax,[bx+offset] / [bp+offset] /[si+offset] / [di+offset]
7相对基址变址寻址方式
操作数在存储器中,操作数的地址在基址寄存器和变址寄存器加上偏移量
mov ax,[bx+si+offset] /[bx+di+offset] /[bp+si+offset] /[bp+di+offset]