【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





相关文章
|
1天前
|
存储 编译器 C语言
【ARM汇编速成】零基础入门汇编语言之C与汇编混合编程(四)
【ARM汇编速成】零基础入门汇编语言之C与汇编混合编程(四)
【ARM汇编速成】零基础入门汇编语言之C与汇编混合编程(四)
|
1天前
|
存储 移动开发 C语言
【ARM汇编速成】零基础入门汇编语言之指令集(三)
【ARM汇编速成】零基础入门汇编语言之指令集(三)
|
1天前
|
编译器 C语言 计算机视觉
【ARM汇编速成】零基础入门汇编语言之指令集(二)
【ARM汇编速成】零基础入门汇编语言之指令集(二)
|
2月前
|
程序员 编译器 数据处理
汇编高手秘籍:解锁性能优化新境界,用汇编语言让你的程序飞起来!
【8月更文挑战第31天】汇编语言作为编程基石,其高效性能备受推崇。尽管现代软件开发更偏爱高级语言,但在性能要求极高的场景下,汇编优化仍不可或缺。本文通过示例代码介绍四种优化技巧:循环展开、寄存器分配、指令重排及SIMD指令使用,显著提升执行效率。同时强调分析性能瓶颈、测试优化效果及保持代码可读性的重要性,助力开发者在关键代码路径上实现性能突破。
60 0
|
2月前
51单片机汇编语言点亮一位数码管,并计时(超详细分析汇编语言)
51单片机汇编语言点亮一位数码管,并计时(超详细分析汇编语言)
|
4月前
|
C语言
程序技术好文:部分ARM汇编指令解读
程序技术好文:部分ARM汇编指令解读
|
5月前
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
153 2
|
22天前
几组汇编指令的比较
几组汇编指令的比较
|
5月前
|
存储 机器学习/深度学习 移动开发
汇编语言指令系列
汇编语言指令系列
384 0
|
3月前
|
存储 机器学习/深度学习 芯片
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表