网站内页做几个词,wordpress cookie伪造,电商网站建设功能,建筑施工单位有哪些公司读别人的代码#xff0c;就像撕洋葱#xff0c;每读一层#xff0c;哭一遍。 引言 ARM 处理器是冯诺依曼存储结构#xff0c;程序空间、RAM 空间及IO 映射空间统一编址#xff0c;除对对RAM 操作以外#xff0c;对外围IO、程序数据的访问均要通过加载/存储指令进… 读别人的代码就像撕洋葱每读一层哭一遍。 引言 ARM 处理器是冯诺依曼存储结构程序空间、RAM 空间及IO 映射空间统一编址除对对RAM 操作以外对外围IO、程序数据的访问均要通过加载/存储指令进行。
ARM 的加载/存储指令是可以实现字、半字、无符/有符字节操作批量加载/存储指令可实现一条指令加载/存储多个寄存器的内容大大提高效率。 一.ARM指令集 ARM指令集是一种计算机ARM操作指令系统可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令六大类。 其中跳转指令包括B不带返回、BL带返回跳转、BLX带返回和状态切换、BX带状态切换等数据处理指令包括MOV数据传送、MVN数据取反传送、CMP比较指令、CMN反值比较、TST位测试、TEQ相等测试、ADD加、ADC带进位加、SUB减法指令、SBC带借位减法、RSB逆向减法指令、RSC带借位的逆向减法、AND逻辑与指令、ORR逻辑或指令、EOR逻辑异或、BIC位清楚指令等程序状态寄存器访问指令包括MRS程序状态寄存器到通用寄存器的数据传送指令。 1.加载/存储指令 这些指令用于在内存中读取或写入数据。例如LDR加载寄存器和STR存储寄存器是常用的加载/存储指令。
LDR指令用于从内存读取数据放入寄存器中STR 指令用于将寄存器中的数据保存到内存。指令格式如下LDR{cond}{T} Rd,地址;加载指定地址上的数据(字)放入Rd中STR{cond}{T} Rd,地址;存储数据(字)到指定地址的存储单元要存储的数据在Rd中LDR{cond}B{T} Rd,地址;加载字节数据放入Rd中即Rd最低字节有效高24位清零STR{cond}B{T} Rd,地址;存储字节数据要存储的数据在Rd最低字节有效其中T 为可选后缀若指令有T那么即使处理器是在特权模式下存储系统也将访问看
成是处理器是在用户模式下。T在用户模式下无效不能与前索引偏移一起使用T。2.协处理器指令 这些指令用于与协处理器进行通信以执行某些特定的操作。例如CPSID禁用协处理器和CPSIE启用协处理器是常用的协处理器指令。
1. CDP 协处理器数据操作指令
ARM 处理器通过CDP 指令通知ARM 协处理器执行特定的操作。该操作由协处理器完成即对命令的参数的解释与协处理器有关指令的使用取决于协处理器。若协处理器不能成功地执行该操作将产生未定义指令异常中断。指令格式如下CDP{cond}coproc,opcodel,CRd,CRn,CRm{,opcode2}其中 coproc 指令操作的协处理器名。标准名为pn,n 为015。opcodel 协处理器的特定操作码。CRd 作为目标寄存器的协处理器寄存器。CRN 存放第1 个操作数的协处理器寄存器。CRm 存放第2 个操作数的协处理器寄存器。Opcode2 可选的协处理器特定操作码。CDP 指令举例如下CDP p7,0,c0,c2,c3,0 ;协处理器7 操作操作码为0可选操作码为0CDP p6,1,c3,c4,c5 ;协处理器操作操作码为12. LDC 协处理器数据读取指令
LDC指令从某一连续的内存单元将数据读取到协处理器的寄存器中。协处理器数据的数据的传送由协处理器来控传送的字数。若协处理器不能成功地执行该操作将产生未定义指令异常中断。指令格式如下LDC{cond}{L} coproc,CRd,地址其中 L 可选后缀指明是长整数传送。coproc 指令操作的协处理器名。标准名为pnn 为015CRd 作为目标寄存的协处理器寄存器。地址 指定的内存地址LDC 指令举例如下LDC p5,c2,[R2,#4];读取R24指向的内存单元的数据传送到协处理器p5的c2寄存器中LDC p6,c2,[R1] ;读取是指向的内存单元的数据传送到协处理器p6的c2 寄存器中3. STC 协处理器数据写入指令
STC指令将协处理器的寄存器数据写入到某一连续的内存单元中。
进行协处理器数据的数据传送由协处理器来控制传送的字数。
若协处理器不能成功地执行该操作将产生未定义指令异常中断。指令格式如下STC{cond}{L} coproc,CRd,地址其中 L 可选后缀指明是长整数传送。coproc 指令操作的协处理器名。标准名为pnn 为015CRd 作为目标寄存的协处理器寄存器。地址 指定的内存地址STC 指令举例如下STC p5,c1,[R0]STC p5,c1,[Ro,#-0x04]4. MCR ARM寄存器到协处理器寄存器的数据传送指令
MCR 指令将ARM 处理器的寄存器中的数据传送到协处理器的寄存器中。
若协处理器不能成功地执行该操作将产生未定义指令异常中断。指令格式如下MCR{cond}coproc,opcodel,Rd,CRn,CRm{,opcode2}其中coproc 指令操作的协处理器名。标准名为pnn 为015。cpcodel 协处理器的特定操作码。RD 作为目标寄存器。CRn 存放第1 个操作数的协处理器寄存器CRm 存放第2 个操作数的协处理器寄存器。Opcode2 可选的协处理器特定操作码。MCR 指令举例如下MCR p6,2,R7,c1,c2,MCR P7,0,R1,c3,c2,1,5. MRC 协处理器寄存器到ARM寄存器到的数据传送指令
MRC 指令将协处理器寄存器中的数据传送到ARM 处理器的寄存器中。
若协处理器不能成功地执行该操作。将产生未定义异常中断。指令格式如下MRC {cond}coproc,opcodel,Rd,CRn,CRm{,opcode2}其中coproc 指令操作的协处理器名。标准名为pnn为015。opcodel 协处理器的特定操作码。Rd 作为目标寄存器。CRn 存放第1 个操作数的协处理器寄存器。CRm 存放第2 个操作数的协处理器寄存器。opcode2 可选的协处理器特定操作码。MRC 指令举例如下MRC p5,2,R2,c3,c2MRC p7,0,R0,c1,c2,13.异常产生指令 ARM指令集中提供了两条产生异常的指令通过这两条指令可以用软件的方法实现异常。其中一条指令是SWISoftware Interrupt用于产生软中断从而实现从用户模式变换到管理模式。另一条指令是HVCHalf-word Virtual Control用于产生半虚拟控制异常。 SWI指令的语法格式为SWI{cond} immed_24其中cond表示指令执行的条件immed_24表示24位的立即数指定了用户请求的类型。在执行SWI指令时CPSR保存到管理模式的SPSR中执行转移到SWI向量在管理模式下执行相应的中断服务程序。 HVC指令的语法格式为HVC imm8其中imm8表示8位的立即数用于选择要触发的异常类型。执行HVC指令时处理器会切换到管理模式并触发相应的异常。 需要注意的是使用异常产生指令需要谨慎处理异常的优先级、嵌套和异常返回等问题以确保程序的正确性和稳定性。
//SWI指令产生软中断
MOV R0, #12 ; 设置12号软中断
SVC 0 ; 产生软中断中断号为0
在这个例子中指令MOV R0, #12将寄存器R0的值设置为12表示请求12号软中断。
指令SVC 0产生一个软中断中断号为0并将程序的控制流转移到相应的中断服务程序。//SWI指令产生软中断并传递参数
MOV R0, #34 ; 设置功能号为34
SWI 12 ; 产生软中断中断号为12传递功能号34给中断服务程序
在这个例子中指令MOV R0, #34将寄存器R0的值设置为34表示请求的服务
类型的功能号为34。指令SWI 12产生一个软中断中断号为12并将功能号34
传递给相应的中断服务程序。
4.跳转指令
两种方式可以实现程序的跳转
1使用跳转指令直接跳转跳转指令有跳转指令B带链接的跳转指令BL 带状态切换的跳转指令BX。
2直接向PC 寄存器赋值实现跳转。
1. B 跳转指令, 跳转到指定的地址执行程序。B{cond} label举例如下B WAITA ;跳转到WAITA 标号处B 0x1234 ;跳转到绝对地址0x1234 处跳转到指令B 限制在当前指令的±32Mb 的范围内。2. BL 带链接的跳转指令, 指令将下一条指令的地址拷贝到R14(即LR)链接寄存器中然后跳转到指定地址运行程序。BL{cond} label举例如下BL DELAY跳转指令B 限制在当前指令的±32MB 的范围内。BL 指令用于子程序调用。3. BX 带状态切换的跳转指令, 跳转到Rm 指定的地址执行程序若Rm 的位[0]为1则跳转时自动将CPSR 中的标志T 置位即把目标地址的代码解释为Thumb代码;若Rm 的位[0]为0则跳转时自动将CPSR 中的标志T 复位即把目标地址的代码解释为ARM代码。指令格式如下BX{cond} Rm举例如下ADRL R0,ThumbFun1BX R0 ;跳转到R0 指定的地址并根据R0 的最低位来切换处理器状态4. BLX, BLX目标地址跳转改变状态及保存PC值五.数据处理指令 包括ADD加法指令、ADC带进位加法指令、SUB减法指令、SBC带借位减法指令、RSB逆向减法指令和RSC带借位的逆向减法指令等。这些指令用于对两个操作数进行算术运算并将结果存储在目标寄存器中。
//ADD指令将两个寄存器相加并将结果存储到目标寄存器中
ADD R1, R2, R3 ; 将R2和R3相加结果存储到R1中六.程序状态寄存器处理 MRS程序状态寄存器到通用寄存器的数据传送指令和MSR通用寄存器到程序状态寄存器的数据传送指令。这些指令用于将程序状态寄存器的值读取到通用寄存器中或将通用寄存器的值写入到程序状态寄存器中。
//MSR指令将通用寄存器的值写入到程序状态寄存器中MSR PSR, R0 ; 将R0的值写入到PSR中二.ARM指令集具有以下特点
32位指令集ARM指令集使用32位的指令格式每个指令通常由操作码和操作数组成。支持条件执行ARM指令集支持条件执行即只有满足特定的条件时才会执行某些指令。支持寄存器操作ARM指令集支持对寄存器进行操作包括对寄存器进行读取、写入、移位等操作。支持内存访问ARM指令集支持对内存进行访问包括读取和写入操作。支持协处理器操作ARM指令集支持与协处理器进行通信以执行某些特定的操作。支持异常处理ARM指令集支持触发异常并进行处理。