ARM-汇编指令

news2024/11/23 11:33:04

一,map.lds文件

链接脚本文件

作用:给编译器进行使用,告诉编译器各个段,如何进行分布

/*输出格式:32位可执行程序,小端对齐*/
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
/*输出架构:arm架构*/
OUTPUT_ARCH(arm)
/*入口:_start*/
ENTRY(_start)
/*段*/
SECTIONS
{
    . = 0x00000000;/*入口地址*/
    . = ALIGN(4);/*4字节对齐*/
    .text      :
    {
        ./Objects/start.o(.text) /*第一个文件存放start.o文件,指定start.o位置*/
        *(.text) /*其余文件没有要求,编译器随便放*/
    }
    . = ALIGN(4);
    .rodata : /*只读数据段*/
    { *(.rodata) }
    . = ALIGN(4);
    .data :  /*数据段*/
    { *(.data) }
    . = ALIGN(4);
    __bss_start = .; 
    .bss : /*.bss段*/
     { *(.bss) }
    __bss_end__ = .;
}

二,汇编

1.汇编指令:编译器将一条编译指令编译生成机器码,占用代码段空间

2.伪指令:伪指令本身不是一条指令,编译器可以将器编译生成多条指令,共同完成一条指令功能

3.伪操作:指导编译器对代码如何进行编译,所有以 . 开头的伪操作,伪操作不占用代码段空间

基本格式:

<opcede>{cond}{s}Rd,Rn,#oprand2

<opcede>指令码

{cond}条件码:1)加条件码:指令有条件执行,2)不加条件码:指令默认无条件执行

{s}:加s,影响CPSR寄存器,不加s,不影响CPSR寄存器

Rd:目标寄存器

Rn:第一操作寄存器

#oprand2:第二操作数

        1)立即数:从判断的数中,找到0~0xff之间的数 ===> 判断的这个数所有1包含,将找到的0~0xff之间的数,循环右移偶数位 ===> 低位移出,补到高位,如果能够得到你要判断的那个数,说明这个数就是立即数

        2)寄存器

        3)有效数:将一个数按位取反之后,如果这个数为立即数,说明这个数为有效数

注意事项:

1.{cond}{s}需要连在一起编写

2.Rd,Rn,#oprand2需要用逗号分隔开

3.{cond}{s}和Rd,Rn,#oprand2需要用空格隔开

4.一条汇编指令占用一行,并且没有分号,不区分大小写

三,指令

1.数据操作指令

1.1数据搬移指令 MOV MVN 

相当于赋值

指令格式:{cond}{s} Rd,#oprand2

mov ====> 将第二操作数进行赋值

mvn ====> 将第二操作数,按位进行取反之后,进行赋值

1.2伪指令 LDR

可用于所有数的赋值

格式:ldr 寄存器,=值 

1.3移位操作指令 LSR LSR ROR ASR

指令格式:{cond}{s} Rd,Rn,#oprand2

lsl:逻辑左移 =====> 特点:无符号数左移,高位移出,低位补0

lsr:逻辑右移 =====> 特点:无符号数右移,低位移出,高位补0

ror:循环右移 =====> 特点:低位移出,补到高位

asr:算数右移 =====> 特点:低位移出,高位补符号位

1.4位运算操作指令 AND ORR EOR BIC

格式:{cond}{s} Rd,Rn,#oprand2

and:按位与 =====> 与0清0,与1不变

orr:按位或 =====> 或0不变,或1置1

eor:按位异或 =====> 异或0不变,异或1取反(相同为0,相异为1)

bic:按位清零 =====> 第二操作哪一位写1,对应位进行清0

1.5算术运算指令 ADD ADC SUB SBC MUL

指令格式:{cond}{s} Rd,Rn,#oprand2

add:普通加法指令

adc:带进位加法指令 ====> CPSR寄存器中C位标志位

sub:普通减法指令

sbc:带借位减法指令

mul:乘法指令 ====> 没有第二操作数,{cond}{s} Rd,Rn

1.6比较指令 CMP

指令格式:{cond} Rn,#oprand2

注意点:

1)比较指令没有目标寄存器

2)比较指令本质做减法运算

3)比较指令的执行结果,会影响CPSR寄存器的NZCV位,并且不需要加s

4)比较指令和条件码搭配使用

5)前面我们所有学习的指令,都是默认无条件执行,比较指令有条件指令

图片已经损坏 :<图片已经损坏 :<

 2.跳转指令 B BL

指令格式:b / bl{cond} 标签 ====> 跳转到标签下,第一条指令执行

b:有去无回,不会保存函数返回地址到LR寄存器中

bl:有去有回,会保存函数返回地址到LR寄存器中

3.特殊功能寄存器指令 MRS MSR

指令格式:

mrs{cond} Rn,cpsr ====> 将CPSR寄存器中的值,读到Rn目标寄存器中

