嵌入式初學者,這學期剛開課,學起來感覺很不錯。
第一個累加和的源碼:
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