1. 程式人生 > >ARM 指令集 之 PUSH and POP

ARM 指令集 之 PUSH and POP

  示例 :

          PUSH    {R4,LR}

  將低暫存器R4入棧,LR也入棧。

            POP     {R4,PC}

  將堆疊中的資料彈出到低暫存器 R4 PC

  說明 :

       暫存器入棧及出棧指令.實現低暫存器和可選的 LR 暫存器入棧暫存器和可選的 PC暫存器出棧操作,堆疊地 址由 SP 寄存設定,堆疊是滿遞減堆疊.指令格式如下;

PUSH {reglist[,LR]}

POP {reglist[,PC]}

其中 reglist 入棧/出棧低暫存器列表,R0~R7

LR 入棧時的可選暫存器

PC 出棧時的可選暫存器

暫存器入棧及出棧指令舉例如下;

PUSH {R0-R7,LR} ;將低暫存器 R0~R7 全部入棧,LR 也入棧

POP {R0-R7,PC} ;將堆疊中的資料彈出到低暫存器 R0~R7 PC

滿遞減堆疊 含義可參照如下:

堆疊定址

堆疊是特定順序進行存取的儲存區,操作順序分為“後進先出”和“先進後出”

堆疊定址時隱含的,它使用一個專門的暫存器(堆疊指標)指向一塊儲存區域(堆疊),

指標所指向的儲存單元就是堆疊的棧頂。儲存器堆疊可分為兩種:

向上生長:向高地址方向生長,稱為遞增堆疊

向下生長:向低地址方向生長,稱為遞減堆疊

堆疊指標指向最後壓入的堆疊的有效資料項,

稱為滿堆疊;

堆疊指標指向下一個要

放入的空位置,

稱為空堆疊。

這樣就有 4 中型別的堆疊表示遞增和遞減的滿堆疊和空堆疊的各種組合。

1. 滿遞增:堆疊通過增大儲存器的地址向上增長,堆疊指標指向內含有效資料項的最高地址。

指令如 LDMFA,STMFA 等。

2. 空遞增:堆疊通過增大儲存器的地址向上增長,堆疊指標指向堆疊上的第一個空位置。

指令如 LDMEA,STMEA 等。

3. 滿遞減:

堆疊通過減小儲存器的地址向下增長,堆疊指標指向內含有效資料項的最低地址。

指令如 LDMFD,STMFD 等。

4. 空遞減:堆疊通過減小儲存器的地址向下增長,堆疊指標指向堆疊下的第一個空位置。

指令如 LDMED,STMED 等。

堆疊定址指令舉例如下:

STMFD SP!,{R1-R7,LR} ; R1~R7,LR 入棧。滿遞減堆疊。

LDMFD SP!,{R1-R7,LR} ;資料出棧,放入 R1~R7,LR 暫存器。滿遞減堆疊。

相關推薦

ARM 指令 PUSH and POP

  示例 :           PUSH    {R4,LR}   將低暫存器R4入棧,LR也入棧。             POP     {R4,PC}   將堆疊中的資料彈出到低暫存器 R4 及 PC 中   說明 :        暫存器入棧及出棧指

ARM指令、Thumb指令、Thumb-2指令

32bit image 存儲 wid mage 頻率 arm 16bit 承載 MCU使用什麽指令集主要由內核決定的,比如Cortex-M3使用的是Thumb-2指令集 ARM指令集: 編代碼全部是 32bits 的,每條指令能承載更多的信息,因此使用最少的指令完

ARM指令—SWP指令

