:/*無輸出*/ :”r”(ttb)

來源:互聯網
上載者:User

 

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   }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.