数据寻址方式
立即寻址
操作数直接包含在指令机器码中紧跟在操作码的后面
例如
解释:把后面的操作数传送给ax,al寄存器
mov ax,0a7fh
mov al,5h
寄存器寻址
操作数是寄存器操作数(16位对16位,8位对8位)
解释:一个寄存器的数给另一个寄存器
mov ax,bx
mov dl,cn
存储器寻址
直接寻址
解释:把存储器里数据段ds(默认)的地址所对应的两个操作数传送给ds构成16位再给ax寄存器
mov ax,[2000h]//通过ds数据段和偏移地址2000h求得物理地址,把该物理地址的内容传送到ax中
非默认时:mov ax,es:[2000h]//指定了数据段
物理地址求法:假如ds=3000h,那么内存地址是ds左移四位加[ ]里面的地址
寄存器间接寻址
[ ]里面的寄存器可以是bx,bp,si,di
bx,si,di对应的数据段寄存器是ds,而bp对应的是ss
mov ax,[bx]//物理地址=ds*16+bx
mov bx,[si]//物理地址=ds*16+si
mov [di],dx//物理地址=ds*16+di 这个是反向传,把寄存器内容传送到内存
mov [bp],bx//物理地址=ss*16+bp
此外可以用除开这几个寄存器之外的寄存器
例如
mov ax,es:[bx]//物理地址=es*16+bx
mov ds:[bp],dx//物理地址+ds*16+bp
相对寄存器寻址
mov ax,3003h[si]//ax<-[si+3003h] 假如ds=3000h 则物理地址=3000h*10h+si+3003H
mov si,08h[bx]//物理地址=ds*16+bx+08h
mov ax,[bx+100h]//物理地址=ds*16+bp+100h
mov al,[bp+o8h]//物理地址=ss*16+bp+08h
mov 0200h[bp],ax//物理地址=ss*16+bp+0200h
基址,变址寻址
ea=基址寄存器+变址寄存器的内容
mov ax,[bx][si]//物理地址=ds*10h+bx+si
相对的基址/变址寻址
在上一个的寻址方式的基础上加或者减16/8位的位移量
mov ax,mask[bx][si]//物理地址=ds*10h+bx+si+mask