【ARM汇编速成】零基础入门汇编语言之基本认识(一)

简介: 【ARM汇编速成】零基础入门汇编语言之基本认识(一)

一.汇编的前世今生

 汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。

  汇编是上世纪五十年代人们为了摆脱机器语言的繁琐而创造的,因此,比起机器语言,汇编语言具有更高的机器相关性,更加便于记忆和书写,但又同时保留了机器语言高速度和高效率的特点。但汇编语言仍是面向机器的语言,很难从其代码上理解程序设计意图,设计出来的程序不易被移植。


       故而为了增加程序的效率与可移植性,在同时代,又诞生了第一个高级语言——Fortran。在高级语言下的今天,我们为何还要学习汇编呢?不仅是因为汇编独有的效率与速度,而且能帮助我们更好的理解底层,进行深入学习。

了解汇编语言会使人意识到:


程序如何与OS,处理器和BIOS交互;

内存和其他外部设备中数据的表示方式;

处理器如何访问和执行指令;

指令如何访问和处理数据;

程序如何访问外部设备。

使用汇编语言的其他优点是:


它需要更少的内存和执行时间;

它可以更轻松地实现特定于硬件的复杂作业。

适用于时间紧迫的工作;

它最适合编写中断服务程序和其他内存驻留程序。

二.寄存器

       我们对ARM的所有指令操作基本上都是建立在寄存器上的,所以在学习ARM汇编指令前我们必须先了解ARM内部的寄存器。


       ARM 总共有 37 个寄存器,分为七个模式,但是每种模式下最多只能看到 18 个寄存器。(其中有些寄存器虽然同名,但在某种特定模式才会发挥特定作用,只有切换到对应模式时才能看到,这种设计叫做影子寄存器(banked register))。


37个寄存器都是 32 位长度。

37 个寄存器中 30 个为“通用”型,1 个固定用作 PC,一个固定用作 CPSR,5 个固定用作 5 种异常模式下的 SPSR。

上述的 30 个为“通用”型,是指这 30 个寄存器区别于后面的寄存器:PC 寄存器固定只能是 r15 寄存器,不能将其他寄存器作为 PC 寄存器使用; CPSR 和 SPSR 寄存器也是固定的,不能将其他寄存器作为 PC 寄存器使用。

七种模式:

(1)USR(10000):正常用户模式,程序正常执行模式。

(2)FIQ(10001):快速中断模式,以处理快速情况,支持高速数据传输或通道处理。

(3)IRQ(10010):外部中断模式,普通中断处理

(4)SVC(10011):操作系统保护模式(管理模式),即操作系统使用的特权模式(内核),处理软件中断swi  reset

(5)abt(10111):数据访问中止模式,用于 虚拟存储器 和 存储器 保护

(6)und(11011):未定义指令终止模式,用于支持通过软件仿真硬件的协处理器

(7)sys(11111):系统模式,用于运行特权级的操作系统任务( armv4 以上版本才具有)


功能:

R0-R3 用作传入函数参数,传出函数返回值。在子程序调用之间,可以将 r0-r3 用于任何用途。

被调用函数在返回之前不必恢复 r0-r3。如果调用函数需要再次使用 r0-r3 的内容,则它必须保留这些内容。

R4-R11 被用来存放函数的局部变量。如果被调用函数使用了这些寄存器,它在返回之前必须恢复这些寄存器的值。

R12 是内部调用暂时寄存器 ip。它在过程链接胶合代码(例如,交互操作胶合代码)中用于此角色。

在过程调用之间,可以将它用于任何用途。被调用函数在返回之前不必恢复 r12。

R13 是栈指针 sp。它不能用于任何其它用途。sp 中存放的值在退出被调用函数时必须与进入时的值相同。

R14 是链接寄存器 lr。如果您保存了返回地址,则可以在调用之间将 r14 用于其它用途,程序返回时要恢复

R15 是程序计数器 PC。它不能用于任何其它用途。

