本文作为本人学习过程中的记录及时不时的突发奇想偶记。鄙人菜鸟一只,文中如有错误或疏漏,若读者肯不吝赐教,在下感激零涕。文章一直不断更新中
一、汇编语言
汇编语言是一种应用计算机、微处理器、微控制器或其它可编程器件的低级语言(符号语言)。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号带图指令或操作数的地址。特定的汇编语言和特定的机器指令集是一一对应的,不同平台之间不可移植。特点:①操作的不是具体的数据而是寄存器或者存储器。所以速度相较于处理数据为主的高级语言要快。
②在不同平台、处理器架构间移植性差,程序编写兼顾软硬件,书写复杂。
二、汇编语言 指令集和不同处理器架构的关系 指令集(不同处理器平台可以识别的一套汇编指令)架构决定了处理器如何识别汇编语言,以及如何同上层进行通信。 处理器架构的异同在识别了汇编语言之后,例如在一个处理器中设计三个ALU,在一个周期里执行三次加法运算 ARM是RICS结构处理器三 X86架构微处理器的寄存器说明 eax ebx ebp esp..都是x86的通用寄存器的名称。 EAX:累加器 EBX:是基地址寄存器。 ESP:专用做堆栈指针,也称栈顶指针。
四、常见汇编指令(arm架构)
(一)、数据的存储、读取指令1. LDR r0,[pc,#520] ;@0x08001070 // ARM指令集- 字数据加载指令:存储器→寄存器,从存储器地址pc+520处读取数据加载到r0寄存器中。
LDRB 字节数据加载指令 / LDRH - 半字数据加载指令2. STR r0,[r1] ; //ARM指令集 - 字数据存储指令 : 存储器→寄存器, 将寄存器r0中的数据存放到以r1为地址的存储器中。
(二)、跳转指令
在ARM程序中实现程序跳转有两种方式,一种是使用跳转指令 :B / BL / BLX / BX;另一种方式是直接在程序计数器PC指针中直接写入要跳转目的地址的值。
1.B Label ; // ARM处理器跳转到给定的地址并执行。
2.BL Label; //处理器跳转到给定的地址,并将当前PC的地址保存到R14寄存器中,实现跳转后的程序返回。是实现子程序的一种通常手段。
3.BLX Label; // 功能同2,且将处理器的工作状态由ARM状态切换到Thumb状态。用于实现主程序和子程序应用不同指令集的状况。
4.BX Label; //目标既可以是ARM指令,也可以是Thumb指令。
(三)、特殊功能寄存器的访问 xPSR /PRIMASK / FAULTMASK / BASEPRI / CONTROL
1.MRS R0 , BASEPRI ;读取BASEPRI到R0中
2.MSR PRIMASK,R0 ;写r0总的内容到PRIMASK中
(四)、
IMPORT 表示该标号是一个外部变量的标号
EXPORT 表示标号是在本文件中定义
EQC 定义一个宏(类似define)
2.MOV指令 汇编语言中的传递立即数指令。格式: MOV AX 2000H //将十六位数据2000H放到AX寄存器中 (更多格式和用法 )