msr{cond} cpsr,Rn ====> 将Rn寄存器中的值,写到CPSR寄存器中

4.内存操作指令

1.单寄存器操作指令 LDR STR

指令格式:

ldr/ldrb/ldrh Rn,[Rm] ===> 将Rm指向内存空间中的数据,读到Rn目标寄存器中

str/strb/strh Rn,[Rm] ===> 将Rn寄存器中的值,写到Rm指向地址空间中

ldr ===> looad 加载 ===> 将内存中值,读到寄存器中

str ===> store 写入 ===> 将寄存器中的值,写到某一块内存空间

r ===> register ===> 4字节

b ===> byte ===> 1字节

h ===> half word ===> 2字节

2.多寄存器操作指令 LDM STM

指令码:ldm stm

指令格式:

stm{cond} Rm,{寄存器列表} ===> 将寄存器列表中数据,写到Rm指向的连续地址空间中

ldm{cond} Rm,{目标寄存器列表} ===> 将Rm指向连续地址空间中内容,读到目标寄存器列表中

备注:1)寄存器列表连续用'-'分隔开 r1-r5

2)寄存器列表不连续用','分隔开 r1,r2,r3,r5

5.栈指针操作指令 SP

栈指针寄存器====> sp

满栈:栈指针指向这块空间有有效数据

空栈:栈指针指向这块空间没有有效数据

增栈:栈指针向高地址方向移动

减栈:栈指针向低地址方向移动

栈种类

满增栈 满减栈 空增栈 空减栈

满增栈:stmfa/ldmfa Full Accending

满减栈:stmfd/ldmfd Full Desascending =====> ARM默认采用满减栈

空增栈:stmea/ldmea Empty Accending

空减栈:stmed/ldmed Empty Desascending

常用满减栈

指令格式(例):

stmfd sp!,{寄存器列表} ===> 将寄存器列表中数据,写入到栈指针指向连续地址空间中

ldmfd sp!,{目标寄存器列表} ===> 将栈指针指向连续地址空间中内容,读到目标寄存器列表中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/923582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ELFNet: Evidential Local-global Fusion for Stereo Matching

论文地址&#xff1a;https://arxiv.org/pdf/2308.00728.pdf 源码地址&#xff1a;https://github.com/jimmy19991222/ELFNet 概述 针对现有立体匹配模型面临可靠性和跨域泛化的问题&#xff0c;本文提出了Evidential Local-global Fusion&#xff08;ELF&#xff09;框架&…

十一、内部类(2)

本章概要 为什么需要内部类 闭包与回调内部类与控制框架 继承内部类内部类可以被重写么&#xff1f;局部内部类内部类标识符 为什么需要内部类 至此&#xff0c;我们已经看到了许多描述内部类的语法和语义&#xff0c;但是这并不能同答“为什么需要内部类”这个问题。那么&a…

几个nlp的小项目(文本分类)

几个nlp的小项目(文本分类) 导入加载数据类、评测类查看数据集精确展示数据测评方法设置参数tokenizer,token化的解释对数据集进行预处理加载预训练模型进行训练设置训练模型的参数一个根据任务名获取,测评方法的函数创建预训练模型开始训练本项目的工作完成了什么任务?导…

(AcWing) 任务安排(I,II,III)

任务安排I: 有 N 个任务排成一个序列在一台机器上等待执行&#xff0c;它们的顺序不得改变。 机器会把这 N 个任务分成若干批&#xff0c;每一批包含连续的若干个任务。 从时刻 0 开始&#xff0c;任务被分批加工&#xff0c;执行第 i 个任务所需的时间是 Ti。 另外&#x…

前端基础之滚动显示

marquee滚动标签 注&#xff1a;该标签已经过时&#xff0c;被w3c弃用!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 使用样例&#xff1a; <marquee>这是个默认的marquee标签</marquee> 多条数据上下滚动&#xff1a; 代码如下&#xff1a; <body><mar…

MySQL每日一练--销售管理系统

一&#xff0c;创建数据库SaleSys 二&#xff0c;在数据库SaleSys中创建3张表 品牌信息表&#xff08;brand&#xff09; BrandId --品牌编号&#xff0c;整型&#xff0c;自动增长&#xff0c;主键BrandName --品牌名称&#xff0c;字符型&#xff0c; 唯一约束 商品表…

DBi Tech Studio Controls for .NET Crack

DBi Tech Studio Controls for .NET Crack Studio Controls for.NET为企业开发人员提供了一套全面的Windows布局和信息表示软件元素&#xff0c;面向搜索业务分析商业调度和UI表示控制器的程序员。Studio Controls for.NET包含17个免版税的.NET Windows窗体控件&#xff0c;用于…

【谷粒商城】开发篇:微服务架构搭建

