汇编数据寻址方式

数据寻址方式

立即寻址

操作数直接包含在指令机器码中紧跟在操作码的后面

例如

解释:把后面的操作数传送给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+bs
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

猜你喜欢

转载自www.cnblogs.com/chenguosong/p/11764400.html