資源描述:
《RAM匯編語(yǔ)言編程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、RAM匯編語(yǔ)言編程?北京微芯力科技有限公司蘇蘭冬數(shù)據(jù)處理指令∑簡(jiǎn)單的寄存器操作∑立即數(shù)操作∑寄存器移位操作∑設(shè)置條碼∑條碼的使用∑乘法簡(jiǎn)單的寄存器操作?算術(shù)操作?按位邏輯操作?寄存器傳送操作?比較操作簡(jiǎn)單的寄存器操作—算術(shù)操作這類指令對(duì)兩個(gè)32位操作數(shù)進(jìn)行二進(jìn)制算術(shù)操作加減和反向減后者指把操作數(shù)次序顛倒后相減ADDro,r1,r2;r0=r1+r2ADDro,r1,r2;r0=r1+r2+CSUBro,r1,r2;r0=r1-r2SBCro,r1,r2;r0=r1-r2+C-1RSBro,r1,r2;r0=r
2、2-r1RSCro,r1,r2;r0=r2-r1+C-1簡(jiǎn)單的寄存器操作—按位邏輯操作這類指令對(duì)輸入操作數(shù)的對(duì)應(yīng)位進(jìn)行指定的布爾邏輯操作ADDr0,r1,r2;r0=r1andr2ORRr0,r1,r2;r0=r1orr2EORr0,r1,r2;r0=r1xorr2BICr0,r1,r2;r0=r1andnotr2簡(jiǎn)單的寄存器操作—寄存器傳送操作這些指令不用第一操作數(shù)它在匯編語(yǔ)言格式中被省略MOVr0,r2;r0=r2MVNr0r,2;r0=notr2簡(jiǎn)單的寄存器操作—比較操作這類指令不產(chǎn)生結(jié)果僅根據(jù)所選擇的
3、操作來(lái)設(shè)置CMPr1,r2;根據(jù)r1-r2的結(jié)果設(shè)置ccCMNr1,r2;根據(jù)r1-r2的結(jié)果設(shè)置ccTSTr1,r2;根據(jù)r1andr2的結(jié)果設(shè)置ccTEQr1,r2;根據(jù)r1xorr2的結(jié)果設(shè)置cc立即數(shù)操作如果只希望把一個(gè)常數(shù)加到寄存器而不是兩個(gè)寄存器相加可以用立即數(shù)值取代第二位操作數(shù)立即數(shù)通常是常量literal)前面加“#”ADDr3,r3#1;r3:=r3+1ANDr8,r7#&ff;r8:=r7[7:0]立即數(shù)=0255X22n寄存器移位操作第三種定義數(shù)據(jù)操作的方式同第一種類似但允許第二個(gè)寄存器
4、操作數(shù)在同第一操作數(shù)運(yùn)算之前完成移位操作例:ADDr3,r2,r1,LSL#3;r3:=r2+8xr1注意它是一條RAM指令在單個(gè)時(shí)鐘周期內(nèi)執(zhí)行設(shè)置條件碼如果程序員要那么任何數(shù)據(jù)處理指令都能設(shè)置條件碼NZC和V比較操作只能設(shè)置條件碼要求以增加S操作碼來(lái)指明意為“設(shè)置條件碼例ADDSr2,r2,r0;32位進(jìn)位輸出C……ADCr3,r3,r1;…再加到高位字節(jié)中條件碼的使用通過條件碼轉(zhuǎn)移指令來(lái)控制程序流乘法有專門的數(shù)據(jù)處理指令支持乘法即MULr4,r3,r3;r4:=(r3xr2)[31:0]它同其他算術(shù)指令有
5、一些不同即°不支持第二位操作數(shù)為立即數(shù)°結(jié)果寄存器不允許同為第一源寄存器°如果設(shè)置位S則標(biāo)志位V保留而且標(biāo)志位C不再有意義乘加指令MLAr4,r3,r2,r1;r4:=(r3xr2+r1)[31:0]數(shù)據(jù)傳送指令∑寄存器間接尋址∑初始化地址指針∑單寄存器Load和Store指令∑基址偏移尋址∑多寄存器數(shù)據(jù)傳送∑堆棧尋址∑塊拷貝尋址寄存器間接尋址間接寄存器尋址利用一個(gè)寄存器的值基址寄存器作為存儲(chǔ)器地址或者從該地址取值存放到寄存器或者將另一個(gè)寄存器的值存入該存儲(chǔ)器地址指令匯編語(yǔ)言格式如下:LEDr0,[r1];r
6、0:=mem[r1]32STRr0,[r1];mem[r1]:=r032初始化地址指針要訪問一個(gè)特定的存儲(chǔ)器單元必須把一個(gè)RAM寄存器初始化使之包含這個(gè)單元的地址作為一個(gè)例子來(lái)考慮它必須從TABLE1向TABLE2拷貝數(shù)據(jù)TABLE1和TABLE2都接近代碼COPYADRr1,TABLE1;r1指向TABLE1ADRr2,TABLE2;r2指向TABLE2…TABLE1…;數(shù)據(jù)源TABLE2…;目標(biāo)單寄存器Load和Store指令這些指令使用基址寄存器來(lái)計(jì)算傳送數(shù)據(jù)的地址基址寄存器應(yīng)該包含一個(gè)接近目標(biāo)地址的地
7、址還要計(jì)算偏移量下列指令中沒有偏移量LDRr0,[r1];r0:=mem[r1]32STRr0,[r1];mem[r1]:=r032現(xiàn)在把一個(gè)表中的第一個(gè)字拷貝到另一表中即COPYADRr1,TABLE1;r1指向TABLE1ADRr2,TABLE2;r2指向TABLE2LDRr0,[r1];加載第一個(gè)數(shù)據(jù)…STRr0,[r2];將它存入TABLE2TABLE1…;數(shù)據(jù)源TABLE2…;目標(biāo)基址偏移尋址如果基址寄存器不包含確切的地址則可以在基址上加上不超過4KB的[偏移量來(lái)計(jì)算傳送地址即LDRr0,[r1#4
8、];r0:=mem[r1+4]32此為前變址尋址模式LDRr0,[r1]#4;r0:=mem[r1]32;r1:=r1+4此為后變址尋址模式多寄存器數(shù)據(jù)傳送當(dāng)大量數(shù)據(jù)需要傳送時(shí)最好能同時(shí)存取幾個(gè)寄存器例LDMIAr1,{r0,r2,r5};r0:=mem[r1]32;r2:=mem[r1+4]32;r5:=mem[r1+8]32堆棧尋址尋址變形基在存儲(chǔ)器中實(shí)現(xiàn)堆棧于的事實(shí)RAM多寄存器傳送指令支持全