首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ARM汇编程序-逻辑控制

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++
   B  FOR_L1  
FOR_END  NOP

   ;while(x<=y)
   ;{  x *= 2;
   ; }
   ; 设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
   ;{  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
   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.2012年4月27
控制流指令
    转移指令(branch)
        说明:无条件转移B,BAL
        举例:    BLABEL        ;LABEL为某个位置
    条件转移
        说明:    BEQ    相等
            BNE    不等
            BPL    非负
            BMI    负
            BCC    无进位
            BCS    有进位
            BLO    小于(无符号数)
            BHS    大于等于(无符号数)
            BHI    大于(无符号数)
            BLS    小于等于(无符号数)
            BVC    无溢出(有符号数)
            BVS    有溢出(有符号数)
            BGT    大于(有符号数)
            BGE    大于等于(有符号数)
            BLT    小于(有符号数)
            BLE    小于等于(有符号数)
继承事业,薪火相传
返回列表