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語言oop

#define GPBCON        (*(volatile unsigned long *)0X56000010)
#define GPBDAT        (*(volatile unsigned long *)0x56000014)內存

int main()
{
    GPBCON     =0x00000400;
    GPBDAT    =0x00000000;
    return 0;
}flash

===================================================循環

.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寄存器 
若是加了[ ]中括號,就表示括號裏面的是地址,傳送這個地址裏的數據。
若是沒有中括號,就直接傳送這個數據給目標寄存器語言

相關文章
相關標籤/搜索