ARM汇编【1】:数据类型

news2024/11/16 11:54:18

       与高级语言类似,ARM支持对不同数据类型的操作。我们可以加载或存储的数据类型可以是有符号和无符号字、半字或字节。这些数据类型的扩展名是:-h或-sh表示半字,-b或-sb表示字节,不表示字的扩展名。有符号数据类型或无符号数据类型之间的区别在于:

  •      带符号的数据类型可以同事包含正值和负值,因此范围值较低
  •      无符号数据类型可以包含大的正值(包括零),但不能包含负值,因此范围更广。

以下是这些数据类型如何与Load和Store指令的使用示例:

ldr = Load Word
ldrh = Load unsigned Half Word
ldrsh = Load signed Half Word
ldrb = Load unsigned Byte
ldrsb = Load signed Bytes

str = Store Word
strh = Store unsigned Half Word
strsh = Store signed Half Word
strb = Store unsigned Byte
strsb = Store signed Byte

端序 

     有两种查看内存中字节的基本方法:小字节(LE)或大字节(BE)。区别在于对象的每个字节存储在内存中的字节顺序。在像Intel x86这样的小端机器上,最低有效字节存储在最低地址(最接近零的地址)。在big-endian机器上,最高有效字节存储在最低地址。ARM体系结构在版本3之前是小端序,从那时起就是双端序,这意味着它具有允许切换端序的设置。例如,在ARMv6上,指令是固定的小端序,数据访问可以是小端序或大端序,由程序状态寄存器(CPSR)的位9(E位)控制

ARM寄存器

      寄存器的数量取决于ARM版本。根据ARM参考手册,除基于ARMv6-M和ARMv7-M的处理器外,共有30个通用32位寄存器。前16个寄存器可在用户级模式下访问,其他寄存器可在特权软件执行中使用(ARMv6-M和ARMv7-M除外)。在本系列教程中,我们将使用在任何特权模式下都可以访问的寄存器:r0-15。这16个寄存器可以分为两组:通用寄存器和专用寄存器。

 下表只是ARM寄存器如何与英特尔处理器中的寄存器相关的一个对比。

 R0-R12:可在常见操作期间用于存储临时值、指针(指向内存的位置)等。例如,R0可在算术操作期间被称为累加器,或用于存储先前调用的函数的结果。R7在处理系统调用时变得很有用,因为它存储系统调用编号,R11帮助我们跟踪用作帧指针的堆栈上的边界(稍后将介绍)。此外,ARM上的函数调用约定指定函数的前四个自变量存储在寄存器r0-r3中。

R13:SP(堆栈指针)。堆栈指针指向堆栈的顶部。堆栈是用于函数特定存储的内存区域,当函数返回时会回收。因此,堆栈指针用于通过从堆栈指针中减去我们想要分配的值(以字节为单位)来分配堆栈上的空间。换句话说,如果我们想分配一个32位的值,我们从堆栈指针中减去4。

R14:LR(链路寄存器)。当进行函数调用时,链接寄存器会更新为一个内存地址,该地址引用函数启动的下一条指令。这样做允许程序在“子”函数完成后返回到启动“子”功能调用的“父”函数。

R15:PC(程序计数器)。程序计数器会根据执行的指令的大小自动递增。%1字节此大小在ARM状态下始终为4字节,在THUMB模式下始终为2字节。当正在执行分支指令时,PC保持目的地地址。在执行过程中,PC将当前指令的地址加8(两条ARM指令)存储在ARM状态,将当前指令加4(两条Thumb指令)的地址存储在Thumb(v1)状态。这与x86不同,在x86中,PC总是指向要执行的下一条指令。

让我们看看PC在调试器中的行为。我们使用以下程序将pc的地址存储到r0中,并包含两条随机指令。让我们看看会发生什么。

.section .text
.global _start

_start:
 mov r0, pc
 mov r1, #2
 add r2, r1, r1
 bkpt

在GDB中,我们在_start处设置了一个断点并运行它:

gef> br _start
Breakpoint 1 at 0x8054
gef> run

下面是我们首先看到的输出的屏幕截图:

   我们可以看到,PC保存着将要执行的下一条指令(mov r0,PC)的地址(0x8054)。现在让我们执行下一条指令,在这之后R0应该保存PC的地址(0x8054),对吗?

 错误的,看看R0中的地址。虽然我们期望R0包含先前读取的PC值(0x8054),但它保留的值比我们先前读取的电脑(0x805c)提前两条指令。从这个例子中,你可以看到,当我们直接阅读PC时,它遵循PC指向下一条指令的定义但在调试时,PC在当前PC值(0x8054+8=0x805C)之前指向两条指令。这是因为较旧的ARM处理器总是在当前执行的指令之前获取两条指令。ARM保留此定义的原因是为了确保与早期处理器的兼容性。

