立即數、棧、匯編與C函數的調用

  • 一、立即數
    • 在 ARM 架構中,立即數是指在指令中直接編碼的常量值,而不是通過寄存器或內存引用的值
    • 立即數的特點
      • 編碼限制:ARM指令是固定長度的(32位),因此立即數不能占用太多位數。典型的算術和邏輯指令通常只能編碼8-12位的立即數
      • 移位特性:ARM使用一種聰明的編碼方式,允許8位立即數加上4位的移位值(0-30,步長為2),這樣可以表示更大范圍的數值
      • 有效性檢查:不是所有32位值都能作為立即數,只有那些可以通過8位值循環右移偶數位得到的數值才是有效的立即數
    • 判斷條件
      • 這個數的范圍在0~0xFF之間;
      • 這個數展開成二進制,這個數的最高位1至最低位1之間的二進制序列的位數不超過8位;
      • 這個數展開的二進制序列最低位1右邊必須為偶數個連續的0
  • 二、指令
    • b指令:類似goto語句,實現無條件跳轉,需要一個label來指定跳轉的方位,實際上就是把待跳轉的那行地址轉入pc寄存器,調用完畢后不會回到調用處的下一行指令;
    • bl指令:跳轉時會在lr寄存器中保存返回的地址;
    • bx:跳轉到寄存器的地址,不保存返回地址
  • 三、棧
    • 滿減棧
      • 特點:
        • 棧指針指向最后一個壓入的數據 (棧已滿)
        • 棧向低地址方向增長 (遞減)
      • 操作:
        • 先減SP,再存儲數據
        • 先讀取數據,再加SP
      • ARM默認:ARM架構通常使用滿減棧
    • 滿增棧
      • 特點:
        • 棧指針指向最后一個壓入的數據
        • 棧向高地址方向增長 (遞增)
      • 操作:
        • 先加SP,再存儲數據
        • 先讀取數據,再減SP
    • 空減棧
      • 特點:
        • 棧指針指向下一個可用位置 (棧為空)
        • 棧向低地址方向增長
      • 操作:
        • 先存儲數據,再減SP
        • 先加SP,再讀取數據
    • 空增棧
      • 特點:
        • 棧指針指向下一個可用位置
        • 棧向高地址方向增長
      • 操作:
        • 先存儲數據,再加SP
        • 先減SP,再讀取數據
    • 滿/空:指SP指向的是有效數據(滿)還是下一個空位(空)
    • 增/減:指棧增長方向是地址增加還是減少
  • 四、匯編與C函數的調用
    • arm匯編調用C函數:
      • 1.在匯編代碼里用import聲明C函數;
      • 2.要注意保護現場;
      • 3.傳參時使用寄存器R0-R3,超過四個參數時使用棧來傳參;
      • 4.c函數的返回值用R0來返回
    • C函數調用arm匯編函數:
      • 1.在匯編代碼里用export導出該函數;
      • 2.在C函數里用extern來聲明arm函數;
      • 3.在C函數里保護現場和恢復現場;
      • 4.傳參使用R0-R3寄存器和返回值用R0返回

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96384.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96384.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96384.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

貪心算法與動態規劃:數學原理、實現與優化

貪心算法與動態規劃:數學原理、實現與優化 引言:算法選擇的本質 在計算機科學領域,算法選擇的本質是對問題特征的數學建模與求解策略的匹配。貪心算法與動態規劃作為兩種經典的優化算法,分別在不同問題域展現出獨特優勢。本文將從…

Leetcode 刷題記錄 21 —— 技巧

Leetcode 刷題記錄 21 —— 技巧 本系列為筆者的 Leetcode 刷題記錄,順序為 Hot 100 題官方順序,根據標簽命名,記錄筆者總結的做題思路,附部分代碼解釋和疑問解答,01~07為C語言,08及以后為Java語言&#xf…

Android Studio Meerkat | 2024.3.1 Gradle Tasks不展示

把這兩個開關打開,然后刷新gradle文件

Java中方法重寫與重載的區別

目錄 1. 方法重載 (Overload) 什么是方法重載? 重載的特點: 重載的示例: 重載的調用: 2. 方法重寫 (Override) 什么是方法重寫? 重寫的特點: 重寫的示例: 重寫的調用: 3.…

微信小程序發送訂閱消息-一次訂閱,一直發送消息。

