College of Computer Science & Technology 第三章 ARM汇编编程 College of Computer Science & Technology
汇编程序设计 程序结构 顺序结构 分支结构 单分支结构 双分支结构 多分支结构 循环结构 子程序结构 顺序结构 顺序处理; 简单的数据转换; 鲁东大学 LUDONG UNIVERSITY 程序结构 顺序处理; 简单的数据转换; 求数据表达式; 特殊功能寄存器的设置等等; ----------------------------------------------- E.g1. 开/关中断 E.g2. 拆字/拼字程序 E.g3. 求S=W-(X*Y+Z-340) 设W、X、Y、Z均为32位带符号数。 顺序结构 分支结构 单分支结构 双分支结构 多分支结构 循环结构 子程序结构 顺序结构
汇编程序设计 程序结构 顺序结构 分支结构 单分支结构 分支结构 双分支结构 多分支结构 循环结构 子程序结构 循环结构 鲁东大学 LUDONG UNIVERSITY 程序结构 B{cond} Label :无条件/条件转移 B Label :无条件跳转到标号处 顺序结构 分支结构 单分支结构 双分支结构 多分支结构 循环结构 子程序结构 B Label ;… Label 分支结构 绕过B指令到标号之间的代码 Bcond Label :满足条件跳转到标号处 不满足条件,顺序执行 Bcond Label ;… Label 循环结构 不满足条件顺序执行 满足条件跳到标号处
汇编程序设计 程序结构 顺序结构 分支结构 单分支结构 分支结构 双分支结构 多分支结构 单分支结构 循环结构 子程序结构 if( 布尔表达式) { 满足条件处理; } if(op1 == op2) then { X=1; Y=2; } 鲁东大学 LUDONG UNIVERSITY 程序结构 ldr r0, = op1 ldr r1,[r0] ldr r0, = op2 ldr r2,[r0] cmp r1,r2 beq case_do b case_not_do case_do ldr r0, = x mov r1,#1 str r1,[r0] ldr r0, =y mov r1,#2 case_not_do 顺序结构 分支结构 单分支结构 双分支结构 多分支结构 循环结构 子程序结构 ldr r0, = op1 ldr r1,[r0] ldr r0, = op2 ldr r2,[r0] cmp r1,r2 bne next ldr r0, = x mov r1,#1 str r1,[r0] ldr r0, =y mov r1,#2 next 分支结构 单分支结构 采用相反条件 (与原来一样) 的程序结构?
汇编程序设计 程序结构 顺序结构 分支结构 单分支结构 分支结构 双分支结构 多分支结构 循环结构 子程序结构 双分支结构 if(op1 > op2) then { routin1; } Else { routin2; } if( 布尔表达式) { 满足条件处理;} else { 不满足条件的处理;} 鲁东大学 LUDONG UNIVERSITY 程序结构 顺序结构 分支结构 单分支结构 双分支结构 多分支结构 循环结构 子程序结构 分支结构 ;将op1取至r1,op2取至r2 cmp r1,r2 ble routin2 routin1 ;… b exit routin2 exit … 双分支结构 注意:使用无条件转移, 绕过另一个分支,跳出 条件结构
汇编程序设计 程序结构 1、高级语言 嵌套if-else ,实现多分支 顺序结构 分支结构 单分支结构 分支结构 双分支结构 多分支结构 if(op1 > op2) if(x>y) { routin1; } else { routin2; } { routin3; } 鲁东大学 LUDONG UNIVERSITY 程序结构 1、高级语言 嵌套if-else ,实现多分支 顺序结构 分支结构 单分支结构 双分支结构 多分支结构 循环结构 子程序结构 if( 满足条件1) if(满足条件2) {满足条件1&条件2的分支处理} else {满足条件1&!条件2的分支处理} { 不满足条件1的分支处理;} 分支结构 分支1 分支2 多分支结构 分支3
汇编程序设计 程序结构 2、高级语言 switch-case,实现多分支 顺序结构 分支结构 单分支结构 分支结构 双分支结构 多分支结构 鲁东大学 LUDONG UNIVERSITY 程序结构 2、高级语言 switch-case,实现多分支 顺序结构 分支结构 单分支结构 双分支结构 多分支结构 循环结构 子程序结构 利用地址表实现多分支 swtich(条件表达式 ) { case 常量1: proc1; case 常量2: proc2: case 常量3: proc3: …; } 分支结构 分支1 分支2 多分支结构 分支3
汇编程序设计 程序结构 顺序结构 分支结构 单分支结构 分支结构 双分支结构 多分支结构 循环结构 子程序结构 多分支结构 鲁东大学 LUDONG UNIVERSITY 程序结构 利用地址表实现多分支 顺序结构 分支结构 单分支结构 双分支结构 多分支结构 循环结构 子程序结构 地址表实现多分支结构,需要定义一块专门存放各分支入口地址的区域,程序中通过利用条件变量找到对应的地址表单元,取出对应子程序的入口地址赋给PC,达到多分支转移的效果 地址表表首 ADD入口地址 分支结构 偏移量 SUB入口地址 MUL入口地址 多分支结构 DIV入口地址 Example
循环结构程序设计 循环结构程序的组成 初始化部分 循环体 参数修改部分 循环控制部分 为进入下一次循环做准备 计数器 地址指针 寄存器 鲁东大学 LUDONG UNIVERSITY 为进入下一次循环做准备 循环结构程序的组成 初始化部分 循环体 参数修改部分 循环控制部分 计数器 地址指针 寄存器 存储单元 各异 计数器 地址指针 状态位 B条件 初始化 初始化 循环体 循环控制 DO_until While_do 循环体 参数修改 循环控制 参数修改
汇编程序设计 程序结构 顺序结构 分支结构 单分支结构 双分支结构 多分支结构 循环结构 子程序结构 循环结构 sum = 0; for(i =0; i<Num;i++) { sum = sum+i; } 汇编程序设计 鲁东大学 LUDONG UNIVERSITY 程序结构 顺序结构 分支结构 单分支结构 双分支结构 多分支结构 循环结构 子程序结构 ;假设sum 存放在寄存器r1中; ;假设计数器i存在放寄存器r0中; mov r1,#0 mov r0,#Num-1 loop add r1,r1,r0 subs r0,r0,#1 bne loop exit 循环结构
汇编程序设计 程序结构 顺序结构 分支结构 单分支结构 双分支结构 多分支结构 循环结构 子程序结构 循环结构 while( a != b) { if(a>b) a = a-b; else b = b-a; } 汇编程序设计 鲁东大学 LUDONG UNIVERSITY 程序结构 ;假设a 和 b存放 在寄存器r1和r2 loop cmp r1,r2 subgt r1,r1,r2 sublt r2,r2,r1 bne loop 顺序结构 分支结构 单分支结构 双分支结构 多分支结构 循环结构 子程序结构 ;假设a 和 b存放在寄存器 r1和r2 loop cmp r1,r2 beq exit subgt r1,r1,r2 sublt r2,r2,r1 b loop exit ;假设a 和 b存放在寄存器r1和r2 loop cmp r1,r2 beq exit bgt case1 case2 sub r2,r2,r1 b loop case1 sub r1,r1,r2 exit 循环结构