状态寄存器

当您使用gdb调试ARM二进制文件时,您会看到一个名为Flags的东西:

 寄存器$cpsr显示当前程序状态寄存器(cpsr)的值,在该寄存器下,您可以看到Flags thumb、fast、interrupt、overflow、carry、zero和negative。这些标志表示CPSR寄存器中的某些位,并根据CPSR的值进行设置,并在激活时变为粗体。N、Z、C和V位与x86上EFLAG寄存器中的SF、ZF、CF和OF位相同。这些位用于支持汇编级条件和循环中的条件执行。我们将介绍第6部分:条件执行和分支中使用的条件代码。

 

 原文链接:ARM Data Types and Registers (Part 2) | Azeria Labs (azeria-labs.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/906975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二重积分小技巧---交换积分

又一个奇技淫巧。 【例1】 ∫ 0 1 d y ∫ y 1 x 3 1 d x ? \int _0 ^1 dy \int _{\sqrt y} ^ 1 \sqrt{x^3 1} dx ? ∫01​dy∫y ​1​x31 ​dx? 解析: 不说话,看下图: ∫ 0 1 d y ∫ y 1 x 3 1 d x ∫ 0 1 d x ∫ 0 x 2 x 3 1 d…

照亮虚拟网络流量“盲区”:超融合网络流量可视化功能解读

云计算时代下,网络虚拟化使网络管理更加集中、灵活和便捷,但同时也让云内的网络变得更加复杂。传统网络流量诊断方法和工具,难以对云内虚拟网络的“东-西向流量”进行可视化呈现和分析,形成了网络运维管理的盲区,提升了…

Shopify独立站也会被封店?告诉你这背后深藏的玄机!

很多人觉得做独立站就完全自由了,不被平台监管,也不会被封店。但事实真的是这样吗?其实独立站只是相对自由,受到的监管相对较少,封店的风险较小,但并不是完全高枕无忧。想知道什么情况下会被封店&#xff1…

无涯教程-PHP - 全局变量函数

全局变量 与局部变量相反,可以在程序的任何部分访问全局变量。通过将关键字 GLOBAL 放置在应被识别为全局变量的前面,可以很方便地实现这一目标。 <?php$somevar15;function addit() {GLOBAL $somevar;$somevar;print "Somevar is $somevar";}addit(); ?> …

MyBatis快速入门以及环境搭建和CRUD的实现

目录 前言 一、MyBatis简介 1.MyBatis是什么 2.MyBatis的特点 3.mybatis的作用 4.MyBatis的应用场景 5.MyBatis优缺点 二、相关概念 1.ORM概述 2.常见的ORM框架 3.什么是持久层框架 三、MyBatis的工作原理 1.框架交互 2.工作原理 ​编辑 四、MyBatis环境搭建 1…

SQL - 开窗(窗口)函数

什么是开窗函数&#xff1f; 开窗函数对一组值进行操作&#xff0c;它不像普通聚合函数那样需要使用GROUP BY子句对数据进行分组&#xff0c;能够在同一行中同时返回基础行的列和聚合列 开窗函数的语法形式为&#xff1a;函数 over(partition by <分组用列> order by …

Vue2到3 Day7 全套学习内容,众多案例上手(内付源码)

简介&#xff1a; Vue2到3 Day1-3 全套学习内容&#xff0c;众多案例上手&#xff08;内付源码&#xff09;_星辰大海1412的博客-CSDN博客本文是一篇入门级的Vue.js介绍文章&#xff0c;旨在帮助读者了解Vue.js框架的基本概念和核心功能。Vue.js是一款流行的JavaScript前端框架…

【C语言】三子棋游戏——超细教学

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 &#x1f525;该篇将结合之前的知识来实现 三子棋游戏。 目录&#xff1a; &#x1f31f;思路框架&#xff1a;测试游戏 &#x1f31f…

LangChain + Streamlit + Llama:将对话式AI引入本地机器

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 什么是LLMS&#xff1f; 大型语言模型 &#xff08;LLM&#xff09; 是指能够生成与人类语言非常相似的文本并以自然方式理解提示的机器学习模型。这些模型使用包括书籍、文章、网站和其他来源在内的…

PCIE 信息

PCIe&#xff08;外围组件互连快件&#xff09;是用于连接高速组件的接口标准。每台台式电脑主板有许多 PCIe 插槽&#xff0c;可用于添加通用显卡&#xff0c;各种外设卡&#xff0c;无线网卡或固态硬盘等等。PC 中可用的 PCIe 插槽类型将取决于你购买的主板. PCIe 插槽有不同…

无需公网IP——搭建web站点

文章目录 概述使用 Raspberry Pi Imager 安装 Raspberry Pi OS设置 Apache Web 服务器测试 web 站点安装静态样例站点将web站点发布到公网安装 Cpolar内网穿透cpolar进行token认证生成cpolar随机域名网址生成cpolar二级子域名将参数保存到cpolar配置文件中测试修改后配置文件配…

9.4 多线程之线程池

线程池 进程已经能做到并发编程了 , 为什么还需要线程 ? 进程实在是太重量了 , 创建和销毁成本都比较高 , 需要申请释放资源 线程就是针对上述问题的优化 , 因为他是共用同一组系统资源的 , 一旦资源申请好了 , 后续就不需要再继续申请了 虽然线程已经很好了 , 不过在更高频…

浙大全日制英文MBA项目提面申请截至9月3日:几乎是上岸必经之路

今年浙大全日制MBA项目提前批面试做了改革&#xff0c;一年只设定一个批次申请&#xff0c;对于考生们来说其实是不太有利的&#xff0c;原因在于整个提面时间节奏会将部分考生逼到进退两难的境地&#xff0c;一方面无提面的状态下全日制MBA项目都知道需要比较高的分数才可能够…

计算机竞赛 基于CNN实现谣言检测 - python 深度学习 机器学习

文章目录 1 前言1.1 背景 2 数据集3 实现过程4 CNN网络实现5 模型训练部分6 模型评估7 预测结果8 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于CNN实现谣言检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&am…

GC的前置工作,聊聊GC是如何快速枚举根节点的

本文已收录至GitHub&#xff0c;推荐阅读 &#x1f449; Java随想录 原创不易&#xff0c;注重版权。转载请注明原作者和原文链接 文章目录 什么是根节点枚举根节点枚举存在的问题如何解决根节点枚举的问题安全点安全区域 上篇文章中我们留下了个坑&#xff1a;「 根节点枚举」…

计网第三章(数据链路层)(四)

目录 一、MAC地址和IP地址以及ARP协议 1.MAC地址&#xff1a; 单播MAC地址&#xff1a; 广播MAC地址&#xff1a; 多播MAC地址&#xff1a; 2.IP地址&#xff1a; 3.IP地址和MAC地址&#xff1a; 1.什么情况下使用&#xff1f; 2.IP地址和MAC地址填写位置&#xff1f;…

保障用户观影体验 极米推出首款搭载超级混光技术投影仪极米RS Pro 3

随着投影市场的日渐蓬勃&#xff0c;倒推了投影技术的研发创新&#xff0c;投影仪产品在最近几年已经逐步进入到家庭空间&#xff0c;成为很多家庭不可或缺的家电产品&#xff0c;不论是客厅还是卧室&#xff0c;或者是户外露营等&#xff0c;投影仪的家用场景已经拓展到了人们…

ps2024后期调色滤镜插件使用教程图解

Exposure是一款常见的ps调色滤镜插件&#xff0c;相信许多朋友都曾经用过它。一个优秀的摄像师不仅需要懂得摄像技巧&#xff0c;还要掌握图像的后期调色窍门。那么&#xff0c;后期调色软件哪个好&#xff0c;后期调色教程图解&#xff0c;接下来一起来了解一下吧。 一、后期…

为何Ping不通啊?

为什么Ping不通啊&#xff01;求指点&#xff1f; 友情提醒&#xff0c;这个问题难度系数初级难度&#xff08;CCNA&#xff09;&#xff0c;只适合初级读者阅读&#xff0c;避免浪费宝贵时间。 Q1: 为何PC1能Ping通PC2&#xff1f;或反之亦然&#xff1f; PC1主观认为PC2和自…

YOLO目标检测——血管瘤数据集下载分享

血管瘤数据集在医学领域的研究和临床应用中起着重要的作用。它可以用于开发和评估血管瘤检测和分割算法&#xff0c;帮助医生准确地定位和诊断血管瘤。此外&#xff0c;血管瘤数据集还可以用于研究血管瘤的生长规律、预测血管瘤的发展趋势等。 数据集点击下载&#xff1a;血管瘤…