彙編學習(3)x86常用彙編指令學習

2021-08-31 11:57:29 字數 2548 閱讀 3880

剛學習彙編,菜鳥乙個。記下學習筆記

mov指令:

mov 目標運算元,源運算元;(類似c語言的等於號)

拷貝 源運算元 到 目標運算元。

例如mov eax,ebx

前後的位數(寬度)必須是相同的,8位對應8位,16對應16, 32位對應32位。

(彙編有三種運算元:暫存器運算元,儲存器運算元,立即數。暫存器運算元就是暫存器中的數,儲存器運算元就是記憶體單元中的數,立即數類似高階語言的常量)。

如果源運算元是立即數 ,寫的不是對應的寬度, 會在前面自動補0。

例如mov ax,0x1實際 是 0x0001

源 和 目標 不能同時是 記憶體單元。

目標運算元是 儲存器運算元(即記憶體單元時) 應該註明要操作的大小 例如mov word/dword ptr ds:[記憶體位址],源運算元。 word 可以換成 byte,dword,(dword是32位,word是16位,byte是8位)

幾種定址方式: [ ]內 可以是 立即數,8種通用暫存器,8種暫存器加立即數,8種暫存器×1或者2或者4 (只能是1或者2或者4),或者8種暫存器×1或者2或者4 再加上立即數。

mov指令不改變標誌暫存器的值

add 指令 和 sub 指令:

前後的寬度可以不一樣。

and 指令 ,or 指令 ,xor指令:

將數字轉化為二進位制,對應的位( 每個位)進行 and,or 運算。

and 只有都是 1 結果才是1,or 只要有乙個為1,結果就是1 。

lea(load effect address的縮寫)指令 :

取位址,lea ax,dword ptr ds:[記憶體位址],是將這個記憶體位址送到 ax 中。

inc (increase的縮寫)自增 dec (decrease的縮寫) 自減

類似 c語言 自增自減 inc ax就是 ax加1(十進位制)

push指令 pop指令

push r32/r16/m16/m32/imm8/imm16/imm32(立即數可以是8位的) (r為暫存器,m為記憶體)

pop  r32/r16/m16/m32
push或者pop乙個立即數,則esp減或者加 4,

如果 push ,pop 後面跟的是乙個容器(比如暫存器),esp要根據容器的寬度減,比如push ax,則 esp減2., 或者push dword ptr ds:[address]則esp減4。

pushad 和popad指令

pushad 是將八個通用暫存器的值放到堆疊中。

popad將存在堆疊中的八個暫存器的值恢復給8個通用暫存器。

adc指令(帶進製的加法指令,c是carry)。

相當於add 目標運算元,源運算元+cf標誌的值

目標和源不能同時是記憶體單元,兩天寬度得相等

sbb指令(帶借位的減法,b是borrow)

相當於sub 目標,源+cf(不能同時是記憶體單元,寬度得相同)

xchg指令 (交換目標和源的值)

兩邊得是容器,兩邊可以同時是記憶體單元。

movs指令

類似mov指令 兩邊可以是記憶體單元,但是寬度必須一樣。

movs word ptr ds:[edi],word ptr ds:[esi]
可以縮寫為 movsw

乙個位元組的 可以縮寫為 movsb

雙字的可以縮寫為 movsd。

執行後,edi 和esi 分別 加 或者減 (根據df標誌,如果df是0則加,df為1則減)位元組數,如果是word 就加或者減 2,byte 就是1 dword 就是4.

stos(store string data)指令

將al, ax, eax中的值存到 存到 es:di 中,需要指明 寬度。執行後會根據 df標誌 ,edi 的值 會增加或者減少。

cmp(compare)指令

cmp指令相當於減法,但是運算結果並不儲存。

例如cmp ax,bx相當於 ax-bx ,但是減後的結果不並儲存(即ax的值不變),但是運算結果會影響標誌暫存器的值,通過標誌暫存器的值判斷兩者的大小關係。

test 指令 。

按位(化為二進位制數後)進行 and運算(結果並不儲存,但是會影響標誌暫存器的值)。

常用來判斷 某個暫存器的值是否是0.

例如test ax,ax如果ax 是0,則 zf位是1.

彙編指令msr STM 常用彙編指令

在嵌入式開發中,匯程式設計序常常用於非常關鍵的地方,比如系統啟動時初始化,進出中斷時 的環境保護,恢復等對效能有要求的地方。arm指令集可以分為六大類,分別為資料處理指令 load store 指令 跳轉指令 程式狀態 暫存器處理指令 協處理器指令和異常產生指令。arm指令使用的基本格式如下 opc...

常用彙編指令

1 加減指令 2 adr指令 adr是小範圍的位址讀取偽指令,ldr是大範圍的讀取位址偽指令。可實際上adr是將基於pc相對偏移的位址值或基於暫存器相對位址值讀取的為指令,而ldr用於載入32為立即數或乙個位址到指定的暫存器中。到這兒就會看到其中的區別了。如果在程式中想載入某個函式或者某個在聯接時候...

常用彙編指令

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