立即寻址方式:操作数在指令中给出
注意:只能用于SRC操作数,SRC与DST的字长一致
寄存器寻址方式:操作数在指定的寄存器中
注意:SRC与DST的字长必须一致,CS不能用MOV修改
(以下归纳为存储器寻址方式,地址从内存单元中取出)
直接寻址方式:有效地址EA由指令直接给出
通过给出来的地址得到具体值
注意:
a.隐含的段为数据段(DS)
b.可以使用段跨越前缀,如mov ax,es:[2000h]
c.操作数可由变量表示 如mov ax,word ptr value可以存放字节到字
寄存器间接寻址方式:EA在基址寄存器(BX/BP)或变址寄存器(SI/DI)中
注意:
a.不允许使用AX、CX、DX存放EA,例如:mov ax,[cx]是错误的
b.SRC与DST的字长必须一致
c.如果使用BP基址寄存器,则段为SS(堆载段)
寄存器相对寻址方式:在寄存器间接寻址方式上添加了一个8/16位的偏移量
注意:mov ax,count[si]=mov ax,[count+si]
基址变址寻址方式:基址+变址
注意:必须是一个基址寄存器与一个变址寄存器的组合
相对基址变址寻址方式:在基址变址寻址方式中添加一个8/16位的偏移量
注意:mov ax,mask[bx][si]=mov ax,mask[bx+si]=mov ax,[mask+bx+si]
续-实例代码+表格
data segment
x db 01,02
y db ?,?
z db ?,?
w dw 1234h
data ends
code segment
main proc far
assume cs:code,ds:data
start:
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
mov dx,1234h -----无有效地址
mov cl,ds:[0000h] -----0000h
mov si,0000h
mov di,0002h
mov al,[si] ----0000h
mov [di],al ----无有效地址
add si,1
add di,1
mov al,[si]
mov [di],al
mov si,0000h
mov di,0000h
mov al,x[si]
mov y[di],al
add si,1
add di,1
mov al,x[si] -----0001h
mov y[di],al
mov si,0000h
mov di,0000h
mov bx,0000h
mov bp,0004h
mov al,[bx][si] ----0000h
mov ds:[bp][di],al
add si,1
add di,1
mov al,[bx][si]
mov ds:[bp][di],al
ret
main endp
code ends
end start
指令 | 寻址方式 | 有效地址 |
---|---|---|
MOV DX,1234H | 立即寻址方式 | 无 |
MOV CL,DS:[0000H] | 直接寻址方式 | 0000H |
MOV AL,[SI] | 寄存器间接寻址方式 | 0000H |
MOV [DL],AL | 寄存器寻址方式 | 无 |
MOV AL,X[SI] | 寄存器相对寻址方式 | 0001H |
MOV AL,[BX][SI] | 基址变址寻址方式 | 0000H |