项目架构搭建 创建代码仓库 步骤一&#xff1a;在gitee中创建代码仓库 步骤二&#xff1a;在IDEA中 clone 项目 clone 结果展示 项目微服务创建 商品服务、仓储服务、订单服务、优惠券服务、用户服务 商品微服务创建 商品微服务创建 使用 Spring Initializr 创建微服务 通过…

Linux:ansible自动化运维工具

环境介绍 当前所有执行权限我是在root下执行的&#xff0c;如果提示权限之类的&#xff0c;可以在每句命令前 加上 sudo ansible主服务器 192.168.0.194 另外两个客户端分别为 192.168.0.193 192.168.0.192 软件只需要在主服务器上安装&#xff0c;客户端不需…

重注微电子产业,“三大齿轮”能否带起香港经济的“第三轮”

文 | 智能相对论 作者 | 佘凯文 众所周知&#xff0c;微电子产业早已成为现代科技领域的关键钥匙&#xff0c;谁能掌握微电子产业&#xff0c;谁就能拥有全球科技领域的话语权。 从上世纪开始&#xff0c;微电子产业曾经历过几次重大转移&#xff0c;如70年代从美国转向日本…

键入网址到网页显示,期间发生了什么?

目录 1.DNS2.可靠传输 —— TCP3.远程定位 —— IP4.两点传输 —— MAC5.出口 —— 网卡6.送别者 —— 交换机&#xff08;可省略&#xff09;7.出境大门 —— 路由器8.数据包抵达服务器后9.响应过程&#xff1a;带有MAC、IP、TCP头部的完整HTTP报文&#xff1a; 1.DNS 客户端…

阿里云故障洞察提效50%,全栈可观测建设有哪些技术要点?

一分钟精华速览 全栈可观测是一种更全面、更综合和更深入的观测能力&#xff0c;能协助全面了解和监测系统的各个层面和组件&#xff0c;它不仅仅是一个技术上的概念&#xff0c;更多地是技术与业务的结合。在“以业务为导向”的大前提下&#xff0c;全栈可观测正在成为趋势。…

【项目 计网6】 4.17 TCP三次握手 4.18滑动窗口 4.19TCP四次挥手

文章目录 4.17 TCP三次握手4.18滑动窗口4.19TCP四次挥手 4.17 TCP三次握手 TCP 是一种面向连接的单播协议&#xff0c;在发送数据前&#xff0c;通信双方必须在彼此间建立一条连接。所谓的“连接”&#xff0c;其实是客户端和服务器的内存里保存的一份关于对方的信息&#xff…

数据结构入门 — 链表详解_单链表

前言 数据结构入门 — 单链表详解* 博客主页链接&#xff1a;https://blog.csdn.net/m0_74014525 关注博主&#xff0c;后期持续更新系列文章 文章末尾有源码 *****感谢观看&#xff0c;希望对你有所帮助***** 系列文章 第一篇&#xff1a;数据结构入门 — 链表详解_单链表 第…

OS 用户级线程

这个程序执行到D&#xff0c;Yield&#xff08;&#xff09;跳到204&#xff0c;然后出栈404出错

2023 ccpc 网络赛 L 题解

Problem L. Partially Free Meal 题面 官方题解 官方题解解读 w(k,x)计算部分 主席树常规做法&#xff0c;在一般主席树中多维护一个这个区间的总和就ok了 根据单调性分治求解部分 接下来我们来推导一下单调性&#xff0c;也就是题解中的 f ( 1 ) < f ( 2 ) < f ( …

六、pikachu之目录遍历

文章目录 一、目录遍历概述二、目录遍历实战 一、目录遍历概述 在web功能设计中&#xff0c;很多时候我们会要将需要访问的文件定义成变量&#xff0c;从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时&#xff0c;便会将请求的这个文件的值&#xff08;比如文件名…

鸡肋的RDP反制

更新时间&#xff1a;2023年07月19日09:18:29 为什么叫鸡肋&#xff1a; 鸡肋者&#xff0c;食之无肉&#xff0c;弃之有味。 你说不能成吧&#xff0c;但是有成功案例&#xff0c;你说成了吧&#xff0c;要求太高&#xff0c;还要看运气的。 一句话&#xff1a;对方需要开启…

如何通过PreMaint状态监测系统发现设备故障?

在现代工业领域&#xff0c;设备故障可能导致严重的生产中断和高额维修成本。然而&#xff0c;通过新兴的技术&#xff0c;如基于状态的维修&#xff0c;我们可以更早地发现故障并采取预防措施&#xff0c;从而实现生产的连续性和成本的降低。其中&#xff0c;PreMaint状态监测…

老板电器:劲草式企业才能穿越周期

材料力学上有两个概念&#xff1a;一个是韧性&#xff0c;用来形容材料在塑性变形和破裂过程中吸收能量的能力&#xff0c;韧性越好&#xff0c;发生脆性断裂的可能性越小&#xff1b;一个是塑性&#xff0c;是材料所受外力超过其弹性限度后具有的能永久保留形变的性质。 这两…