历史上的今天
返回首页

历史上的今天

今天是:2025年12月09日(星期二)

正在发生

2022年12月09日 | ARM汇编教程(一): ARM汇编简介

2022-12-09 来源:zhihu

ARM 汇编基础知识教程系列将逐步涵盖以下主题:

第1部分:ARM汇编简介

第2部分:数据类型 寄存器

第3部分:ARM指令集

第4部分:内存指令。

第5部分:加载和存储数据

第6部分:条件执行和分支

第7部分:堆栈和函数

要跟上示例,您将需要一个基于ARM的实验环境。如果你没有ARM设备(如Raspberry Pi),你可以按照本教程在虚拟机中使用QEMU和Raspberry Pi发行版来建立自己的实验环境。如果你不熟悉用GDB进行的基本调试,你可以在本教程中获得基本知识。在本教程中,重点是ARM 32位,例子是在ARMv6上编译的。

为什么是ARM?

本教程一般是为那些想学习ARM汇编基础知识的人准备的。您可能已经注意到,ARM处理器在您周围随处可见。当我环顾四周时,我可以数出家里采用ARM处理器的设备远远多于Intel处理器。这包括手机、路由器,更别忘了最近似乎销量爆棚的物联网设备。也就是说,ARM处理器已经成为世界上最广泛的CPU内核之一。

尽管ARM汇编语言可能是广泛使用的最简单的汇编语言。那么,为什么没有更多的人关注ARM呢?也许是因为涉及英特尔开发的学习资源比涉及 ARM 的多。在这里的系列教程中,我们将重点介绍ARM汇编基础知识。

ARM处理器与 英特尔处理器

英特尔和ARM之间有许多不同之处,但主要区别在于指令集。英特尔是一个CISC(复杂指令集计算)处理器,它的指令集更大、功能更丰富,并允许许多复杂指令访问内存。因此,它有更多的操作、寻址模式,但比ARM更少的寄存器。CISC处理器主要用于普通PC、工作站和服务器。

ARM是一种RISC(精简指令集计算)处理器,因此它有一个简化的指令集(100条指令或更少),并且比CISC有更多的通用寄存器。与英特尔不同,ARM使用仅对寄存器进行操作的指令,并使用加载/存储内存模型进行内存访问,这意味着只有加载/存储指令可以访问内存。这意味着在ARM上增加一个特定内存地址的32位数值需要三种指令(加载、增加和存储),首先将特定地址的数值加载到寄存器中,在寄存器中增加数值,然后从寄存器中存储到内存中。

减少指令集有其优点和缺点。其中一个优点是指令可以更快执行,可能会有更高的速度(RISC系统通过减少每个指令的时钟周期来缩短执行时间)。缺点是,较少的指令意味着要更加强调用有限的指令有效地编写软件。同样需要注意的是,ARM有两种模式,ARM模式和拇指模式。拇指指令可以是2字节或4字节(在第3部分:ARM指令集中有更多介绍)。

ARM和x86之间的更多区别是:

在ARM中,大多数指令可用于条件执行。

Intel x86 和 x86-64 系列处理器使用 little-endian 格式

ARM 体系结构在版本 3 之前是 little-endian。从那时起,ARM处理器变成了BI-endian,并具有允许切换endianness的设置。

不仅Intel和ARM之间存在差异,而且不同的ARM版本本身也存在差异。本系列教程旨在尽可能地保持通用性,以便您对ARM的工作原理有一个大致的了解。一旦您了解了基本原理,就很容易了解您所选择的目标ARM版本的细微差别。本教程中的例子是在32位ARMv6(Raspberry Pi 1)上创建的,因此,解释与这个确切的版本有关。

不同的ARM版本的命名也可能令人困惑:

编写汇编

我们首先需要了解汇编语言编程的基础知识,这需要在开始之前有一些背景知识。

您不需要知道汇编语言的每一个小细节,但其中一些细节对于理解大局是必需的。

本系列教程将涵盖基础知识。如果你想了解更多,你可以访问本章末尾列出的链接。