而且 post margin {} 這樣的 有效 介紹 back swp ARM指令集—SWP指令 SWP和SWPB是ARM指令集中對存儲單元的原子操作。即對存儲單元的一次讀和一次不可被切割。SWP和SWPB分別完畢存儲器和寄存器之間 一個字(

ARM指令--ldr、mov與str的用法與區別

ARM指令集–ldr、mov與str的用法與區別 ARM 是 RISC 結構,因此只能使用精簡指令。 1. mov的用法 在ARM體系中,mov只能用於資料在暫存器之間的移動或者往暫存器中寫入立即數。格式如下:mov{條件}{s} 目的暫存器,源運算元

arm 指令

ADuC702x可以用兩套指令集:ARM指令集和Thumb指令集。本小節介紹ARM指令集。在介紹ARM指令集之前,先介紹指令的格式。 A.2.1  指令格式         (1)基本格式   &n

ARM指令簡介

指令和偽指令概念 指令 指令指的是CPU機器指令的助記符,是由CPU的指令集提供的,經過編譯之後,會以二進位制機器碼的形式由CPU讀取執行 偽指令 偽指令本質上不是指令,和CPU的機器指令沒有任何關係,只是和指令一起寫在程式碼中而已,是由編譯器環境提供的,其目的是用於指導編譯過程,偽

ida Pro ARM指令和Thumb指令的切換

在動態除錯android的ndk程式的時候,發現很多程式都會反彙編錯誤,原來是ARM反彙編的模式沒搞對。因為在動態除錯的時候,ida Pro並沒有去解析elf模組中的一些資訊,造成了模組資訊丟失,有時候反彙編就會錯誤。   類似下面這樣: B6FC7DD0明顯反彙編錯了,

iOS CPU架構(ARM指令)

該選項起作用的條件有兩個,必須同時滿足才會起作用: 1. 其值設定為YES 2. Xcode成功連線除錯裝置 假定我們將Build Active Architecture Only值設定為YES,同時Xcode連線上手機 iPhone 5s(匹配指令集arm64) 1. 第一種情況 Archi

MIPS、ARM指令速記

MIPS指令集 A add B branch D divide J jump L load M multiply、move N noop O or S store、set、subtra

arm指令

特點: Load / Store結構(儲存器操作僅包括load和store,所有其他操作在暫存器中完成) 32位固定指令寬度 3地址指令格式(即兩個源運算元和結果暫存器都獨立指定) 每條指令都條件執行 可在單週期執行的單條指令內同時完成一項普通以為操作和一項普通ALU操作 自

ARM指令詳解(超詳細!帶例項!)

算術和邏輯指令 ADC : 帶進位的加法 (Addition with Carry) ADC{條件}{S}  <dest>, <op 1>, <op 2> dest = op_1 + op_2 + carry ADC將把兩個運算元加起來

1.21.ARM彙編指令9協處理器指令

ARM協處理器指令:CDP & LDC & STC & MCR & MRC ARM支援協處理器操作,協處理器的控制要通過協處理器命令來實現。 * CDP 協處理器資

1.17.ARM彙編指令5乘法指令

ARM彙編指令集之乘法指令:MUL & MLA & UMULL & UMLAL & SMULL & SMLAL * MUL 32位乘法指令,指令將Rm和Rs中

1.19.ARM彙編指令7儲存器訪問指令(LDR和STR)

ARM彙編指令集的儲存器訪問指令: LDR & STR & LDM & STM & SWP 這裡先總的介紹一下儲存器訪問指令,然後再詳解說前兩個(LDR&STR

1.22.ARM彙編指令10雜項指令

這裡記錄的ARM雜項指令包括: SWI & MRS & MSR * SWI (這個指令中關於立即數的詳細作用等我以後用到再詳細瞭解一下,這裡先大概知道一下) 軟中斷指令,SWI指令用

ARM彙編指令的切換:ARM切換到Thumb

概念 當使用bx跳轉指令,跳到一個奇數地址時,預設跳到這個奇數地址-1的位置,然後標誌位T位會置1,表示切換到Thumb指令集,所以我們引出下面這條指令,經常使用它來進行指令集的切換(r3隨意,任意暫存器即可,別用特殊暫存器) add r3, pc, #1 執行這條語句時,PC的

ARM體系架構——彙編指令

一、聊聊彙編指令和偽指令的真假 學完微控制器的時候,我們很迷惑,到底什麼是彙編指令,什麼是偽指令? 彙編指令:是CPU提供的指令。機器碼的助記符 我們隨便翻開一本微控制器的教程最後幾頁附錄都有彙編指令和機器碼的對應關係。例如彙編指令 mov r0, #0x0

ARM指令和結構

一、指令集    1、CISC複雜指令集CPU,CISC體系的設計理念使用最少的指令來完成任務,因此CISC的CPU        本身設計複雜,工藝複雜,但好處是編譯器好設計。CISC出現較早,Intel還一直採用CISC設        計。    2、RISC精簡指令集

iOS逆向工程Hopper中的ARM指令

工程一、Hopper中的ARM指令ARM處理器就不多說了,ARM處理器因為低功耗等原因,所以大部分移動設備上用的基本上都是ARM架構的處理器。當然作為移動設備的Android手機,iPhone也是用的ARM架構的處理器。如果你想對iOS系統以及你的應用進一步的了解,那麽對ARM指令集的了解是必不可少的,ARM

ARM cortex M3寄存器及指令

png cor 另一個 堆棧 應用程序 技術分享 font 限制 帶來 1、cortex M3擁有通用寄存器R0-R15及一些特殊寄存器: R0‐R7 也被稱為低組寄存器。所有指令都能訪問它們。它們的字長全是 32 位,復位後的初始值是不可預料的。 R8‐R12 也被稱為