学过的汇编指令整合

1.数据搬移指令

<opcode>{<cond>}{s} <Rd>, <shifter_operand>

解释: <opcode>:指令码

{<cond>}:条件码

{s}:状态位,如果在指令后面加上s,则运算的结果会影响CPSR的条件位

<Rd>:目标寄存器

<shifter_operand>:第一操作数,可以是寄存器,也可以是立即数 按照指令码将第一操作数运算后的结果保存在目标寄存器

指令码功能:

mov:将第一操作数的值保存在目标寄存器

mvn:将第一操作数的值按位取反,将结果保存在目标寄存器

2.移位指令 

格式:<opcode>{<cond>}{s} <Rd>, <Rn>, <shifter_operand>

解释:将第一操作寄存器的数值移位第二操作数指定的位数,将结果保存在目标寄存器中

指令码:

LSL:左移运算 低位补0

LSR:右移运算 高位补0

ROR:循环右移:低位移出的值补到高位

 3.位运算指令

格式:<opcode>{<cond>}{s} <Rd>, <Rn>, <shifter_operand>

解释:将第一操作寄存器和第二操作数进行位运算,将结果保存在目标寄存器中

指令码:

and:与 与0清0 与1不变

orr:或 或1置1 或0不变

eor:异或 相同为0 不同为1

bic:按位清零指令,想将哪一位设置为0,只需要用bic指令给这一位运算一个1即可

4.算数运算指令

格式:<opcode>{<cond>}{s} <Rd>, <Rn>, <shifter_operand>

解释:将第一操作寄存器的值和第二操作数进行算数运算,结果保存在目标寄存器中

add:加法运算

adc:进行加法运算时需要考虑CPSR的条件位

sub:减法运算

sbc:进行减法运算时需要考虑CPSR的条件位

mul:乘法运算

5.比较指令

格式: cmp 第一操作数,第二操作寄存器

比较两个数据

cmp命令本质:实际上就是比较的两个数进行减法运算,并且减法运算的结果会影响到CPSR寄存器的条件位

通常比较指令完毕之后会使用条件码进行判断,根据判断的结果做不同的逻辑

 条件码:

 

6. 跳转指令

<opcode>{<cond>} 标签

功能:跳转到指定的标签下

指令码:

b:跳转时不影响LR寄存器的值

7.单寄存器内存读写指令

指令码{条件码} 目标寄存器 [目标地址]

str 目标寄存器 ,[目标地址]:将目标寄存器的数据写入到以目标地址为起始的内存中

ldr 目标寄存器 ,[目标地址]:从以目标地址为起始的内存中读一个字的数据到目标寄存器

 向内存中写:

str:向内存中写一个字(4字节)的数据

strh:向内存写半个字(2字节)的数据

strb:向内存写一个字节的数据

从内存读:

ldr:从内存读取一个字的数据

ldrh:从内存读取半个字的数据

ldrb:从内存读取一个字节的数据

8.批量寄存器的内存读写指令

向内存写:

stm 目标地址,{寄存器列表}

将寄存器列表中每一个寄存器的值都写道目标地址指向的连续空间之中

从内存读

ldm 目标地址,{寄存器列表}

将目标地址指向的连续内存中的数据读到寄存器列表中的寄存器中

注意事项:

1.如果寄存器列表中寄存器的编号连续,可以用-表示列表,如果不连续,用,分割寄存器

{r1-r5,r7}

2.无论寄存器列表中如何表示,我们在读写内存的时候始终是低地址 对应低寄存器编号

批量寄存器的地址增长方式:

ia后缀

ib后缀

da后缀

db后缀

9.栈内存读写指令

增栈:压栈结束后,栈顶往地址大的方向增长

减栈:压栈结束后,栈顶往地址小的方向增长

空栈:压栈结束后,栈顶区域没有有效数据

满栈:压栈结束后,栈顶区域存放有效数据

空增栈(EA)/空减栈(ED)/满增栈(FA)/满减栈(FD)

ARM使用的栈是满减栈

 

9.1栈实例---叶子函数的调用过程

