組合語言常用指令彙總(持續更新)

2021-10-06 21:10:34 字數 2725 閱讀 4312

mov(move) 傳送指令

mov指令是資料傳送指令,也是最基本的程式設計指令,用於將乙個資料從源位址傳送到目標位址(暫存器間的資料傳送本質上也是一樣的)。其特點是不破壞源位址單元的內容。

例如:mov ax,2000h;將16位資料2000h傳送到ax暫存器

mov al,20h;將8位資料20h傳送到al暫存器

mov ax,bx;將bx暫存器的16位資料傳送到ax暫存器

mov al,[2000h];將2000h單元的內容傳送到al暫存器

需要注意的是:

(1)兩個儲存單元之間不能直接傳送資料,即:mov指令只允許乙個運算元在儲存器中。mov [si],[2000h];這是錯誤的

(2)mov指令中立即數不能直接傳送給段暫存器(cs、ds、ss、es)和ip;段暫存器之間不能直接傳送。mov ip,2000 h ;這是錯誤的

(3)cs和ip不能作為目的運算元。mov cs,ax ;這是錯誤的

(4)mov指令中立即數不能作目標運算元。mov 2000h,[si] ;這是錯誤的

push(push onto the stack)進棧

pop(pop from the stack)出棧

push暫存器:將乙個暫存器中的資料入棧

pop暫存器:出棧用乙個暫存器接收資料

xchg(exchange) 交換

是暫存器和暫存器之間,暫存器和記憶體變數之間內容的交換指令,兩個運算元的資料型別要相同,可以是乙個位元組,也可以是乙個字,也可以是雙字。

in(input) 輸入

out(output)輸出

cpu對外設的操作通過專門的埠讀寫指令來完成;

讀埠用in指令,寫埠用out指令。

例子如下:

in al,21h;表示從21h埠讀取一位元組資料到al

in ax,21h;表示從埠位址21h讀取1位元組資料到al,從埠位址22h讀取1位元組到ah

mov dx,379h

in al,dx ;從埠379h讀取1位元組到al

out 21h,al;將al的值寫入21h埠

out 21h,ax;將ax的值寫入埠位址21h開始的連續兩個位元組。(port[21h]=al,port[22h]=ah)

mov dx,378h

out dx,ax ;將ah和al分別寫入埠379h和378h

xlat(translate) 換碼

在彙編中xlat指令的作用就是在bx儲存array的首位址,al儲存array的位置的基礎上,執行xlat指令,將返回值送入al指令中.

指令如下指令後al=5

lea bx,array

mov al,1

xlat ;返回值al=array[al]

lea(load effective address)有效位址送暫存器

lds(load ds with pointer)指標送暫存器和ds

les(load es with pointer)指標送暫存器和es

mov 和 lea 的區別

mov ecx,[eax+0x30]表示先運算eax+0x30得到乙個結果,以這個結果為位址找乙個ecx長度的記憶體數賦給ecx

lea ecx,[eax+0x30]表示先運算eax+0x30得到乙個結果,把這個結果(mov時位址)賦給ecx

lahf(load ah with flags) 標誌送ah

sahf(store ah with flags)ah送標誌暫存器

pushf(push the flags) 標誌進棧

popf(pop the flags)標誌出棧

add 加法

adc(add with carry)帶進製加法

inc(increment) 加1

sub(subtract)減法

sbb(subtract with borrow)帶借位減法

dec(decrement)減1

neg(negate)求補

cmp(compare)比較

mul(unsigned multiple) 無符號乘法

imul(signed multiple)帶符號乘法

div(unsigned divide)無符號除法

idiv(singed divide)帶符號除法

cbw(convert byte to word)位元組轉換為字

cwd(convert word to double word)字轉換為雙字

and 邏輯與

or 邏輯或

not 邏輯非

xor 異或

test 測試

test ax,bx 與 and ax,bx 命令有相同效果,只是test指令不改變ax和bx的內容,而and指令會把結果儲存到ax中。

test命令將兩個運算元進行邏輯與運算,並根據運算結果設定相關的標誌位。但是,test命令的兩個運算元不會被改變。運算結果在設定過相關標記位後會被丟棄。

shl(shift logical left)邏輯左移

sal(shift arithmetic left)算術左移

shr(shift logical right) 邏輯右移

sar(shift arithmetic right)算術右移

rol(rotate left) 迴圈左移

ror(rotate right)迴圈右移

rcl(rotate left through carry)帶進製迴圈左移

rcr(rotate right through carry)帶進製迴圈右移

組合語言常用指令

上次說到組合語言十分重要,所以又為了避免忘記,貼上一些常用彙編指令 mov 指令範例 mov r1,8 mov r2,r1 mov r3,10 mvn 傳送取反賦值 mvn r1,0b10 mvn r2,5 mvn r3,r1 sub 減法 目的暫存器 被減數 不能是立即數 減數 mov r2,4 ...

組合語言常用指令

第一部分 組合語言 組合語言是二進位制指令的文字形式,與二進位制指令是一一對應的關係 彙編 指令 是機器碼的助記符,經過彙編器編譯後,由cpu執行。彙編 偽指令 用來指導指令執行,是彙編器的產物,最終不會生成機器碼。常用彙編指令 1 相對跳轉指令 b bl 這兩條指令的不同之處在於bl指令除了跳轉之...

組合語言轉移指令規則彙總

摘要 雖然jmp指令提供了控制轉移,但是它不允許進行任何複雜的判斷。80x86條件跳轉指令提供了這種判斷。條件跳轉指令是建立迴圈和實現其他條件執行語句,如if endif的基本要素。條件跳轉指令檢查乙個或多個標誌位,判斷它們是否匹配某個特殊條件 就像setcc指令 如果標誌匹配成功,該指令就將控制轉...