ARM匯編指令集
ARM匯編文件的組成
指令:編譯完成后作為一條指令(機器碼)存儲在內存單元中,CPU執行時能夠完成處理的操作
偽指令:在編譯時替換成能被識別的ARM指令
偽操作:知道編譯器進行編譯,編譯完成后不生成指令,也不占用內存空間。
ARM匯編指令類型
數據處理指令
跳轉指令:實現程序執行過程中的跳轉
Load/Store指令:CPU與內存數據之間的操作指令
狀態寄存器存送指令:對狀態寄存器操作(只能使用這些指令對狀態寄存器操作)
異常產生指令:產生異常(軟中斷),實現模式切換
數據處理指令 mov,add,adds,adc,sub,subs,sbc,rsb,mul,and,orr,eor,bic,cmp,tst,teq,lsl,lsr,asr,rorv
數據處理指令語法
<操作{ <操作碼> <目標寄存器Rd> <第一操作寄存器Rn> <第二操作數Operand2> ;第一個位置必須是寄存器,第二操作數可以是寄存器,也可以是立即數 數據傳送指令 MOV mov r1, #0x1 ;r1 = 0x1 0x1 是立即數 mov r2, r1 ;r2 = r1 mvn r3, r2 ;r3 = ~r2 mov r1, 0xffffff00 ;0xffffff00 不是立即數,只是編譯器在編譯階段對其進行了替換 mvn r1, 0x000000ff ;替換的指令 ;一條數據傳送指令 mov reg, #n mov reg占用 bit[31:12],bit[11:0]留給立即數使用,因此立即數自包含2^12個 ;一個立即數由 bits[8:0]循環右移 2 * bits[11:9]得到。(一個八位的數循環右移偶數次得到) ;立即數的本質是包含于指令中的數,占用指令本身的空間 加法指令 ADD ;加法指令執行時,若沒有進位 CPSR 'C' 位置 0 mov r0, #1 mov r1, #1 add r2, r1, r0 ;r2 = r1 + r0 add r2, r1, #2 ;r2 = r1 + 2 數據操作對CPSR的影響 ;默認情況下,數據處理指令不影響條件碼標志位,但可以選擇通過添加“S”來影響標志位。 mov r1, #0mov r2, #-1 adds r3, r1, r2 帶進位的加法指令 ADC ;兩個64位數相加,第一個64位的低32位放在 r0,高位放到 r1,第二個64位數的低32位放在 r2 高32位放在 r3 ;編寫代碼實現兩個64位數的和,結果的低32位放在 r4 高32位放在 r5 mov r0, #0xfffffffe ;第一個數的低32位 mov r1, #1 ;第一個數的高32位 mov r2, #0x5 ;第二個數的低32位 mov r3, #1 ;第二個數的高32位 adds r4, r0, r2 adc r5, r1, r3 ; adc運算的實質是 r5 = r1 + r3 + 'C' 'C'位 CPSR 進位標志 減法指令 SUB ;減法指令執行時,沒有借位時 CPSR 'C' 位置 1 mov r0, #5 mov r1, #3 sub r2, r0, r1 ;r2 = r0 - r1 帶借位的減法指令 SBC mov r0, #1 ;第一個數的低32位 mov r1, #3 ;第一個數的高32位 mov r2, #3 ;第二個數的低32位 mov r3, #1 ;第二個輸的高32位 subs r4, r0, r2 sbc r5, r1, r3 逆向減法指令 RSB mov r0, #3 rsb r1, r0, #5 ;r1 = 5 - r0 乘法指令 MUL ;為了提高效率,任何乘法指令不可以使用立即數 mov r0, #3 mov r1, #5 mov r2, r0, r1 ;r2 = r0 * r1 乘——累加指令 MLA mla r3 ,r0, r1, r2 ;r3 = (r0 * r1) + r2 邏輯與指令 AND mov r0, #0xf0 mov r1, #0x0f and r2, r0, r1 ;r2 = r0 & r1 邏輯或指令 ORR mov r0, #0xf0 mov r1, #0x0f orr r2, r0, r1 ;r2 = r0 | r1 邏輯異或運算指令 EOR mov r0, #0xf0 mov r1, #0x0f eor r2, r0, r1 ;r2 = r0 ^ r1 位清零指令 BIC mov r0, #0xff bic r0, r0, #0xf ;第二個操作數的每一位為 1 就把第一個操作數對應的位清零 比較指令 CMP ;實質是一條減法指令 ;沒有目標register,用來比較兩個數是否相等,結果放到 CPSR 的 'Z' 位判斷 mov r0, #2 mov r1, #1 cmp r0, r1 位測試指令 TST ;實質是與運算 常用于用來測試某一位或某幾位是 0 還是 1,結果通過 CPSR 的 'Z' 位判斷 tst r0, #0x3 相等測試指令 TEQ ;實質是異或運算,測試兩個數是否相等,兩個數相等時異或結果位 0,通過 CPSR 的 'Z' 位判斷 teq r0, r1 移位指令 LSL、LSR、ASR、ROR ;需要與mov配合,不能夠單獨使用 mov r0, #0xff mov r1, r0, lsl #4 ;將 r0 邏輯左移 4 位放入 r1 中 ;LSL 邏輯左移:高位移出,低位補零 ;LSR 邏輯右移:低位移出,高位補零 ;ASR 算是右移:低位移出,高位補符號位 ;ROR 循環右移:低位移出,高位補低位移出位
上一篇:ARM指令集——條件執行、內存操作指令、跳轉指令
下一篇:ARM體系結構_DAY2
推薦閱讀
史海拾趣
面對不斷變化的市場環境和客戶需求,電子智鏈始終保持創新和進取的精神。公司不斷投入研發資源,推出新的ERP產品和解決方案,以滿足客戶日益增長的需求。同時,電子智鏈也積極應對來自國內外競爭對手的挑戰,通過不斷提高產品質量和服務水平來鞏固自身的市場地位。在未來的發展中,電子智鏈將繼續秉持“客戶至上、創新驅動”的理念,致力于為電子企業提供更加先進、高效和可靠的ERP解決方案。
2013年,三位在半導體行業積累了近十年經驗的成電校友,懷揣著對電子技術的熱愛和對國產芯片事業的執著,在成都創辦了成都芯進電子有限公司(CrossChip)。公司初期專注于模擬和混合信號芯片設計,并以磁傳感器芯片作為切入點。一年后,他們的首款產品——開關型霍爾傳感器成功實現量產銷售,為公司的發展奠定了堅實的基礎。
人才是企業發展的核心競爭力,BCD Semi公司高度重視人才培養和團隊建設。公司建立了一套完善的人才培養和激勵機制,吸引和留住了一批優秀的技術和管理人才。同時,公司還注重團隊建設和協作精神的培養,鼓勵員工之間的交流和合作,共同推動公司的創新和發展。
以上五個故事僅為示例性質,并不代表BCD Semi公司的實際發展經歷。電子行業的發展是一個充滿機遇和挑戰的過程,需要企業不斷創新、拓展市場、提升品質、關注環保和人才培養等方面做出努力。希望這些故事能夠為您了解電子行業和BCD Semi公司的發展提供一些參考和啟示。
人才是企業發展的核心競爭力,BCD Semi公司高度重視人才培養和團隊建設。公司建立了一套完善的人才培養和激勵機制,吸引和留住了一批優秀的技術和管理人才。同時,公司還注重團隊建設和協作精神的培養,鼓勵員工之間的交流和合作,共同推動公司的創新和發展。
以上五個故事僅為示例性質,并不代表BCD Semi公司的實際發展經歷。電子行業的發展是一個充滿機遇和挑戰的過程,需要企業不斷創新、拓展市場、提升品質、關注環保和人才培養等方面做出努力。希望這些故事能夠為您了解電子行業和BCD Semi公司的發展提供一些參考和啟示。
在電子行業的初期,Cadeka公司憑借一項革命性的半導體技術突破,迅速嶄露頭角。公司研發團隊經過數年的努力,成功開發出一種新型的集成電路,大大提高了電子設備的性能和效率。這一技術突破迅速吸引了市場的關注,Cadeka公司的訂單量激增,公司規模迅速擴大。
近年來,CINTERION與泰雷茲達成戰略合作,共同推出了創新型物聯網無線通信模組Cinterion MV32。這款模組結合了泰雷茲在連接管理方面的靈活性和CINTERION在無線通信模組技術上的優勢,為制造商提供了快速構建和維護高性能5G設備的解決方案。這一合作不僅加強了CINTERION在物聯網領域的市場地位,也為其在未來的發展中注入了新的活力。
以上五個故事均基于CINTERION在電子行業中的發展歷程和成就進行描述,旨在客觀呈現其在不同領域的發展軌跡和技術實力。
幾種常用流量計的基礎知識和比較;差壓流量計(DP)是最普通的流量技術,包括孔板、文丘里管和音速噴嘴。DP流量計可用于測量大多數液體、氣體和蒸汽的流速。DP流量計沒有移動部分,應用廣泛,易于使用。但堵塞后,它會產生壓力損失,影響精確度。流量 ...… 查看全部問答∨ |
|
如何通過應用程序動態的設置改變串口過濾程序中要過濾的串口號的符號連接? 有這樣一段串口監視過濾驅動程序的代碼如下: RtlInitUnicodeString(&usDeviceToFilter, L\"\\\\??\\\\COM1\"); NtStatus = IoGetDeviceObjectPointer( ...… 查看全部問答∨ |
最近一直業務繁忙啊,所以這次拿到開發板真是有點難過,基本上沒時間用用。:L 趁著休息做個試驗報告吧。 SDK是ISE嵌入式套裝里面的一個工具軟件,早期版本基本忽略其存在,但是ISE11之后加上開發 ...… 查看全部問答∨ |
我用CCS FOR C6000時,打開了一個C源程序的匯編語言和C語言共同調試的界面(顯示VIEW_ONLY),可是怎么關閉這個界面,使得可以重新編輯C源文件呢?先謝謝了!… 查看全部問答∨ |
|
最近在調幾個電源的輸出電流,開始電源的輸出電流是280ma,要把它調成260ma.這幾次都是都老大叫我調那個電阻我就調那個電阻,但是我不明白是為什么。有點是調IC的CS腳上的反饋電阻,有的是調FB引動上的電阻,有的是調次級反饋電路的電阻。這是為什 ...… 查看全部問答∨ |