|
ARM嵌入式汇编语言程序设计重点 
实验目的 
 熟悉ARM微处理器指令系统; 
 
学习ARM嵌入式汇编程序设计的编程重点。 
实验设备 
 硬件:PC机。 
 
软件:ADS1.2集成开发环境,Windows 2000/XP/2003。 
实验内容 
 了解多分支程序的编写方法;  
掌握ARM程序的运行和调试。 
实验原理 
(1)Arm 体系结构3种执行流程 1 顺序执行:在正常执行过程中,每执行一条ARM指令,程序计数器(PC)的值加4个字节;每执行一条Thumb指令,程序计数器 (PC)加2个字节。整个过程按顺序执行。 2 跳转执行:程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行。 3 异常中断执行:在进入异常中断处理程序时,要保存被中断程序的执行现场,从异常中断
处理程序退出时,要恢复被中断程序的执行现场。  
(2)跳转表 
多分支结构是程序中常见的结构,若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序。注意:读跳转表时不要超过表的末端,检查超限是必需的。例如: 
BL  JUMPTABLE … 
JUMPTABLE ADR R1,SUBTABLE 
            CMP R0,#SUBMAX   ;检查超限 
            BHI stop             ;若超限,则程序结束             LDR PC,[R1,R0,LSL #2];否则跳转到表中 stop  MOV R0,#0X18  
LDR R1,=0X20026 
SWI 0x123456 
SUBTABLE DCD SUB0            ;子程序表入口            DCD SUB1            DCD SUB2 
实验参考程序 
利用跳转表实现多分支转移。 
AREA JUMP,CODE,READONLY;设置本段程序的名称(JUMP)及属性 
num EQU 2         ;跳转表中的子程序个数       ENTRY      ;程序执行的入口点 
START  ;设置3个参数,然后调用子程序arithfunc,进行算术运算       MOV R0,#0 
      MOV R1,#3       MOV R2,#2 
      BL arithfunc  ;调用子程序arithfunc 
STOP  ;调用angel_SWIreason_ReportException,从应用程序中退出       MOV R0,#0X18 
      LDR R1,=0X20026       SWI 0x123456 
arithfunc        ;子程序arithfunc入口点 
      CMP R0,#num;判断选择子程序的参数是否在有效范围之内       MOVHS PC,LR 
      ADR R3,JumpTable;读取跳转表的基地址 
      LDR PC,[R3,R0,LSL #2];根据参数R0的值跳转到相应的子程序 
;跳转表JumpTable中保存了各个子程序的地址, 在这里有两个子程序DoAdd和DoSub ;当参数R0为0时上面的代码将选择DoAdd ;当参数R0为1时上面的代码将选择DoSub JumpTable 
      DCD DoAdd       DCD DoSub 
DoAdd 子程序DoAdd执行加法操作       ADD R0,R1,R2 
      MOV PC,LR 
DoSub 子程序DoSub执行减法操作       SUB R0,R1,R2       MOV PC,LR       END;结束汇编 
实验思考题 
1. 修改下列C程序段代码为ARM汇编程序段代码。 
   do {  x--; } while(x>0);   这里设x存放在R0 中(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   
2. 编写一简单ARM汇编程序段,实现1+2+…+100的运算。   AREA EXAMPLE1, CODE,READONLY  ;定义一个代码段,名称为EXAMPLE1   ENTRY                             ;入口 
  MOV     R0,#0                     ;给R0赋值为0 
  
MOV   R1,#0                       ;用R1来存放1~100的总和,初始化为0 
START  ADD  R0,R0,#1               ;用来判断终止的,每次加1        ADD  R1,R1,R0                ;从1加到100       
       CMP  R0,#100             ;执行R0-100的操作,但不保存,只影响CPSR的值        BLT  START              ;带符号数小于时跳转到START处执行 STOP   B     STOP              ;死循环        END 
全面承快速样板及小批量贴片,后焊加工业务,样板2-3天完成,加快24小时, BGA反修,植球及更换。
同样的业务我们比质量;同样的质量我们比价格;同样的价格我们比时间,同样的时间我们比服务;同样的服务我们比信誉,麦斯艾姆,你值得信赖的样板贴片专家。 |
|