常用彙編指令

2021-07-17 03:04:28 字數 2110 閱讀 6918

1、加減指令

2、adr指令

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

3、cmp

假設現在ax暫存器中的數是0002h,bx暫存器中的數是0003h。

執行的指令是:cmp ax, bx

執行這條指令時,先做用ax中的數減去bx中的數的減法運算。

列出二進位制表示式子:

0000 0000 0000 0010

- 0000 0000 0000 0011

_________________________________

(借位1) 1111 1111 1111 1111

所以,運算結果是 0ffffh

根據這個結果,各標誌位將會被分別設定成以下值:

cf=1,因為有借位

of=0,未溢位

sf=1,結果是負數

zf=0,結果不全是零

還有af, pf等也會相應地被設定。

cmp 比較指令做了減法運算以後,根據運算結果設定了各個標誌位。

標誌位設定過以後,0ffffh這個減法運算的結果就沒用了,它被丟棄,不儲存。

執行過了cmp指令以後,除了cf,zf,of, sf,等各個標誌位變化外,其它的資料不變。

對照普通的減法指令 sub ax, bx,它們的區別就在於:

sub指令執行過以後,原來ax中的被減數丟了,被換成了減法的結果。

cmp指令執行過以後,被減數、減數都保持原樣不變。

4、bne tst  beqbne裡的1b是向後跳轉到區域性標籤1處執行,b表示backward,例如:

對應的還有bne 1f(向前跳到區域性標籤1處執行)

1: ;a

cmp r0, #0

beq 1f ; r0==0那麼向前跳轉到b處執行

bne 1b ; 否則向後跳轉到a處執行

1: ;b

1b,1f裡的b和f表示backward和forward,1表示區域性標籤1

tst指令是資料處理指令,用於把乙個暫存器的內容和另乙個暫存器的內容或立即數進行

按位的與運算

,並根據運算結果更新cpsr中條件標誌位的值。 

例如:tst r1,#%1用於測試在暫存器r1中是否設定了最低位。

beq指定是

跳轉指令,但是跳轉要滿足一定的條件,例:cmp 

r1,#0 

beq  label 

即當r1和0相等的時候程式跳到標號label處執行

4、控制流指令轉移指令(branch)

說明:無條件轉移b,bal

舉例: 

b label 

; label為某個位置

條件轉移

說明: 

beq 

相等bne 

不等bpl 

非負bmi 

負bcc 

無進製bcs 

有進製blo 

小於(無符號數)

bhs 

大於等於(無符號數)

bhi 

大於(無符號數)

bls 

小於等於(無符號數)

bvc 

無溢位(有符號數)

bvs 

有溢位(有符號數)

bgt 

大於(有符號數)

bge 

大於等於(有符號數)

blt 

小於(有符號數)

ble 

小於等於(有符號數)

常用彙編指令

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

常用彙編指令

1 資料傳送指令 mov move r1,r2 r1 r2 move r1,4096 r1 4096 2 偽指令ldr 用於將乙個大於八位的資料裝入暫存器 ldr r1,0x123456789 r1 0x123456789 ldr r1,label 獲取絕對位址,即label的位址 label 3 ...

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

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