.text  
.global _start _start:ldr sp,=0X40000020 @初始化栈b main
main:mov r1,#1mov r2,#2bl funcadd r3,r1,r2b mainfunc:
@压栈保护现场stmfd sp!,{r1,r2}mov r1,#3mov r2,#4sub r4,r2,r1@出栈恢复现场ldmfd sp!,{r1,r2}mov pc,lr  @返回main函数wh: b wh  .end 

9.2栈实例---非叶子函数的调用过程

.text  
.global _start _start:ldr sp,=0X40000020 @初始化栈b main
main:mov r1,#1mov r2,#2bl funcadd r3,r1,r2b mainfunc:
@压栈保护现场stmfd sp!,{r1,r2,lr}mov r1,#3mov r2,#4bl fun1sub r4,r2,r1@出栈恢复现场ldmfd sp!,{r1,r2,lr}mov pc,lr  @返回main函数
fun1:
@压栈保护现场stmfd sp!,{r1,r2}mov r1,#4mov r2,#5mul r5,r1,r2@出栈恢复现场ldmfd sp!,{r1,r2}mov pc,lrwh: b wh  .end 

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

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

相关文章

2023-09-28 monetdb-databae的概念和作用-分析

摘要: 每个数据库对于db,schema以及user,role都有一套自己的设计, 不同数据库间对于相同名字的东西例如database和schema可以说南辕北辙, 例如mysql中schema其实是database的同义词. 本文分析monetdb的database的概念和作用 database的概念和作用: 和mysql的database完全不同…

Windows11安装MySQL8.1

安装过程中遇到任何问题均可以参考(这个博客只是单纯升级个版本和简化流程) Windows安装MySQL8教程-CSDN博客 到官网下载mysql8数据库软件 MySQL :: Download MySQL Community Server 下载完后,解压到你需要安装的文件夹 其中的配置文件内容了如下 [mysqld]# 设置3306端口po…

云原生微服务 第六章 Spring Cloud Netflix Eureka集成OpenFeign组件,实现微服务的远程调用、负载均衡

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 文章目录 系列文章目录前言1、OpenFeign的实现…

STM32CubeMX学习笔记-USB接口使用(HID按键)

STM32CubeMX学习笔记-USB接口使用&#xff08;HID按键&#xff09; 一、USB简介1.1 USB HID简介 二、新建工程1. 打开 STM32CubeMX 软件&#xff0c;点击“新建工程”2. 选择 MCU 和封装3. 配置时钟4. 配置调试模式 三、USB3.1 参数配置3.2 引脚配置3.3 配置时钟3.4 USB Device…

Transformer学习-self-attention

这里写自定义目录标题 Self-attentionMulti-head self-attention用self-attention解决其他问题 Self-attention 用Wq、Wk、Wv分别乘输入向量得到q、k、v向量 用每个q向量乘所有的k向量得到对应项的attention&#xff0c;即用每项的query向量去匹配所有的key向量&#xff0c;得…

数字IC前端学习笔记:数字乘法器的优化设计(阵列乘法器)

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 数字信号处理作为微处理器的核心部件&#xff0c;是决定着总体处理器性能的因素之一&#xff0c;而数字乘法器是最常见的一种数字信号处理电路。通常情况下&#…

python二次开发CATIA:为选中元素上色

先打开一个零件文档&#xff0c;然后用鼠标选中元素&#xff0c;再运行如下python程序&#xff1a; import win32com.client import pywintypes # 导入pywintypes模块 import random # 启动CATIA应用 catia win32com.client.Dispatch(CATIA.Application) catia.visible1try:…

from PIL import Image,文字成图,ImageFont import jieba分词,input优雅python绘制图片

开始的代码 import os from PIL import Image, ImageDraw, ImageFont import jiebadef generate_image_with_white_bg(text, font_path, output_path):# 设置图片大小和背景颜色image_width 800image_height 600bg_color (255, 255, 255) # 白色# 创建图片对象image Imag…

WOL唤醒配置(以太网、PHY、MAC)

