arm 彙編與c語言
1.text
2.global _start
3_start:
4 LDR R0,=0X56000010 //表示把一個地址寫到某暫存器中
5
6
7 MOV R1,#0X00000400 //R1暫存器值改為0X00000400
8 STR R1,[R0] //把R1的值,存入到R0對應地址空間上(*R0 = R1)
9 LDR R0,=0X56000014 //表示把一個地址寫到某暫存器中
10
11 MOV R1,#0X00000000 //R1暫存器值改為0X00000000
12
13 STR R1,[R0]
14MAIN_LOOP:
15 B MAIN_LOOP //死迴圈
上述arm彙編相當於下面的c語言
#define GPBCON (*(volatile unsigned long *)0X56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
int main()
{
GPBCON =0x00000400;
GPBDAT =0x00000000;
return 0;
}
===================================================
.text
.global _start
_start:
ldr r0,=0x56000010 //WATCHDOG 暫存器地址
mov r1,#0x0
str r1,[r0] //寫入0,禁止WATCHDOG,否則CPU會不斷重啟
ldr sp,=1024*4//設定堆疊,注意:不能大於4kb,因為現在可用的記憶體只有4kb,nand flash 中的程式碼在復位後會移到內部
bl main //呼叫c程式中的main函式
halt_loop:
b halt_loop
=================================================
MOV AL,20H;將8位資料20H傳送到AL暫存器
MOV AL,[2000H];將2000H單元的內容傳送到AL暫存器
如果加了[ ]中括號,就表示括號裡面的是地址,傳送這個地址裡的資料。
如果沒有中括號,就直接傳送這個資料給目標暫存器