1.ldr 和 str :
(1) ldr 作為指令,叫做寄存器加載指令。將內存中的值加載到寄存器中。
(2) ldr 作為偽指令,實現一個32位常數或地址值加載到寄存器中。后面加載的常量或地址值標號前面必須有一個 “=” ,編譯器會將偽指令替換成指令實現。
(3) str 將寄存器中的值保存到內存單元中。
2..long 偽操作,給數值分配內存單元。
start:
virable:
.long start
如上,表示將start表示的值存到virable所代表的內存中。
virable:
.long 0x66666666
如上,表示將0x66666666存入virable所在的內存單元中。
3.adr 和 adrl:
偽指令,將一個地址加載到寄存器中。adr 小范圍地址讀取指令,將基于pc相對偏移的地址值讀取到寄存器中。
adrl 中等范圍地址讀取指令。
4.b 和 bl:
偽指令,實現基于pc值的相對跳轉,b 用于不返回的跳轉。bl 一般用于子程序跳轉,即最后通過 mov pc,lr 返回程序被調用點處。
關鍵字:LINUX ARM匯編 常用指令
引用地址:
LINUX下ARM匯編的常用指令解析
推薦閱讀最新更新時間:2025-06-07 23:45
ARM匯編與C混合編程
GNU內聯匯編 內聯匯編即在C中直接使用匯編語句進行編程,使程序可以在C程序中實現C語言不能完成的一些工作,例如,在下面幾種情況中必須使用內聯匯編或嵌入型匯編 程序中使用飽和算術運算(Saturating Arithmetic) 程序需要對協處理器進行操作 在C程序中完成對程序狀態寄存器的操作 __asm__ __volatile__( asm code :output:input:changed registers); Note: 使用__asm__和__volatile__表示編譯器將不檢查后面的內容,而是直接交給匯編器。 如果希望變壓器你優化,__volatile__可以不加 沒有asm code也不能省略 沒有前
[單片機]
淺析ARM匯編語言子例程設計方法
引言 在嵌入式軟件系統開發過程中,大量使用C語言進行應用程序開發以提高開發效率。同時,系統中經常包含一些決定整個系統性能的關鍵模塊,此時為了獲得最佳性能,經常使用匯編語言編寫它們,或者某些特殊情況下,例如操作硬件等,也必須使用匯編語言。 函數是C語言中一個重要的概念,在匯編語言中經常使用子例程或過程(subroutine or procedure)表達同樣的概念,本文使用術語子例程。本文首先介紹ARM匯編語言子例程設計的一般方法,并以此為基礎提出一種新的基于堆棧幀的設計方法,同時介紹與C語言交互技術。 1 一般方法 在ARM匯編語言中一般使用BL(Branch and Link)指令調用某個子例程,BL指令首先將返回地址保存
[單片機]
ARM9學習3-調試第一個ARM匯編程序
調試第一個ARM匯編程序 1.雙擊KEIL uVision4圖標,打開RVMDK uVision4集成開發環境。 2.通過菜單“projectnew uvision project…”,新建一個工程,選擇要存放的位置和工程文件名“Test001”,點擊“保存按鈕”。 3.CPU選型,選擇三星的S3C2410A,繼續點擊“OK”按鈕。 4.不添加啟動代碼,所以選擇“否” 5.點擊工具欄上的“ ”New 圖標,新建一個文件,鍵入匯編源代碼。 6.點擊工具欄上的“ ”Save 圖標,保存該匯編源文件,命名為:Test001.s 7.在左邊的“Project”目錄結構中,右擊“Source Group 1”,選擇“
[單片機]
ARM匯編:BNE和TST和BEQ
(1)例一:TST與BNE搭配 TST r0,#02 BNE sleep LDR r1,#0 解釋:位比較,先進行and運算,如果r0第2位不為1,則與的結果為0,設置標志位zero=1,繼續下面的ldr指令。反之,zero=0,跳轉到sleep執行。 bne指令: 非零則跳轉 個人總結:TST 和BNE 連用: 先是用TST 進行位與運算,然后將位與的結果與0比較,如果不為0,則跳到bne緊跟著的標記(如bne sleep,則跳到sleep處)。 TST 和BEQ連用: 先是用tst進行位與運算,然后將位與的結果與0比較,如果為0,則跳到beq緊跟著的標記(如bne AAAA,則跳到AAAA處)。 (2
[單片機]
arm匯編立即數有效位數判斷
在ARM處理器的匯編語言中,對指令語法格式中的 shifter_operand 的常數表達式有這樣的規定: 該常數必須對應8位位圖,即常數是由一個8位的常數循環移位偶數位得到的。 ?xml:namespace prefix = o ns = urn:schemas-microsoft-com:office:office / 首先從ARM指令系統的語法格式說起。 一條ARM指令語法格式分為如下幾個部分: opcode { cond }{S} Rd , Rn {, shifter_operand } 其中, 內的項是必須的,{}內的項是可選的,如 opcode 是指令助記符,是必須的,而{ cond }為指令執行條件,是可選的
[單片機]
imx6ull之linux內核移植
開發板:飛凌 OKMX6ULL-S + 7寸電阻屏 交叉編譯工具鏈:gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf linux內核:linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 一、內核編譯 1、將內核通過ftp上傳至linux虛擬機,解壓:tar -jxvf linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 2、修改Makefile cd linux-imx-rel_imx_4.1.15_2.1.0_ga/ vi Makefile 跳至252行(252G),復制2行(
[單片機]
Linux內核靜態映射表的建立過程
/* * 平臺: s5pv210 * 內核版本號: 2.6.35.7 */ kernel/arch/arm/mach-s5pv210/mach-smdkc110.c 這個文件是由三星在移植內核時提供的一個很重要的文件,這個文件中的函數都是與硬件相關的。 mach-smdkc110.c文件中的smdkc110_map_io函數就是靜態映射表建立過程調用的一個函數 開機時調用映射表建立函數: 問題:開機時(kernel啟動時)smdkc110_map_io怎么被調用的? start_kernel setup_arch paging_init devicemaps_init {
[單片機]
linux驅動模型——platform(2)
一. platform 組織架構 1.1. platform工作體系都定義在drivers/base/platform.c中 1.2. platform相關函數聲明在include/linux/platform_device.h 1.3. platform.c中兩個重要結構體 1.3.1. platform_device結構體 a. 該結構體的name用于總線與device匹配 struct platform_device { const char * name; // 平臺總線下設備的名字 int id; //當多個同類型設備
[單片機]