那么,究竟什么是汇编语言?汇编语言只是机器码之上的一个薄薄的语法层,机器码由指令组成,以二进制表示法(机器码)进行编码,也就是我们的计算机所能理解的。那么,为什么我们不直接写机器码呢?嗯,这将是一个痛苦的过程。出于这个原因,我们要写汇编,即ARM汇编,这对人类来说更容易理解。我们的计算机本身不能运行汇编代码,因为它需要机器代码。我们将使用的将汇编代码组装成机器代码的工具是GNU Binutils项目中的GNU Assembler,其名称为as,可用于具有*.s扩展名的源文件。

一旦你写好了扩展名为*.s的汇编文件,你就需要用as来组装它,并用ld来链接它。

揭开汇编的面纱

让我们从最底层开始,一路往上走到汇编语言。在最底层,我们的电路上有我们的电信号。信号的形成是通过将电压切换到两个级别中的一个,例如0伏("关闭")或5伏("开启")。因为仅仅通过观察,我们不容易知道电路的电压是多少,所以我们选择用直观的数字0和1来书写电压的开/关模式,这不仅是为了表示信号的缺失或存在,而且也是因为0和1是二进制系统的数字。然后我们将0和1的序列分组,形成机器码指令,这是计算机处理器最小的工作单元。下面是一个机器语言指令的例子。

1110 0001 1010 0000 0010 0000 0000 0001

到目前为止还不错,但我们无法记住这些模式(0和1)中的每一个意味着什么。 出于这个原因,我们使用所谓的助记符、缩写来帮助我们记住这些二进制模式,每个机器码指令都有一个名字。这些记忆法通常由三个字母组成,但这并不是必须的。我们可以用这些助记符作为指令写一个程序。这个程序被称为汇编语言程序,而用于表示计算机机器码的一组助记符被称为该计算机的汇编语言。因此,汇编语言是人类用来为计算机编程的最低级别。一条指令的操作数排在助记符之后。下面是一个例子。

MOV R2, R1

现在我们知道,汇编程序是由称为助记符的文本信息组成的,我们需要将其转换为机器码。如上所述,就ARM汇编而言,GNU Binutils项目为我们提供了一个名为as的工具。使用像as这样的汇编器将(ARM)汇编语言转换为(ARM)机器代码的过程称为汇编。

综上所述,我们了解到计算机能够理解(响应)电压(信号)的存在或不存在,并且我们可以用0和1(比特)的序列来表示多个信号。我们可以使用机器代码(信号序列)使计算机以某种定义明确的方式做出反应。因为我们无法记住所有这些序列的含义,所以我们给它们以缩写--助记符,并使用它们来表示指令。这套助记符是计算机的汇编语言,我们使用一个称为汇编程序的程序将代码从助记符表示转换为计算机可读的机器代码,就像编译器对高级语言的作用一样。


推荐阅读

史海拾趣

Glow-Lite Corp公司的发展小趣事

对于红外遥控发射电路,网友可能会有多方面的问题。以下是一些可能的问题及其详细回答:

一、红外遥控发射电路的基本工作原理是什么?

回答
红外遥控发射电路的基本工作原理是,当用户按下遥控器上的某个按键时,遥控器内部的微控制器(CPU)会读取与该按键对应的二进制数据,并通过信号调理电路进行处理。随后,这些数据被调制电路转换为适合传输的信号,并经过放大后,由红外线发射二极管以红外光的形式发射出去。接收设备上的红外接收头接收到这些红外光信号后,会将其转换为电信号,并经过进一步的处理还原为原始的控制指令,从而实现遥控功能。

二、红外遥控发射电路常见的故障有哪些?

