天天看點

彙編基礎知識

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