arm彙編__asm__(""); 這是什麼文法?特別是裡面的%0和 : /* 無輸出 */ : "r" (ttb) ); 是什麼東西
2012-03-11 23:23提問者:
半面妝680 |瀏覽次數:267次
void mmu_init(void){ unsigned long ttb = 0x30000000;__asm__( "mov r0, #0\n" "mcr p15, 0, r0, c7, c7, 0\n" /* 使無效ICaches和DCaches */ "mcr p15, 0, r0, c7, c10, 4\n" /* drain write buffer on v4 */ "mcr p15, 0, r0, c8, c7, 0\n" /* 使無效指令、資料TLB */ "mov r4, %0\n" /* r4 = 頁表基址 */這裡的%0是啥????? "mcr p15, 0, r4, c2, c0, 0\n" /* 設定頁表基底位址暫存器 */ "mvn r0, #0\n" "mcr p15, 0, r0, c3, c0, 0\n" "mrc p15, 0, r0, c1, c0, 0\n" /* 讀出控制寄存器的值 */ "bic r0, r0, #0x3000\n" /* ..11 .... .... .... 清除V、I位 */ "mcr p15, 0, r0, c1, c0, 0\n" /* 將修改的值寫入控制寄存器 */ : /* 無輸出 */ : "r" (ttb) ); /* 傳入參數ttb,對應組合語言中的0% */} 滿意回答2012-03-12 10:02
這是gcc嵌入彙編的寫法。後邊的::裡分段指明前面組譯工具中用到的輸入、輸出和需要保護的變數
-
追問
-
那如果要改成ads彙編,請問要怎麼改,能麻煩您改下嗎?謝謝
-
回答
-
void mmu_init(void){ unsigned long ttb = 0x30000000; __asm{ MOV R0, #0 MCR P15, 0, R0, C7, C7, 0 ... MOV R4, ttb ... MCR P15, 0, R0, C1, C0, 0 }}