ARM汇编程序-逻辑控制

  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++;
   ; }
   ; 设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++
    FOR_L1  
FOR_END  NOP


   ; while(x<=y) 
   ; {  x *= 2;
   ; }
   ; 设x为R0,y为R1 (x、y均为无符号整数)
   MOV  R0,#1  ; 初始化x的值
   MOV  R1,#20  ; 初始化y的值
    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
   ; {  x--;
   ; } 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)
   ; {  case  0:
      case  2:
      case  3:  x = key + y;
                break;
      case  5:  x = key - y;
                break;
      case  7:  x = key * y;
                break;
      default:  x = 168;
                break;      
   ; }
   ; 设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
    SWITCH_END ;   break
   
CASE_5  CMP  R2,#5  ; case  5:
   BNE  CASE_7
   SUB  R0,R2,R1 ;   x = key - y
    SWITCH_END ;   break
   
CASE_7  CMP  R2,#7  ; case 7:
   BNE  DEFAULT  
   MUL  R0,R2,R1  x = key * y
    SWITCH_END  ;   break
   
DEFAULT  MOV  R0,#168  ; default: x = 168
   
SWITCH_END NOP
   

HALT   HALT  
 
   END 

附:

1.2012年4月27

控制流指令
    转移指令(branch)
        说明:无条件转移B,BAL
        举例:    B LABEL        ; LABEL为某个位置
    条件转移
        说明:    BEQ    相等
            BNE    不等
            BPL    非负
            BMI    
            BCC    无进位
            BCS    有进位
            BLO    小于(无符号数)
            BHS    大于等于(无符号数)
            BHI    大于(无符号数)
            BLS    小于等于(无符号数)
            BVC    无溢出(有符号数)
            BVS    有溢出(有符号数)
            BGT    大于(有符号数)
            BGE    大于等于(有符号数)
            BLT    小于(有符号数)
            BLE    小于等于(有符号数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值