回答
红外遥控发射电路常见的故障主要包括以下几个方面:

  1. 电池电量不足或接触不良:这是最常见的故障之一,当电池电量不足或电池卡簧接触不良时,会导致遥控器无法正常工作。

  2. 按键故障:按键上的导电橡胶易磨损、老化,或按键电路中的铜箔线条断裂、开焊等,都会导致按键失灵。

  3. 振荡电路故障:振荡电路中的陶瓷谐振器易受到机械冲击而损坏,导致振荡频率偏移或停振,进而影响遥控信号的发射。

  4. 红外发光二极管故障:红外发光二极管可能因引脚开焊、内部开路或失效等原因而无法正常工作。

  5. 驱动电路故障:驱动电路中的晶体三极管、电阻等元件可能因开路、放大系数下降等原因导致故障。

  6. 编码集成电路故障:编码集成电路是整个遥控器的核心部分,其内部集成了多个复杂的电路。如果编码集成电路发生故障,将直接影响遥控信号的生成和发射。

三、如何判断红外遥控发射电路是否故障?

回答
判断红外遥控发射电路是否故障,可以采用以下几种方法:

  1. 观察指示灯:如果遥控器上有指示灯,可以通过观察指示灯是否闪亮来判断遥控器是否有红外信号发射。

  2. 替换法:用一个确认无故障的遥控器去控制同一台设备,如果控制有效,则说明原遥控器可能存在故障。

  3. 万用表检测:使用万用表测量遥控器电池电压、按键电阻、红外发光二极管两端电压等,以判断电路是否正常。

  4. 收音机检测:利用收音机的中频载波与遥控器振荡频率接近的特点,通过收音机接收遥控器发出的信号来判断遥控器是否具有发射能力。

四、如何维修红外遥控发射电路的故障?

回答
维修红外遥控发射电路的故障,需要根据具体的故障原因采取相应的措施。以下是一些常见的维修方法:

  1. 更换电池:如果电池电量不足或接触不良,应更换新电池或清理电池卡簧。

  2. 清洁按键:如果按键故障是由于导电橡胶磨损或灰尘等杂物造成的,可以用软布蘸无水酒精清洗按键表面。

  3. 更换元件:如果振荡电路、红外发光二极管、驱动电路或编码集成电路等元件损坏,应更换相应的元件。

  4. 焊接修复:如果电路中存在开焊、断裂等现象,应使用焊接工具进行修复。

  5. 调整电路:如果故障是由于电路参数设置不当或元件老化等原因造成的,应对电路进行调整或更换老化元件。

通过以上方法,可以有效地解决红外遥控发射电路中的常见故障。

Fischer Elektronik公司的发展小趣事

在追求业务增长的同时,Fischer Elektronik也始终关注可持续发展和环保问题。公司积极采用环保材料和生产工艺,努力减少对环境的影响。此外,Fischer Elektronik还致力于推动绿色能源的应用,通过研发高效节能的产品,帮助客户降低能耗和减少碳排放。这种负责任的企业形象,不仅提升了公司的社会声誉,也为其在未来的发展中赢得了更多的支持和机遇。

AiT Semiconductor Inc公司的发展小趣事

随着技术的不断成熟和产品的不断完善,AiT公司开始积极拓展市场。他们通过参加国际电子展会、与国内外知名企业建立合作关系等方式,不断提升品牌知名度和市场份额。同时,公司还针对不同行业和领域的需求,推出了定制化的半导体解决方案,进一步扩大了应用范围。这一系列的举措使得AiT公司在市场中实现了跨越式发展。

天二科技(EVER OHMS)公司的发展小趣事

面对不断变化的市场需求和技术挑战,天二科技始终坚持持续创新和客户至上的经营理念。公司与客户保持紧密合作,深入了解客户的需求和反馈,不断推出符合市场需求的新产品和解决方案。同时,天二科技还注重培养员工的创新意识和能力,鼓励员工积极参与技术创新和研发工作。这种持续创新和客户至上的经营理念使得天二科技在电子行业中始终保持领先地位。

峰岹(Fortior Tech )公司的发展小趣事

面对不断变化的市场需求和技术挑战,天二科技始终坚持持续创新和客户至上的经营理念。公司与客户保持紧密合作,深入了解客户的需求和反馈,不断推出符合市场需求的新产品和解决方案。同时,天二科技还注重培养员工的创新意识和能力,鼓励员工积极参与技术创新和研发工作。这种持续创新和客户至上的经营理念使得天二科技在电子行业中始终保持领先地位。

