歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

ARM匯編程序---1-100累加和一個簡單排序

嵌入式初學者,這學期剛開課,學起來感覺很不錯。

第一個累加和的源碼:

    AREA TEXT,CODE,READWRITE 
    ENTRY 
    MOV R0,#100  ;循環數目 
    MOV R1,#0        ;初始化數據 
LOOP 
    ADD R1,R1,R0  ;將數據進行相加,獲得最後的數據 
    SUBS R0,R0,#1 ;循環數據R0減去1 
    CMP R0,#0        ;將R0與0比較看循環是否結束 
    BNE LOOP        ;判斷循環是否結束,接受則進行下面的步驟   
    LDR R2,=RESULT 
    STR R1,[R2] 
RESULT 
    DCD 0 
STOP 
    B STOP 

第二個排序的源碼附上:

    ;排列算法:先將所有的數據與第一個進行比較,最後取出最小的數據放到第一個內存單元中 
    ;然後再從第二個內存單元開始進行比較,將第二小的數據放到第二個內存單元中, 
    ;以此內推則能將十個數據進行排列。 
    AREA TEXT,CODE,READWRITE 
    ENTRY 
    LDR R0,=DATA      ;獲得DATA數據的起始地址 
    MOV R1,R0     
    MOV R5,#9            ;開始的循環數目是10次,所以應該從9開始 
    MOV R6,R5 
COMPARE 
    ADD R0,R0,#4      ;將R0所存儲的地址+4表示為下一個要比較的數的地址   
    SUB R6,R6,#1  ;循環1次減1 
    LDR R2,[R1]  ;將放在寄存器中的數據取出進行大小比較 
    LDR R3,[R0] 
    CMP R3,R2 
    MOVCC R7,R2  ;如果後面的地址的數值比前一個小則交換他們的數據 
    MOVCC R2,R3 
    MOVCC R3,R7 
    STR R2,[R1]  ;將數據存儲到相應的內存單元中 
    STR R3,[R0] 
    CMP R6,#0            ;看每次的循環是否結束 
    BNE COMPARE 
    ADD R1,R1,#4      ;每次循環結束以後將初始的指向的內存地址後移一個單元 
    MOV R0,R1            ;重新初始化上個循環中的寄存器中保存的地址 
    SUB R5,R5,#1      ;每次循環以後上面在以後的循環中的次數都會減1 
    MOV R6,R5 
    CMP R5,#0    ;判斷所有的循環是否結束 
    BNE COMPARE 
DATA 
    DCD 9,4,6,7,8,1,3,2,0,5 
STOP 
    B STOP 

 

Copyright © Linux教程網 All Rights Reserved