實現思路長期訂閱要求太高,需要政府、公共交通等單位才有資格,所以只能使用一次性訂閱。 就像是買奶茶,下單以后,會彈出讓用戶訂閱消息那種。以買奶茶為例:用戶第一次下單成功,點擊了訂閱消息。(一般都有三…

408 Request Timeout:請求超時,服務器等待客戶端發送請求的時間過長。

408 Request Timeout 是 HTTP 狀態碼之一,表示客戶端在發送請求時,服務器等待的時間過長,最終放棄了處理該請求。此問題通常與網絡延遲、客戶端配置、服務器設置或者應用程序的性能有關。1. 常見原因1.1 客戶端問題網絡連接延遲或不穩定&…

MongoDB面試集錦

該書的使用的MongoDB版本是 4.2.01、什么是NoSQL數據庫?NoSQL和RDBMS有什么區別?在那些情況下使用和不使用NoSQL數據庫?NoSQL是非關系型數據庫,NoSQLNot Only SQL 。關系型數據庫采用的是結構化的數據,NoSQL采用的是鍵…

直擊JVM面試題

JVM組成 JVM JVM 就是 Java 程序的運行環境,它通過 類加載、字節碼執行、內存管理、GC、線程調度 等機制,讓 Java 實現了 跨平臺、自動內存管理和高效執行。 它是一個抽象的計算機,能執行以 字節碼(.class 文件) 為單…

地球系統模式(CESM)實踐技術應用及進階

目前通用地球系統模式(Community Earth System Model,CESM)在研究地球的過去、現在和未來的氣候狀況中具有越來越普遍的應用。CESM由美國NCAR于2010年07月推出以來,一直受到氣候學界的密切關注。近年升級的CESM2.0在大氣、陸地、海…

StarRocks導入數據-使用 Broker Load 進行異步導入

目錄 一、背景 二、實操 三、查看導入進度 一、背景 將hive庫數據表導入starrocks. 二、實操 LOAD LABEL user_behavior (DATA INFILE("hdfs://<hdfs_ip>:<hdfs_port>/user/amber/user_behavior_ten_million_rows.parquet")INTO TABLE user_behavior…

c語言,識別到黑色就自動開槍,4399單擊游戲狙擊戰場,源碼分享,豆包ai出品

不好用&#xff0c;識別速度慢&#xff0c;有時候識別不準確#include <windows.h> #include <stdio.h> #include <math.h> HDC hdcScreen; void leftClick(); void RGBtoHSV(int r, int g, int b, int* h, int* s, int* v); int fuzzyFindColor(int x1, int…

電動汽車充電標準之 — SAE J1772“電動汽車傳導充電連接器”簡介

SAE J1772&#xff08;通常讀作 "J seventeen seventy-two"&#xff09;是由美國汽車工程師學會&#xff08;SAE&#xff09;制定的&#xff0c;針對電動汽車傳導充電連接器的北美標準。它規范了電動汽車&#xff08;EV&#xff09;與充電設備&#xff08;EVSE&#…

ZooKeeper Multi-op+樂觀鎖實戰優化:提升分布式Worker節點狀態一致性

系列文章目錄 第一章 ZooKeeper入門概述:Znode,Watcher,ZAB . 第二章 技術解析&#xff1a;基于 ZooKeeper 實現高可用的主-從協調系統&#xff08;通過例子深入理解Zookeeper如何進行協調分布式系統&#xff09; 第三章 基于 ZooKeeper 的主從模式任務調度系統&#xff1a;設…

生產制造過程精益化

一、核心原則&#xff1a;以“消除浪費、創造價值”為核心精益化的本質是通過系統性優化流程&#xff0c;最大化客戶價值&#xff0c;最小化資源浪費&#xff08;時間、成本、庫存等&#xff09;&#xff0c;核心原則包括&#xff1a;1. 價值導向原則定義客戶價值&#xff1a;從…

Ping命令為何選擇ICMP而非TCP/UDP?

在網絡診斷工具中&#xff0c;ping是最常用的命令之一&#xff0c;它用于測試主機之間的連通性。有趣的是&#xff0c;ping命令并不使用TCP或UDP這些傳輸層協議&#xff0c;而是基于網絡層的ICMP協議。這背后的設計選擇體現了計算機網絡協議棧的分層智慧和特定用途的優化。ICMP…

VGGNet:為什么16層簡單堆疊能成為CNN經典?

配套筆記&講解視頻,點擊文末名片獲取 研究背景和動機 在 VGG 出現之前,圖像識別就像“盲人摸象”: 計算機看一張圖,只能憑感覺抓幾個零散的“特征點”, 結果忽好忽壞,時靈時不靈。 大家發現,如果把“看圖的流程”做得更深、更系統,準確率就能蹭蹭往上漲。于是“深一…

springboot+vue醫院診療管理系統(源碼+文檔+調試+基礎修改+答疑)

目錄 一、整體目錄&#xff08;示范&#xff09;&#xff1a; 文檔含項目技術介紹、E-R圖、數據字典、項目功能介紹與截圖等 二、運行截圖 三、代碼部分&#xff08;示范&#xff09;&#xff1a; 四、數據庫表(示范)&#xff1a; 數據庫表有注釋&#xff0c;可以導出數據…

云蝠智能大模型呼叫新模型上線,擁抱AGI

在人工智能浪潮席卷全球的今天&#xff0c;AGI&#xff08;通用人工智能&#xff09;已不再遙不可及&#xff0c;而是正逐步成為驅動產業變革的核心力量。在這場技術革命中&#xff0c;云蝠智能以其前瞻性的戰略布局和技術創新&#xff0c;再次引領行業風向——全新大模型呼叫模…

晨控CK-GW08S-PN與西門子PLC配置Profinet通訊連接操作手冊

晨控CK-GW08S-PN與西門子PLC配置Profinet通訊連接操作手冊晨控CK-GW08S系列作為晨控智能工業級別網關型RFID讀寫器,支持大部分工業協議如RS232、RS485、以太網。支持工業協議Modbus RTU、Modbus TCP、Profinet、EtherNet/lP、EtherCat以及自由協議TCP/IP等。本期主題&#xff1…

【Linux】Linux常用指令合集

本文是小編鞏固自身而作&#xff0c;如有錯誤&#xff0c;歡迎指出&#xff01; 目錄 一、文件與目錄操作 (1) 查看目錄&#xff0c;切換目錄 pwd ls cd &#xff08;2&#xff09;創建、 刪除 mkdir touch rmdir rm cp mv 二、文件的查看及更改 (1)查看和更改 …