目录 wol 以太网 MAC PHY RMII 通信配置 总结 wol Wake-on-LAN简称WOL&#xff0c;WOL&#xff08;网络唤醒&#xff09; 是一种标准网络协议&#xff0c;它的功效在于让已经进入休眠状态或关机状态的计算机&#xff0c;透过局域网&#xff08;多半为以太网&#xff…

java图书管理系统

一、 引言 图书管理系统是一个用于图书馆或书店管理图书信息、借阅记录和读者信息的应用程序。本系统使用Java Swing框架进行开发&#xff0c;提供直观的用户界面&#xff0c;方便图书馆管理员或书店工作人员对图书信息进行管理。以下是系统的设计、功能和实现的详细报告。 二…

29 drf-Vue个人向总结-2

文章目录 drf项目总结2重写create自定义验证类获取个性化内容 与 lookup_field 的用处重写get_queryset&#xff0c;get_serializer_class类docs帮助文档支付宝支付原理&#xff08;微信同原理&#xff09;使用流程创建公钥私钥使用的理论介绍使用的代码介绍支付宝与Drf的联合使…

python中实现定时任务的几种方案

目录 while True: sleep()Timeloop库threading.Timersched模块schedule模块APScheduler框架Celery框架数据流工具Apache Airflow概述Airflow 核心概念Airflow 的架构 总结以下几种方案实现定时任务&#xff0c;可根据不同需求去使用不同方案。 while True: sleep() 利用whil…

Pytorch目标分类深度学习自定义数据集训练

目录 一&#xff0c;Pytorch简介&#xff1b; 二&#xff0c;环境配置&#xff1b; 三&#xff0c;自定义数据集&#xff1b; 四&#xff0c;模型训练&#xff1b; 五&#xff0c;模型验证&#xff1b; 一&#xff0c;Pytorch简介&#xff1b; PyTorch是一个开源的Python机…

【4】c++设计模式——>UML表示类之间的聚合关系

聚合关系表示整体与部分的关系&#xff0c;在聚合关系中&#xff0c;成员对象时整体的一部分&#xff0c;但是成员对象可以脱离整体对象独立存在&#xff0c;当整体被析构销毁的时候&#xff0c;组成整体的这些子对象是不会被销毁的&#xff0c;是可以继续存活&#xff0c;并在…

Hono——一个小型,简单且超快的Edges Web框架

Hono - [炎]在日语中的意思是火焰&#x1f525; - 是一个小型&#xff0c;简单且超快的Edges Web框架。它适用于任何JavaScript运行时&#xff1a;Cloudflare Workers&#xff0c;Fastly ComputeEdge&#xff0c;Deno&#xff0c;Bun&#xff0c;Vercel&#xff0c;Netlify&…

机器学习 不均衡数据采样方法:imblearn 库的使用

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

CSS3与HTML5

box-sizing content-box&#xff1a;默认&#xff0c;宽高包不含边框和内边距 border-box&#xff1a;也叫怪异盒子&#xff0c;宽高包含边框和内边距 动画&#xff1a;移动translate&#xff0c;旋转、transform等等 走马灯&#xff1a;利用动画实现animation&#xff1a;from…

【C++进阶(七)】仿函数深度剖析模板进阶讲解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 模板进阶 1. 前言2. 仿函数的概念3. 仿函数的实…

背包问题

目录 开端 01背包问题 AcWing 01背包问题 Luogu P2925干草出售 Luogu P1048采药 完全背包问题 AcWing 完全背包问题 Luogu P1853投资的最大效益 多重背包问题 AcWing 多重背包问题 I AcWing 多重背包问题 II Luogu P1776宝物筛选 混合背包问题 AcWing 混合背包问题…

3种等待方式,让你学会Selenium设置自动化等待测试脚本!

一、Selenium脚本为什么要设置等待方式&#xff1f;——即他的应用背景到底是什么 应用Selenium时&#xff0c;浏览器加载过程中无法立即显示对应的页面元素从而无法进行元素操作&#xff0c;需设置一定的等待时间去等待元素的出现。&#xff08;简单来说&#xff0c;就是设置…