1:C语言例子
冒泡排序
#define N 5
int main(void)
{ int a[N] = {9,5,3,1,7};
int i, j, t;
for (i = 0; i < N-1; i++)
{ for (j = 0; j < N - i - 1; j++)
{ if (a[j] > a[j + 1])
{ t = a[j];
a[j] = a[j + 1];
a[j + 1] = t; }
}
}
}
汇编程序转换
AREA main , CODE READONLY
N EQU 5 // define N = 5
ENTRY ; 程序入口
CODE32 ; 32位数据的ARM指令集
Start
MOV r1 , #N ; //r1 = 5 ;
SUBr1 r1 , #1 ; //减去 1 后 r1 = 4 ; N - 1
MOV r2 , #0 ; // r2 = 0 也就是i变量
LOOPi //大循环i
LDR r0 , = a // r0 = a
MOV r3 , #0 // r3 = 0 也就是变量j
LOOPj //小循环 j
LDR r4 , [r0] //将r0处地址数据加载到r4 也就是 r4 = a[i][0]
LDR r5 , [r0 , #4] //下一个数据的地址
CMP r4 , r5 //比较r4 和 r5 的值的大小
STRGT r5 , [r0 ] // 谁大谁就交换位置 , r5 = r4
STRGT r4 , [r0 , #4 ] // 谁大谁就交换位置 , r4 = r5
SUB r6 , r1 , r2 // r6 = N - 1 - i
ADD r3 , r3 , #1 // r3 = r3 + 1 j++
CMP r6 , r3 // 比较 j 与 N - 1 - i
ADD r0 , r0 , #4 // i = i + 4 偏移四个位置
BGT LOOPj //跳转小循环就j
ADD r2 , r2 , #1 //r2 = r2 + 1 i++
CMP r1 , r2 //比较 i 与 N - 1 的值的大小
BGT LOOPi //跳出大循环i循环
STOP
MOV r0 , #0x18 ; //设置软中断功能号
LDR r1 , =0x20026 ; //设置软中断参数
SWI 0x123456 ; //调用SWI指示完成
AREA Array , DATA , READWRITE
DCD 9 , 5 ,3 , 1 ,7 //五个数据用于仿真测试
END