彙編指令的禁忌整理

2021-10-09 20:29:18 字數 1004 閱讀 4730

雙運算元指令不允許兩個運算元同時為段暫存器或儲存器運算元。

**段暫存器cs和立即數均不能作為目的運算元,立即數也不能傳送到段暫存器中。

(立即數不能傳送到段暫存器中,這是8086的硬體設計導致的問題,咱們只要知道這樣不行就可以了)

立即數要想傳到段暫存器中,可以使用間接傳輸法。

mov bx,1000h

mov ds,bx

**段暫存器cs不能做目的運算元也可以理解。8086cpu有4個段暫存器,其中cs用來放指令的段位址。可以把他當成比較特殊的乙個。

雙運算元中的兩個運算元必須型別匹配,即同時是位元組或者字

兩個運算元中至少有乙個運算元的型別要明確,不能出現二義性。立即數傳送給儲存器時,立即數的型別定義不明確(立即數沒有資料型別),儲存器運算元的型別需要使用操作符來明確。暫存器都有明確的型別,所以不用擔心。

如:mov word ptr ds:[0],1

是正確的

mov cl 0004h這個語句具有二義性

mov cl 04h正確

mov cl 4h也正確,8086會自動給你補全成04h

mov ax 03ffh顯然也是正確的。

能放在[ ]裡面的暫存器只有4個,bx,bp,si,di

也就是說,涉及記憶體定址的暫存器只有4個。

因此mov cx,[ax] 很明顯錯了

有一些可以參考的博文

判斷指令是否正確

判斷正誤題目

先目的後源,目的運算元不能是立即數。

push和pop都是對字操作的

因此push al

是錯誤的

bx和bp,si和di不能同時出現

參考bxbp sidi不能同時出現

in和out指令

in和out接收和傳送資訊只能用ax或al

注意in和out的方向

in 90h,ax (x)

in al,dx (√)

先這些,以後慢慢補充,這個感覺可以寫很多呢

lea si,es:[di+2];

逆向 彙編指令整理

跳轉指令 1 無條件跳轉 jmp 2 根據 cx ecx 暫存器的值跳轉 jcxz cx 為 0則跳轉 jecxz ecx 為 0則跳轉 3 根據 eflags標誌位跳轉 je 等於則跳轉 jne 不等於則跳轉 jz 為 0則跳轉 jnz 不為 0則跳轉 js 為負則跳轉 jns 不為負則跳轉 jc...

曾經彙編常用指令整理筆記

ah al ax accumulator 累加暫存器 bh bl bx base 基址暫存器 ch cl cx count 計數暫存器 dh dl dx data 資料暫存器 sp stack pointer 堆疊指標暫存器 bp base pointer 基址指標暫存器 si source ind...

mo彙編指令 彙編指令大全

一 資料傳輸指令 它們在存貯器和暫存器 暫存器和輸入輸出埠之間傳送資料.1.通用資料傳送指令.mov 傳送字或位元組.movsx 先符號擴充套件,再傳送.movzx 先零擴充套件,再傳送.push 把字壓入堆疊.pop 把字彈出堆疊.pusha 把ax,cx,dx,bx,sp,bp,si,di依次壓...