ustcanycall / OS

0 stars 0 forks source link

调研4 #5

Open ustcanycall opened 10 years ago

ustcanycall commented 10 years ago

用ARM写一个冒泡排序

实验平台

本次实验我选择的是CodeWarrior for ARM Developer Suite v1.2 , 简称ADS 1.2 .它支持ARM10之前的所有ARM 系列微控制器,支持软件调试及JTAG硬件仿真,支持汇编,c和c++源程序。 qq20131103214615

实验代码

    AREA Sort,CODE,READONLY     
    ENTRY                  
start                       
    MOV R4,#0               
    LDR R6,=src               
    ADD R6,R6,#len              
outer                        
    LDR R1,=src           ;R1记录内循环的次数         
inner                         
    LDR R2,[R1]           ;R2,R3为进行比较的两个数        
    LDR R3,[R1,#4]           
    CMP R2,R3            ;进行两个数的比较    
    STRGT R3,[R1]       ;交换两个数据     
    STRGT R2,[R1,#4]             
    ADD R1,R1,#4                  
    CMP R1,R6            ;R6记录排序数据的末尾        
    BLT inner               

    ADD R4,R4,#4        ;R4记录外层循环的次数          
    CMP R4,#len              
    SUBLE R6,R6,#4         
    BLE outer              

    AREA Array,DATA,READWRITE  
src DCD 7,29,87,43,11,23,13011042         
len EQU 7*4  

寄存器的使用状况

在这段代码中使用了五个通用寄存器,R1,R2,R3,R4,R6. R1记录冒泡排序中内循环的次数 R2,R3记录两个相邻需要比较的数 R4记录冒泡排序外层循环的次数 R6记录排序数据的末尾

运行情况

运行前内存数据: 从0x8048到0x8064为7个数据,没四个字节为一个数据,此时数据是乱序的 qq20131103220211

运行后内存数据: 从0x8048到0x8064为7个数据,没四个字节为一个数据,此时数据已经按照从小到大被排列 qq20131103220234