注意:在中断程序中,所有的寄存器都必须保护,编译器会自动保护R4~R11





相关文章
|
2月前
|
存储 编译器 C语言
【ARM汇编速成】零基础入门汇编语言之C与汇编混合编程(四)
【ARM汇编速成】零基础入门汇编语言之C与汇编混合编程(四)
【ARM汇编速成】零基础入门汇编语言之C与汇编混合编程(四)
|
2月前
|
存储 移动开发 C语言
【ARM汇编速成】零基础入门汇编语言之指令集(三)
【ARM汇编速成】零基础入门汇编语言之指令集(三)
|
2月前
|
编译器 C语言 计算机视觉
【ARM汇编速成】零基础入门汇编语言之指令集(二)
【ARM汇编速成】零基础入门汇编语言之指令集(二)
177 0
|
4月前
|
程序员 编译器 数据处理
汇编高手秘籍:解锁性能优化新境界,用汇编语言让你的程序飞起来!
【8月更文挑战第31天】汇编语言作为编程基石,其高效性能备受推崇。尽管现代软件开发更偏爱高级语言,但在性能要求极高的场景下,汇编优化仍不可或缺。本文通过示例代码介绍四种优化技巧:循环展开、寄存器分配、指令重排及SIMD指令使用,显著提升执行效率。同时强调分析性能瓶颈、测试优化效果及保持代码可读性的重要性,助力开发者在关键代码路径上实现性能突破。
99 0
|
4月前
51单片机汇编语言点亮一位数码管,并计时(超详细分析汇编语言)
51单片机汇编语言点亮一位数码管,并计时(超详细分析汇编语言)
172 0
|
6月前
|
C语言
程序技术好文:部分ARM汇编指令解读
程序技术好文:部分ARM汇编指令解读
|
5天前
|
机器学习/深度学习 弹性计算 人工智能
阿里云服务器架构有啥区别?X86计算、Arm、GPU异构、裸金属和高性能计算对比
阿里云ECS涵盖x86、ARM、GPU/FPGA/ASIC、弹性裸金属及高性能计算等多种架构。x86架构采用Intel/AMD处理器,适用于广泛企业级应用;ARM架构低功耗,适合容器与微服务;GPU/FPGA/ASIC专为AI、图形处理设计;弹性裸金属提供物理机性能;高性能计算则针对大规模并行计算优化。
|
2月前
|
编解码 弹性计算 应用服务中间件
阿里云服务器Arm计算架构解析:Arm计算架构云服务器租用收费标准价格参考
阿里云服务器架构分为X86计算、Arm计算、高性能计算等多种架构,其中Arm计算架构以其低功耗、高效率的特点受到广泛关注。本文将深入解析阿里云Arm计算架构云服务器的技术特点、适用场景以及包年包月与按量付费的收费标准与最新活动价格情况,以供选择参考。
|
2月前
|
机器学习/深度学习 弹性计算 编解码
阿里云服务器计算架构X86/ARM/GPU/FPGA/ASIC/裸金属/超级计算集群有啥区别?
阿里云服务器ECS提供了多种计算架构,包括X86、ARM、GPU/FPGA/ASIC、弹性裸金属服务器及超级计算集群。X86架构常见且通用,适合大多数应用场景;ARM架构具备低功耗优势,适用于长期运行环境;GPU/FPGA/ASIC则针对深度学习、科学计算、视频处理等高性能需求;弹性裸金属服务器与超级计算集群则分别提供物理机级别的性能和高速RDMA互联,满足高性能计算和大规模训练需求。
|
2月前
|
存储 Docker 容器
ARM架构鲲鹏主机BClinux离线安装docker步骤
下载并安装适用于ARM架构的Docker CE二进制文件,解压后移动至/usr/bin目录。创建docker组,配置systemd服务脚本(docker.service、docker.socket、containerd.service),重载systemd配置,启动并启用docker服务。编辑daemon.json配置存储驱动、镜像加速地址等,最后拉取所需镜像。
53 0