ARM全汇编指令(详细)整理附实例快速掌握

这篇具有很好参考价值的文章主要介绍了ARM全汇编指令(详细)整理附实例快速掌握。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介

本文主要整理了arm常用的汇编指令,同时通过实例进一步讲述语句的用法。

二、ARM 汇编指令说明

2.1 32位数据操作指令

名字 功能
ADC 带进位加法
ADD 加法
ADDW 宽加法(可以加 12 位立即数)
AND 按位与
ASR 算术右移
BIC 位清零(把一个数按位取反后,与另一个数逻辑与)
BFC 位段清零
BFI 位段插入
CMN 负向比较(把一个数和另一个数的二进制补码比较,并更新标志位)
CMP 比较两个数并更新标志位
CLZ 计算前导零的数目
EOR 按位异或
LSL 逻辑左移
LSR 逻辑右移
MLA 乘加
MLS 乘减
MOVW 把 16 位立即数放到寄存器的底16位,高16位清0
MOV 加载16位立即数到寄存器(其实汇编器会产生MOVW——译注)
MOVT 把 16 位立即数放到寄存器的高16位,低 16位不影响
MVN 移动一个数的补码
MUL 乘法
ORR 按位或
ORN 把源操作数按位取反后,再执行按位或(
RBIT 位反转(把一个 32 位整数先用2 进制表达,再旋转180度——译注)
REV 对一个32 位整数做按字节反转
REVH/REV16 对一个32 位整数的高低半字都执行字节反转
REVSH 对一个32 位整数的低半字执行字节反转,再带符号扩展成32位数
ROR 圆圈右移
RRX 带进位的逻辑右移一格(最高位用C 填充,且不影响C的值——译注)
SFBX 从一个32 位整数中提取任意的位段,并且带符号扩展成 32 位整数
SDIV 带符号除法
SMLAL 带符号长乘加(两个带符号的 32 位整数相乘得到 64 位的带符号积,再把积加到另一个带符号 64位整数中)
SMULL 带符号长乘法(两个带符号的 32 位整数相乘得到 64位的带符号积)
SSAT 带符号的饱和运算
SBC 带借位的减法
SUB 减法
SUBW 宽减法,可以减 12 位立即数
SXTB 字节带符号扩展到32位数
TEQ 测试是否相等(对两个数执行异或,更新标志但不存储结果)
TST 测试(对两个数执行按位与,更新标志但不存储结果)
UBFX 无符号位段提取
UDIV 无符号除法
UMLAL 无符号长乘加(两个无符号的 32 位整数相乘得到 64 位的无符号积,再把积加到另一个无符号 64位整数中)
UMULL 无符号长乘法(两个无符号的 32 位整数相乘得到 64位的无符号积)
USAT 无符号饱和操作(但是源操作数是带符号的——译注)
UXTB 字节被无符号扩展到32 位(高24位清0——译注)
UXTH 半字被无符号扩展到32 位(高16位清0——译注)

2.2 32位存储器数据传送指令

名字 功能
LDR 加载字到寄存器
LDRB 加载字节到寄存器
LDRH 加载半字到寄存器
LDRSH 加载半字到寄存器,再带符号扩展到 32位
LDM 从一片连续的地址空间中加载多个字到若干寄存器
LDRD 从连续的地址空间加载双字(64 位整数)到2 个寄存器
STR 存储寄存器中的字
STRB 存储寄存器中的低字节
STRH 存储寄存器中的低半字
STM 存储若干寄存器中的字到一片连续的地址空间中
STRD 存储2 个寄存器组成的双字到连续的地址空间中
PUSH 把若干寄存器的值压入堆栈中
POP 从堆栈中弹出若干的寄存器的值

2.3 32位转移指令

名字 功能
B 无条件转移
BL 转移并连接(呼叫子程序)
TBB 以字节为单位的查表转移。从一个字节数组中选一个8位前向跳转地址并转移
TBH 以半字为单位的查表转移。从一个半字数组中选一个16 位前向跳转的地址并转移

2.4 其它32位指令

名字 功能
LDREX 加载字到寄存器,并且在内核中标明一段地址进入了互斥访问状态
LDREXH 加载半字到寄存器,并且在内核中标明一段地址进入了互斥访问状态
LDREXB 加载字节到寄存器,并且在内核中标明一段地址进入了互斥访问状态
STREX 检查将要写入的地址是否已进入了互斥访问状态,如果是则存储寄存器的字
STREXH 检查将要写入的地址是否已进入了互斥访问状态,如果是则存储寄存器的半字
STREXB 检查将要写入的地址是否已进入了互斥访问状态,如果是则存储寄存器的字节
CLREX 在本地的处理上清除互斥访问状态的标记(先前由 LDREX/LDREXH/LDREXB做的标记)
MRS 加载特殊功能寄存器的值到通用寄存器
MSR 存储通用寄存器的值到特殊功能寄存器
NOP 无操作
SEV 发送事件
WFE 休眠并且在发生事件时被唤醒
WFI 休眠并且在发生中断时被唤醒
ISB 指令同步隔离(与流水线和 MPU等有关——译注)
DSB 数据同步隔离(与流水线、MPU 和cache等有关——译注)
DMB 数据存储隔离(与流水线、MPU 和cache等有关——译注)
DMB 数据存储器隔离。DMB 指令保证: 仅当所有在它前面的存储器访问操作都执行完毕后,才提交(commit)在它后面的存储器访问操作。
DSB 数据同步隔离。比 DMB 严格: 仅当所有在它前面的存储器访问操作都执行完毕后,才执行在它后面的指令(亦即任何指令都要等待存储器访 问操作——译者注)
ISB 指令同步隔离。最严格:它会清洗流水线,以保证所有它前面的指令都执行完毕之后,才执行它后面的指令。

2.5 立即数

1、立即数:一个立即数是一块数据存储作为指令本身,而不是在一个中的一部分内容存储器位置或寄存器。立即值通常用于加载值或对常量执行算术或逻辑运算的指令。
2、比如一个数 10,把他存入内存中,高级语言表示法是 int i=10,这个数放入内存之前叫立即数,放入之后就不是了,再比如一个数 10,把他存入寄存器中,这个数放入寄存器之前叫立即数,放入之后就不是了。

2.6 逻辑数

逻辑数是用来表示二值逻辑中的"是"与"否"、或称"真"与"假"两个状态的数据。在计算机中,可以用一位基2码表示逻辑数据,即8个逻辑数据可以存放在1个字节中,可用其中的每个bit(位)表示一个逻辑数据。逻辑数可以用计算机中的基2码的两个状态"1"和"0"来表示,其中"1"表示真,"0"表示假。

2.7 逻辑运算和算术运算

逻辑运算是一种只存在于二进制中的运算。在计组中逻辑运算经常出现的是 或、与、非和异或,这几种运算方式。
算数运算我们平常十进制的 加减乘除,但因为在计算机中是二进制所以就只能是加法运算。在计算机中也可以算数运算也可以区分成进位的算数运算和不进位的算数运算。带进位的算数运算

三、实例讲解

3.1 MRS

将状态寄存器CPSR或SPSR的内容移动到一个通用寄存器

MRS R0,CPSR                         //传送CPSR的内容到R0
MRS R0,SPSR                         //传送 SPSR的内容到R0

3.2 MSR

将立即数或通用寄存器的内容加载到CPSR或SPSR的指定字段中

MSR CPSR,R0        //传送R0的内容到CPSR
MSR SPSR,R0        //传送R0的内容到SPSR
MSR CPSR_c,R0     //传送R0的内容到SPSR,但仅仅修改CPSR中的控制位域

3.3 PRIMASK

用于disable NMI和硬 fault之外的所有异常,它有效地把当前优先级改为 0(可编程 优先级中的最高优先级)。
CPS指令会更改CPSR中的一个或多个模式以及A、I和F位,但不更改其他CPSR位。CPSID就是中断禁止,CPSIE中断允许,

A:表示启用或禁止不精确的中止;I:表示启用或禁止IRQ中断;F:表示启用或禁止FIQ中断

3.4 FAULTMASK

CPSIE f; / CPSID f;

MSR FAULTMASK,R0

FAULTMASK更绝,它把当前优先级改为-1。这么一来,连硬fault都被掩蔽了。使用方案与
PRIMASK的相似。但要注意的是,FAULTMASK会在异常退出时自动清零。

3.5 BX指令

BX{条件} 目标地址
BX 指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM 指令,也可以是Thumb指令。

3.6 零寄存器 wzr、xzr

因为我们在使用 str 的是没法使用立即数 0 给寄存器赋值,所以 wzr xzr就是干这个事情的。是一个比较特殊又常常见到的寄存器。

3.7 立即寻址指令

SUBS R0,R0,#1   //R0 减 1 ,结果放入 R0 ,并且影响标志位
MOV R0,#0xFF000 //将立即数 0xFF000 装入 R0 寄存器 寄存器寻址指令举例如下: 
MOV R1,R2    //将 R2 的值存入 R1
SUB R0,R1,R2 //将 R1 的值减去 R2 的值,结果保存到 R0

3.8 寄存器间接寻址指令

LDR R1,[R2]    //将 R2 指向的存储单元的数据读出保存在 R1 中 
SWP R1,R1,[R2] //将寄存器 R1 的值和 R2 指定的存储单元的内容交换,将R2的数值作为一个地址,将此地址处的数值与R1中的内容交换

3.9 寄存器移位寻址指令

MOV R0,R2,LSL #3     //R2 的值左移 3 位,结果放入R0 ,即是R0=R2×8 
ANDS R1,R1,R2,LSL R3  //R2 的值左移 R3 位,然后和R1相“与”操作,结果放入R1

3.10 基址寻址指令

LDR R2,[R3,#0x0C]  //读取 R3+0x0C 地址上的存储单元的内容,放入 R2 
STR R1,[R0,#-4]! 	//先 R0=R0-4 ,然后把 R1 的值寄存到 R0 指定的存储单元 

3.11 多寄存器寻址指令

LDMIA R1!,{R2-R7,R12}   //将 R1 指向的单元中的数据读出到R2 ~R7、R12 中 (R1自动加1) 
STMIA R0!,{R2-R7,R12}    //将寄存器 R2 ~ R7 、 R12 的值保存到 R0 指向的存储单元中(R0自动加1)

3.12 无条件转移B,BAL

举例: B LABEL ; LABEL为某个位置

CMP      x3,x4
B.CS     {pc}+0x10 ; 0xc000800094

BCC是指CPSR寄存器条件标志位为0时的跳转。结合CMP R3, R1,意思是比较R3 R1寄存器,当相等时跳转到环测试。因为CMP指令减去两个值并在CPSR中设置条件标志位。

3.13 条件转移

BEQ 相等
BNE 不等
BPL 非负
BMI 负
BCC 无进位
BCS 有进位
BLO 小于(无符号数)
BHS 大于等于(无符号数)
BHI 大于(无符号数)
BLS 小于等于(无符号数)
BVC 无溢出(有符号数)
BVS 有溢出(有符号数)
BGT 大于(有符号数)
BGE 大于等于(有符号数)
BLT 小于(有符号数)
BLE 小于等于(有符号数)
blr Xm:跳转到由Xm目标寄存器指定的地址处,同时将下一条指令存放到X30寄存器中。例如:blr x20.
br Xm:跳转到由Xm目标寄存器指定的地址处。不是子程序返回
ret {Xm}:跳转到由Xm目标寄存器指定的地址处。是子程序返回。Xm可以不写,默认是X30.

3.14 WFE 和 WFI 对比

wfi 和 wfe 指令都是让ARM核进入standby睡眠模式。wfi是直到有wfi唤醒事件发生才会唤醒CPU,wfe是直到wfe唤醒事件发生,这两类事件大部分相同。唯一不同之处在于wfe可以被其他CPU上的sev指令唤醒,sec指令用于修改event寄存器的指令。

WFE
Wait For Event,是否实现此指令是可选的。如果此指令未实现,它将作为NOP指令来执行。如果指令作为NOP在目标处理器上执行,汇编程序将生成诊断消息。

SEV
Set Event,其是否实现是可选的。如果未实现,它将作为NOP执行。如果指令作为NOP在目标上执行,汇编程序将生成诊断消息。
SEV在ARMv6T2中作为NOP指令执行。

3.15 MRC:协处理器寄存器到ARM寄存器的数据传输

MRC指令将协处理器的寄存器中数值传送到ARM处理器的寄存器中。如果协处理器不能成功地执行该操作,将产生未定义的指令异常中断。

MRC p2,5,r3,c5,c6协处理器p2把c5和c6经过5操作的结果赋给r3
MRC p3,9,r3,c5,c6,2协处理器p3把c5和c6经过9操作(类型2)的结果赋给r3

3.16 MCR:寄存器到协处理器寄存器的数据传输

MCR指令将ARM处理器的寄存器中的数据传送到协处理器的寄存器中。如果协处理器不能成功地执行该操作,将产生未定义的指令异常中断。

MCR p6,0,r4,c5,c6协处理器p6把r4执行0操作后将结果存放进c5

3.17 STM:将指令中寄存器列表中的各寄存器数值写入到连续的内存单元中

STM指令是Store Multiple的缩写,它的作用是将多个寄存器的值保存到栈中。在ARM汇编中,栈是一种后进先出 (LIFO)的数据结构,用来存储临时数据和函数调用过程中的返回地址

STM指令的语法如下:

STM{条件码}{模式} SP!,{寄存器列表} 

其中,条件码是可选项,用来指定条件执行STM指令的条件;模式用来指定存储模式,

1、寻址模式(mode)
mode决定了基址寄存器是在执行指令前地址增减还是指令执行后增减.
I为Increment(递增)
D为Decrement (递减)
B为Before
A为After

常用的模式有IA (递增后存储) 、IB (递增前存储) 、DA (减后存储)和DB(递减前存储);SP是栈指针寄存器,用来指定栈的起始地址;寄存器列表指定要保存的寄存器。
另外四种也是寻址模式
FD 慢递减堆栈
FA 满递增堆栈
ED 空递减堆栈
EA 空递增堆栈

STMFD SP![RO,R1,R2)

在上述代码中,STMFD指令存储了RO、R1和R2的值到栈中。SP!表示栈指针寄存器递增,即存储完后栈指针自动增加,以便下一次保存操作。

2、“!”
在传输数据完成后,更新基址寄存器中的值

3、“^”

在数据传输完成后,将SPSR的值复制到CPSR中,常用于异常模式下的返回.

3.18 LDM:将数据从连续内存单元中读取到指令的寄存器列表中的各寄存器中

LDMIA

LDMIA R0! ,{R3-R9} ; //将R0指向的地址上连续空间的数据,保存到R3-R9当中,!表示R0值更新,IA后缀表示按WORD递增

3.19 LDR:从内存中将一个32位的字读取到目标寄存器

ldr 加载指令: LDR{条件} 目的寄存器,<存储器地址>

LDR指令用亍从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用于从存储器中读取32位的字数据到通用寄存器,然后对数据进行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。

3.20 STR:将32位字数据写入到指定的内存单元

STR指令的格式为:

STR{条件} 源寄存器,<存储器地址>

STR指令用亍从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常用,寻址方式灵活多样,使用方式可参考指令LDR。

STR R0,[R1],#8  ;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。
STR R0,[R1,#8]  ;将R0中的字数据写入以R1+8为地址的存储器中。
str     r1, [r0]  ;将r1寄存器的值,传送到地址值为r0的(存储器)内存中

3.21 SWI:软中断指令

SWI指令格式如下:

SWI{cond} immed_24

MOV R0,#34 ;设置功能号为34
SWI 12 ;产生软中断,中断号为12

3.22 BIC清除位

BIC指令的格式为: BIC{条件}{S} 目的寄存器,操作数1,操作数2

BIC指令用于清除操作数1的某些位,并把结果放置到目的寄存器中。操作数1应是一个寄存器, 操作数2可以是一个寄存器、被移位的寄存器、或一个立即数。操作数2为32位的掩码,如果在 掩码中置了某一位1,则清除这一位。未设置的掩码位保持不变。

BIC R0,R0,#0X1F
0X1F=11111B
//其含义:清除R0的bit[4:0]位。
BIC R4, R4, #0xFF000000 指令将E4高8位清除为0

3.23 EOR逻辑异或指令

EOR{<cond>}{S} <Rd>,<Rn>,<shifter_operand>

逻辑异或EOR(Exclusive OR)指令将寄存器中的值和<shifter_operand>的值执行按位“异或”操作,并将执行结果存储到目的寄存器中,同时根据指令的执行结果更新CPSR中相应的条件标志位。

3.24 CMN与负数对比

CMN 同于 CMP,但它允许你与负值进行比较,比如难于用其他方法实现的用于结束列表的 -1。这样与 -1 比较将使用:
CMN R0, #1 ; 把 R0 与 -1 进行比较

3.25 MVN取反

将每一位操作数都取反,若为有符号的数据则进行补码保存

MVN R0 0x4

其中上图中的0x4用二进制数(00000100)表示, 然后对其取反得到(11111011),可见取反后为负数,因此针对负数求其补码则为储存在R0中的值,先将负数最高位转换为正数(01111011)取反,得到(10000100),加1得到其补码,最后结果为(10000101),即结果为-5;

3.26 LSL(Logical Shift Left)左移运算

用于将寄存器的值向左移位,末尾填充0。在ARM处理器中,每个寄存器都有32位,当LSL被使用时,指令将寄存器中的二进制数值向左移动指定的位数,并用0填充未使用的右侧位数。文章来源地址https://www.toymoban.com/news/detail-719749.html

实例解析

IMPORT |Image$RW_IRAM1$Base|            //从别处导入data段的链接地址
IMPORT |Image$RW_IRAM1$Length|         //从别处导入data段的长度
IMPORT |Load$RW_IRAM1$Base|            //从别处导入data段的加载地址
IMPORT |Image$RW_IRAM1$ZI$Base|        //从别处导入ZI段的链接地址
IMPORT |Image$RW_IRAM1$ZI$Length|      //从别处导入ZI段的长度
Load$$region_name$$Base 	//Load address of the region.
Load$$region_name$$Length 	//Region length in bytes.
Load$$region_name$$Limit 	//Address of the byte beyond the end of the execution region.
//复制数据段
LDR R0, = |Load$RW_IRAM1$Base|           //将data段的加载地址存入R0寄存器
LDR R1, = |Image$RW_IRAM1$Base|   //将data段的链接地址存入R1寄存器
LDR R2, = |Image$RW_IRAM1$Length| //将data段的长度存入R2寄存器
CopyData                
SUB R2, R2, #4                      //每次复制4个字节的data段数据
LDR R3, [R0, R2]                    //把加载地址处的值取出到R3寄存器
STR R3, [R1, R2]                   //把取出的值从R3寄存器存入到链接地址                                        
CMP R2, #0                         //将计数和0相比较
BNE CopyData                      //如果不相等,跳转到CopyData标签处,相等则往下执行

//清除BSS段
LDR R0, = |Image$RW_IRAM1$ZI$Base|   //将bss段的链接地址存入R1寄存器
LDR R1, = |Image$RW_IRAM1$ZI$Length| //将bss段的长度存入R2寄存器
CleanBss        
SUB R1, R1, #4                                                //每次清除4个字节的bss段数据
MOV R3, #0                                                  //将0存入r3寄存器
STR R3, [R0, R1]                                        //把R3寄存器存入到链接地址                                        
CMP R1, #0                                                 //将计数和0相比较
BNE CleanBss                       //如果不相等,跳转到CleanBss标签处,相等则往下执行

IMPORT  mymain                                              //通知编译器要使用的标号在其他文件
BL                mymain                                    //跳转去执行main函数
B                .                                          //原地跳转,即处于循环状态
ENDP
ALIGN                                                      //填充字节使地址对齐
END                                                        //整个汇编文件结束

到了这里,关于ARM全汇编指令(详细)整理附实例快速掌握的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ARM汇编 : 汇编指令,伪指令,汇编程序格式

    计算机的指令集一般可分为4种: 复杂指令集(CISC) 精简指令集(RISC) 显式并行指令集(EPIC) 超长指令字指令集(VLIW) ARM指令集属于RISC,RISC相对于CISC指令集,主要有以下特点: ●Load/Store架构,CPU不能直接处理内存中的数据,要先将内存中的数据Load(加载)到寄存器中

    2024年02月12日
    浏览(33)
  • 【ARM64 常见汇编指令学习 12 -- ARM 汇编函数 的学习】

    上篇文章:ARM64 常见汇编指令学习 11 – ARM 汇编宏 .macro 的学习 下篇文章:ARM64 常见汇编指令学习 13 – ARM 汇编 ORG 伪指令学习 ARM汇编中的函数定义并不像高级语言那样有特定的语法,但通常可以通过 标签(label) 和 子程序调用指令 (如BL,BLX) 来实现类似于函数的功能。 例如

    2024年02月14日
    浏览(44)
  • 【ARM64 常见汇编指令学习 14 -- ARM 汇编 .balign,.balignw,.balign 伪指令学习】

    上篇文章:ARM64 常见汇编指令学习 13 – ARM 汇编 ORG 伪指令学习 下篇文章:ARM64 常见汇编指令学习 15 – ARM 标志位的学习 .balignl 是一个伪操作符,伪操作符的意思就是机器码里,并没有一个汇编指令与其对应,是编译器来实现其功能的。. balignl 是 .balign 的变体。 .balignl 完整

    2024年02月14日
    浏览(44)
  • 【ARM64 常见汇编指令学习 16 -- ARM64 SMC 指令】

    上篇文章:ARM64 常见汇编指令学习 15 – ARM64 标志位的学习 下篇文章:ARM64 常见汇编指令学习 17 – ARM64 BFI 指令 在ARMv8架构中,同步异常主要包括以下几种: Undefined Instruction :未定义指令异常,当处理器尝试执行一条未定义的指令时会触发。 Supervisor Call (SVC) :这是一种特殊

    2024年02月13日
    浏览(44)
  • ARM64 常见汇编指令学习 11 -- ARM 汇编宏 .macro 的学习

    下篇文章:ARM64 常见汇编指令学习 12 – ARM 汇编函数 的学习 上篇文章:ARM64 常见汇编指令学习 10 – 无符号位域提取指令 BFXIL 在 ARM 汇编中,“ .macro ” 是用来定义一个宏的指令。宏可以看作是一个可以在汇编程序中重用的代码段。当调用宏时,汇编器会将宏的内容插入到调

    2024年02月14日
    浏览(44)
  • ARM 汇编比较指令-条件执行指令

    比较指令用来比较两个数大小,或者是否相等,比较指令的运算结果会影响CPSR寄存器的NZC、V标识位,具体的标志位可以参考前面的CPSR寄存器介绍,比较指令的格式如下/ CMP {cond} Rn, operand2 比较两个数大小 CMN {cond}Rn, operand2 取负比较  比较指令的使用示例及说明如下。

    2024年02月03日
    浏览(48)
  • ARM 汇编指令:(五)CMP指令

    目录 1.CMP比较指令 2.指令条件码 cond CMP指令是计算机指令集中的一种比较指令,用于比较两个操作数的大小关系或相等性,并根据比较结果设置或更新条件码寄存器(或程序状态字)的标志位。 指令格式:CMP  第一操作寄存器  第二操作数 第一操作寄存器:参与比较的第一

    2024年04月13日
    浏览(56)
  • 【理解ARM架构】不同方式点灯 | ARM架构简介 | 常见汇编指令 | C与汇编

    🐱作者:一只大喵咪1201 🐱专栏:《理解ARM架构》 🔥格言: 你只管努力,剩下的交给时间! 在学习C语言的时候,我们会写个 Hello World 程序来入门,当我们写ARM程序,也该有一个简单的程序引领我们入门,这个程序就是点亮LED。 查看原理图,确定控制LED的引脚: 如上图是

    2024年02月05日
    浏览(47)
  • ARM-汇编指令

    链接脚本文件 作用:给编译器进行使用,告诉编译器各个段,如何进行分布 1.汇编指令:编译器将一条编译指令编译生成机器码,占用代码段空间 2.伪指令:伪指令本身不是一条指令,编译器可以将器编译生成多条指令,共同完成一条指令功能 3.伪操作:指导编译器对代码如

    2024年02月11日
    浏览(41)
  • ARM(汇编指令)

     

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包