1 資料傳送 MOV
MOV dest,src
(1)兩個操作數類型(長度)相同
(2)不能同為存儲操作數
(3)立即數不能作為目的操作數
(4)CS不能作為目的操作數,CS存的是段基址
(5)兩個操作數不能同為段寄存器
2尋址方式
(1)直接尋址
data segment
x db 2,3
y dw 100,50
data ends
設x的偏移位址為0000H那x的第一個資料為2,第二個資料為3
2 0000H
3 0001H
100 0002H
50 0004H
MOV AL,X 等價于 MOV AL,[0000H]
其中基址又DS提供
MOV AX,x 錯誤指令 AX兩個位元組,而x為一個位元組,類型不符合
MOV AX,WORD PTR x 類型PTR強制轉換,将x中的第一個位元組存入AL,第二個位元組存入AH
(2)間接尋址
僅限于BX,BP,SI,DI
基址寄存器BX,BP
變址寄存器SI,DI
MOV AX,[BX][SI]
兩個操作數不能同時為記憶體單元
MOV X,X+1 錯誤兩操作數均為記憶體操作數
MOV X,[BX]
MOV [DI],[SI] 都是此錯誤
操作類型要明确
設(BX)=2000H
MOV [BX],-4 沒有指明長度,無法翻譯
3.LEA指令和OFFSET
LEA REG16,MEM 把源操作的偏移位址存入目的操作數中
REG16為16位通用寄存器,MEM為存儲器操作數。
OFFSET 位址操作運算符
例子:
x db 1,2,3
y db 3 DUP(?)
把X開始的三個數依次傳入y中
解法一:
mov al,x
mov y,al
mov al,x+1
mov y+1,al
mov al,x+2
mov y+2,al
這種方法費事,很麻煩
解法二
lea si,x
lea di,y;将x,y位址傳送到si,di
mov cx,3;計數器,循環結束控制
next: mov al,[si]
mov [di],al
The article write by nealgavin