HALO Electronics公司的发展小趣事

天二科技始终将产品质量视为企业的生命线。为了不断提升产品品质,公司引进了先进的自动化设备和生产工艺,并建立了严格的质量控制体系。经过多年的努力,天二科技的产品质量得到了显著提升,并先后通过了ISO9001、TS16949等多项国际质量管理体系认证。这些认证的取得不仅证明了天二科技在产品品质方面的卓越表现,更为公司赢得了客户的信任和市场的认可。

问答坊 | AI 解惑

请达人来解个疑,非接触式智能卡的

最近听说国外有黑客破解了  MIFARE CLASSIC的非接触型智能卡,那位达人能介绍下相关情况啊?严重不?好像信产部和广电总局什么的都很关注啊!…

查看全部问答>

555构成的单片机看门狗电路请教!

拿到一个555构成的单片机看门狗电路,搞不定,请高手帮忙分析一下。看门狗输出控制单片机电源引脚,输出低电平有效。输出高电平,单片机电源断电。 555输入VI接单片机IO口,RA=1K,RB=1M。单片机应该怎么控制,才能起到看门狗的作用呢? C:\\Do ...…

查看全部问答>

中嵌学院(中嵌教育)-嵌入式Linux驱动与内核开发-精品课程

中嵌学院(中嵌教育)-嵌入式Linux驱动与内核开发-精品课程  暑假班现热招中!                 贺! 中嵌教育全新升级改版,强势推出”中嵌学院”专业品牌。中嵌学院联合各签 ...…

查看全部问答>

有个公司需要招聘手机嵌入式开发人员,有谁感兴趣啊

RT,公司在南京,跨国手机研发中心,薪水面议。 如果有兴趣的朋友可以把简历发送到bomc_hr08@126.com 或者站内联系。…

查看全部问答>

PCB多边形敷铜出来的结果却是矩形敷铜的结果?

我想请教一个问题:我用PROTEL99SE画PCB板时,为什么多边形敷铜出来的结果却是矩形敷铜的结果,它并没有绕开元器件,是我的什么设置错了吗?我的PCB电路是从原理图里生成的,电气特性是正确的,请问这是为什么啊!谢谢了…

查看全部问答>

要采购设备,请代理联系我

  交流电源, 3相, 要求输出 400VAC 可调电源 示波器  100M 功率表   快联系我啊…

查看全部问答>

关于ADC的接地问题

我用的是stm32F103RBT6,两层板,大概7*5CM。 基本把模拟器件和数字器件分成左右两边布的。 5v-3.3V的LDO也是左右各一。 VCCA走线比较粗,也和VCC分开的。 模拟器件电流都很小的。 但是地是没有分开单点接地,都是用大量过孔和上下两层铺 ...…

查看全部问答>

求各位指点

本人准备用FPGA做一个SPWM波发生器,用于逆变电源,但是在用modelsim 仿真过程中发现,输出信号SPWM不存在,哪位能帮忙分析一下问题出在什么地方吗?谢谢。用的ISE 10.1  和modelsim6.5b.…

查看全部问答>

【低功耗】Altera Stratix III系列高性能FPGA功耗可降低50%

Altera公司近日发布Stratix III FPGA系列,该系列具有业界高密度高性能可编程逻辑器件中最低的功耗。Stratix III FPGA采用了TSMC的65nm工艺技术,其突破性创新包括硬件体系结构提升和Quartus II软件改进,与前一代Stratix II器件相比,这些新特性使 ...…

查看全部问答>

【设计工具】赛灵思Xilinx® 7 系列FPGA如何利用先进工艺大幅度降低功耗

  本白皮书与Xilinx® 28nm 7 系列 FPGA功耗有关的几个问题,详细解释了TSMC 28nm 高K金属栅工艺技术(HKMG) 、高性能低功耗工艺制程,也介绍了赛灵思全系列FPGA 如何利用28 nmHPL 工艺制程实现架构创新,以及如何通过降低静态功耗、动态功耗 ...…

查看全部问答>