ARM匯程式設計序 邏輯控制

2021-08-07 16:59:17 字數 2916 閱讀 9331

area example4,code,readonly ; 宣告**段example4

entry 

; 標識程式入口

code32 

; 宣告32位arm指令

start 

; if(x>y) z=100;

;  else  z=50;

; 設x為r0,y為r1,z為r2 (x、y、z均為無符號整數)

mov 

r0,#76 

; 初始化x的值

mov 

r1,#243 

; 初始化y的值

cmp 

r0,r1 

; 判斷x>y?

movhi r2,#100 

; x>y條件正確,z=100

movls r2,#50 

; 條件失敗,z=50

; for(i=0; i<10; i++)

; ; 設x為r0,i為r2 (i、x均為無符號整數)

mov 

r0,#0 

; 初始化x的值

mov 

r2,#0 

; 設定i=0

for_l1 

cmp 

r2,#10 

; 判斷i<10?

bhs 

for_end 

; r2>=10,退出迴圈

add 

r0,r0,#1 ; 迴圈體,x++

add 

r2,r2,#1 ; i++

b for_l1 

for_end 

nop; while(x<=y) 

; ; 設x為r0,y為r1 (x、y均為無符號整數)

mov 

r0,#1 

; 初始化x的值

mov 

r1,#20 

; 初始化y的值

b while_l2 ; 首先要判斷條件

while_l1 mov 

r0,r0,lsl #1 ; 迴圈體,x *= 2

while_l2 cmp 

r0,r1 

; 判斷x≤y? 

bls 

while_l1 ; 若條件正確,繼續迴圈

while_end nop

; do

;  while(x>0);

; 設x為r0 (x為無符號整數)

mov 

r0,#5 

; 初始化x的值

dowhile_l1 add 

r0,r0,#-1 ; 迴圈體,x--

dowhile_l2 movs r0,r0 

; r0 <= r0,並影響條件碼標誌 

bne 

dowhile_l1 ; 若r0不為0(即x不為0),則繼續迴圈

dowhile_end nop 

; switch(key&0x0f)

; ; 設x為r0,y為r1,key為r2 (x、y、key均為無符號整數)

mov 

r1,#3 

; 初始化y的值

mov 

r2,#2 

; 初始化key的值

switch 

and 

r2,r2,#0x0f ; switch(key&0x0f)

case_0 

cmp 

r2,#0 

; case 0:

case_2 

cmpne r2,#2 

; case 2:

case_3 

cmpne r2,#3 

; case 3:

bne 

case_5 

add 

r0,r2,r1 ;  

x = key + y

b switch_end ;  

break

case_5 

cmp 

r2,#5 

; case  5:

bne 

case_7

sub 

r0,r2,r1 ;  

x = key - y

b switch_end ;  

break

case_7 

cmp 

r2,#7 

; case 7:

bne 

default 

mul 

r0,r2,r1 ; 

x = key * y

b switch_end  ;  

break

default 

mov 

r0,#168 

; default: x = 168

switch_end nop

halt 

b halt 

end 

附:1.2023年4月27

控制流指令

轉移指令(branch)

說明:無條件轉移b,bal

舉例: 

b label 

; label為某個位置

條件轉移

說明: 

beq 

相等bne 

不等bpl 

非負bmi 

負bcc 

無進製bcs 

有進製blo 

小於(無符號數)

bhs 

大於等於(無符號數)

bhi 

大於(無符號數)

bls 

小於等於(無符號數)

bvc 

無溢位(有符號數)

bvs 

有溢位(有符號數)

bgt 

大於(有符號數)

bge 

大於等於(有符號數)

blt 

小於(有符號數)

ble 

小於等於(有符號數)

ARM匯程式設計序學習

part1 匯程式設計序框架 一 完整框架 section.data 初始化的資料 section.bss 未初始化的資料 section.text global start start 入口 彙編 二 簡化框架 text global start start 彙編 注 以上簡化版為常用框架 par...

ARM學習之ARM匯程式設計序

在arm thumb 組合語言程式中以程式段為單位組織 段可以分為 段 code section 和資料段 data section 乙個匯程式設計序至少應該有乙個 段,當程式較長時,可以分割為多個 段和資料段,多個段在程式編譯鏈結時最終形成乙個可執行的映像檔案。可執行映像檔案的構成 鏈結器根據系統...

ARM匯程式設計序鑑賞 1

area asmembedeedfile code,readonly 定義一段可讀的 區域 export mulcountfunction 輸出函式 mulcountfunction import val 插入變數val mulcountfunction ldr r1,val 取val的暫存器位址,...