汇编指令小结

ARM汇编指令学习 arm基础指令集 阅读详情

优快云仅用于增加百度收录权重,排版未优化,评论不回复。请访问:www.hceng.cn 查看、评论
本博文对应地址: https://hceng.cn/2017/03/10/汇编指令小结/#more

本文主要是记录一些遇到的ARM汇编知识。

汇编代码以韦东山老师的 第7章nand flash实验配套代码13th_link_4096 中的start.S为例:
{% codeblock lang:asm [start.S]%}
.globl _start
_start:

/* 硬件相关的设置 : 把外设的基地址告诉CPU*/
/* Peri port setup */
ldr r0, =0x70000000
orr r0, r0, #0x13
mcr p15,0,r0,c15,c2,4 @ 256M(0x70000000-0x7fffffff)

/* 关看门狗 /
/
往WTCON(0x7E004000)写0 */
ldr r0, =0x7E004000
mov r1, #0
str r1, [r0]

/* 重定位 /
adr r0, _start /
_start当前指令地址 /
ldr r1, =_start /
_start的编译地址 */
ldr r2, =bss_start
cmp r0, r1
beq clean_bss
copy_loop:
ldr r3, [r0], #4
str r3, [r1], #4
cmp r1, r2
bne copy_loop

/* 清BSS段 */
clean_bss:
ldr r0, =bss_start
ldr r1, =bss_end
mov r2, #0
clean_loop:
str r2, [r0], #4
cmp r0, r1
bne clean_loop

/* 设置栈 */
ldr sp, =8*1024
ldr pc, =main /* 重定位完后, 使用位置相关的指令跳转 */
bl main

halt:
b halt
{% endcodeblock %}


第六行:
{% codeblock lang:asm %}
ldr r0, =0x70000000
{% endcodeblock %}

  • 格式:ldr 目的寄存器 <存储器地址>
  • 作用:将 存储器地址 所指地址处连续的4个字节(1个字)的数据传送到目的寄存器中。

第七行:
{% codeblock lang:asm %}
orr r0, r0, #0x13
{% endcodeblock %}

  • 格式:orr 目的寄存器, 操作数 1, 操作数 2
  • 作用:常用于设置操作数1 的某些位,在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数1 应是一个寄存器,操作数2 可以是一个寄存器、被移位的寄存器或一个立即数。

第八行:
{% codeblock lang:asm %}
mcr p15,0,r0,c15,c2,4
{% endcodeblock %}

  • 格式:mcr 协处理器编码, 协处理器操作码1, 源寄存器, 目的寄存器1, 目的寄存器2, 协处理器操作码2
  • 作用:将ARM处理器寄存器中的数据传送到协处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码1 和协处理器操作码2 为协处理器将要执行的操作,源寄存器为ARM处理器的寄存器,目的寄存器1和目的寄存器2均为协处理器的寄存器。

第十四行:
{% codeblock lang:asm %}
str r1, [r0]
{% endcodeblock %}

  • 格式:str 源寄存器 <存储器地址>
  • 作用:用于从源寄存器中将一个32位的字数据传送到存储器中。在ARM架构下, 数据从内存到CPU之间的移动只能通过ldr/str指令来完成。而mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中,并且数据的长度不能超过8位。

第十七行:
{% codeblock lang:asm %}
adr r0, _start
{% endcodeblock %}

  • 格式:adr 目的寄存器 程序相对的表达式
  • 作用:可将一个立即值与pc值相加,并将结果写入目标寄存器。adr可生成与位置无关的代码,因为地址相对于程序或寄存器。详见ARM指令adr。

第二十行:
{% codeblock lang:asm %}
cmp r0, r1
{% endcodeblock %}

  • 格式:cmp 操作数1, 操作数2
  • 作用:用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新CPSR中条件标志位的值。该指令进行一次减法运算,但不存储结果,只更改条件标志位。标志位表示的是操作数1与操作数2的关系(大、小、相等),例如,当操作数1大于操作操作数2,则此后的有GT 后缀的指令将可以执行。

CPSR注:

  • Z标志:是否为0;如比较指令产生相等的结果、计算结果为0;
  • N标志:是否为负;如果指令的结果被认为是有符号数,而它的第31位为1,那就会被设置为1;
  • C标志:是否有产生进位/借位,以及进行移位操作时作移出位使用;
  • V标志:有符号数进行运算,结果是否有溢出。

第二十一行:
{% codeblock lang:asm %}
beq clean_bss
{% endcodeblock %}

  • 格式:beq 标签
  • 作用:数据跳转指令,标志寄存器中Z标志位等于零时, 跳转到beq后标签处。

第二十六行:
{% codeblock lang:asm %}
bne copy_loop
{% endcodeblock %}

  • 格式:bne 标签
  • 作用:数据跳转指令,标志寄存器中Z标志位不等于零时, 跳转到bne后标签处。

第四十一行:
{% codeblock lang:asm %}
bl main
{% endcodeblock %}

  • 格式:bl 子程序名
  • 作用:b或bl指令引起处理器转移到子程序名处开始执行。两者的不同之处在于bl指令在转移到子程序执行之前,将其下一条指令的地址拷贝到R14(LR,链接寄存器)。由于bl指令保存了下条指令的地址,因此使用指令“mov pc, lr”即可实现子程序的返回。而b指令则无法实现子程序的返回,只能实现单纯的跳转。

ARM处理器控制程序执行方式注:

  • 流水方式执行程序:PC的值是下一条指令的地址,即每执行一条指令PC都加一个字的偏移。
  • 通过跳转指令来控制程序执行:b-跳转到指定的指令处执行;bl-跳转执行,保存子程序地址并返回;bx-跳转执行并切换到Thumb状态;blx-三种方式组合。
用Zotero+B站Kimi,我如何把一篇顶会论文快速做成组会PPT(含完整提示词) 本文介绍如何利用Zotero和Kimi快速将顶会论文转化为组会PPT,提升学术汇报效率。通过Zotero的文献管理插件和Kimi的AI提炼技术,实现从论文阅读到PPT生成的全流程自动化,帮助研究者在90分钟内完成高质量汇报准备。 阅读详情

相关推荐

机械臂 关节电机选型计算

电机 机械臂

hisen92的专栏 8981

计算机组成原理实验

该文仅供参考... 实验一:监控程序与汇编实验 实验控制开关:00110 实验要求:从键盘输入一个数字,则计算该值到10的累加。 >a 2000 in 81 shr r0 shr r0 jrnc 2000     in 80 mvrd r1,ff30 mvrd r2,000a sub r0,r1    //将r0中存储的数字的ascii码转化为数字 mvrr r...

weixin_30814319的博客 2865

在Modelsim中手动添加仿真库

缘由:在使用rom ip核的时候发现仿真需要altera_mf库的支持,而我的ModelSim没有这个库,所以想写一篇手动添加仿真库的文章方便自己以后使用:首先新建一个库,名字叫做altera_mf:然后编译对应的库文件:这里altera_mf.v文件是在quartus安装路径下quartus\eda\sim_lib文件夹下,点击编译后退出:最后在modelsim->example文件夹下可以找到编译好的库文件:

欢迎一起交流问题! 3402

ARM基础与简单汇编

ARM原理、简单底层理论知识、初级驱动、简单常用汇编命令以及简单编程

weixin_59454731的博客 1853

主升浪潜伏主图指标公式 提前潜伏,持仓待涨,通达信炒股指标公式

浙江世宝,第一次出现信号2022年6月1日,当日冲高回落,收涨3.48%,随后涨涨突破前高,回踩后出现第二次主升潜伏信号,时间2022年6月13日,当日收涨9.46%,后市连续涨停,走出12连板行情。九安医疗,第一次出现信号,黄色文字,当日2021年11月1日,涨幅0.19%,第二次出现信号一字涨停,没机会买进,第三次是T字,需要手快,后市连续上涨,接近20倍的大牛股。启明信息,突破区间后的回踩转涨位置出现信号,时间2021年11月29日,当日涨幅1.14%,次日爆发,波段涨幅152.65%。

weixin_69760830的博客 1877

Ansys Lumerical 启动时出现 Error: Could not connect to Ansys license server specified at 1055@ 的一种解决办法

考虑到 2020 版的时候是直接在全局变量里指定具体地址,但是 2024 版本是写成 1055@localhost ,并且之后在站里搜相关 Ansys 的问题都指向 1055 端口被占用,虽然问题不一样,但是本着死马当活马医,就按照。我最近在跑超透镜结构,听说2024版本现在有GPU加速可以用,就把Lumerical从2020升到2024版本,结果发现一开头的破解办法完全不一样了。一开始安装的时候以为2020没有删干净,导致2024版的安装一直锁着目标地址,解决办法参考。的办法来操作,在关闭了。

qq_51404184的博客 5752

ARM汇编基础知识

1.RISC和CISC ARM芯片属于精简指令集计算机(RISC: Reduced Instruction Set Computing) 它所用的指令比较简单,有如下特点: ①对内存只有读、写指令 ②对于数据的运算是在CPU内部实现 ③使用RISC指令的CPU硬件复杂度小一点,易于设计 在RISC中乘法计算ab计算要使用四条汇编指令 X86属于复杂指令集计算机(CISC: Complex Instruction Set Computing) 它所用的指令比较复杂,比如某些复杂的指令,它是通过‘微程序’来实现

weixin_45643233的博客 1876

百度智能云训练图像分割模型+python调用模型并分割图像

目录 训练模型阶段 发布图像分割API 调用图像分割API 创建应用后显示以下两个代码 在pycharm中可以调用API mask解码 依赖库pycocotools安装步骤: 依赖库urllib2的安装 源码下载: 最近上课听老师介绍了一个训练图像分割模型的网站,把数据集上传之后做图像标注,然后进行训练就能得到准确率等指标。 训练模型阶段 图像分割:https://ai.baidu.com/easydl/vision/ 图像分割-->创建模型-->上传数据--&gt

icecreamdinner的博客 1388

汇编:ldr 和 str指令

ldr命令:把数据从内存加载到寄存器。 ldr r0, =addr ;r0 = addr ldr r1, [r0] ; r1 = *r0 ldr r1, [r0, #4] ; r1 = *(r0+4) ldr r1, [r0, #4] ! ; r1 = *(r0+4);r0=r0+4; ldr r1, [r0], #4 ; r1 = *(r0);r0=r0+...

xunmengxiaozi的博客 4066

“双系统”出炉!瑞芯微RK3562J非对称AMP:Linux+RTOS/裸机

执行如下命令运行Linux应用程序rpmsg_echo,发送8个rpmsg数据包至运行Baremetal程序的Cortex-M0核心,当Cortex-M0核心每收到1个rpmsg数据包就会将数据包发送回Linux端。开发者可灵活分配任务或指定核心间通信,从而增强系统稳定性,减少崩溃风险,保障数据完整。下文以Cortex-A53(CPU0、CPU1、CPU2、CPU3)核心运行Linux系统与rpmsg_echo应用程序,Cortex-M0(MCU)核心运行Baremetal程序为例进行演示。

创龙,嵌入式一体化解决方案商 467

GEE聚类分析:基于sentinel-2 影像进行 K-Means 聚类分析

这篇博客介绍了如何使用 Google Earth Engine (GEE) 进行 K-Means 聚类分析,以识别感兴趣区域(ROI)内的不同地表覆盖类型。文章详细说明了从定义用户参数、准备参考区域、加载和预处理 Sentinel-2 图像,到训练 K-Means 聚类器并对图像进行聚类的完整流程。代码示例展示了如何设置参数、采样像素数据、训练聚类器,并将结果可视化。最后,还提供了将聚类结果导出到 Google Drive 的选项。通过该教程,用户可以掌握在 GEE 平台上进行地理数据聚类分析的基本方法。

此星光明博客 262

arm基础汇编指令小结

arm汇编指令分类

yaoyelianhuan的博客 648

Plecs电力电子仿真专业教程-第一季 第一节 Plecs简介

Plces 电力电子仿真专业教程系列依托专业的电力电子仿真软件Plecs对各种电力电子常用的拓扑及实际设计的方案进行系统及仿真与软件代码仿真实践。通过对各种电路仿真原理的讲解及专业C语言代码程序的编写,提升学员的系统设计能力,软件编程能力与理论分析能力。

3637

PowerPC 汇编指令小结

1. 寄存器模型 r0, register 0, is a scratch register. It's often used for a temporary. r1 is the stack pointer. r2 is reserved for some multithreaded global variable magic. r3 is used to return values ...

2552

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

8086汇编指令小结

中大某君的总结。发信人: jwjhk (无因为情), 信区: Modern_Elec标  题: [转载] 8086汇编指令小结发信站: 逸仙时空 Yat-sen Channel (Sat Mar 24 21:23:26 2007), 站内信件【 以下文字转载自 EE 讨论区 】【 原文由 iWater 所发表 】>>目录·8086/8088 寄存器组 一、通用寄存器 二、段寄存器 三、指令指针

aaaaatiger--寻路 2311

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

常用汇编指令小结

因为RT-Thread的移植会涉及到上下文切换代码及中断处理代码之类的移植,而且在编程指南中的“GNU GCC移植”和“STM32说明”两节也都展示了不少汇编代码,所以了解一些基本汇报指令还是有必要的。 * cpsr current program status register (程序状态寄存器) * spsr Saved Process Status R...

weixin_30532837的博客 193

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

X86汇编指令小结

来自:http://blog.sina.com.cn/s/blog_4a92ce12010006m0.html 一、数据传送指令 1.通用数据传送指令 MOV(Move)传送 PUSH(Push onto the stack)进栈 POP(Pop from the stack)出栈 XCHG(Exchange)交换 .MOV指令 格式为: MOV  DST,SRC 执行的操作

u014183377的专栏 652

嵌入式 uboot常见汇编指令小结

在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初始化,进出中断时的环境保护,恢复等对性能有要求的地方。 ARM指令集可以分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。 ARM指令使用的基本格式如下: 〈opcode〉{〈cond〉}{S}     〈Rd〉,〈Rn〉{,〈operand2〉}

skdkjxy的专栏 1936

【深入浅出汇编语言】寄存器精讲第一期

本文主要初识寄存器,介绍了通用寄存器AX,BX,CX,DX以及寄存器的逻辑结构,数据在寄存器中的存储形式。紧接着我们又讲解了字在寄存器中的存储占两个字节,后面简单介绍了几条汇编指令。

聆风吟的博客 726

8086/8088汇编指令小结(转载)

8086/8088汇编指令小结- - 作者: walkdeath转载地址:http://publishblog.blogchina.com/blog/tb.b?diaryID=479566 一、数据传送指令; 二、算术指令; 三、逻辑指令; 四、串处理指令; 五、控制转移指令; 六、处理机控制指令。 (...

weixin_34148508的博客 146

8086/8088汇编指令小结(转)

 一、数据传送指令;二、算术指令;三、逻辑指令;四、串处理指令;五、控制转移指令;六、处理机控制指令。(详情见全文)一、数据传送指令1.通用数据传送指令MOV(Move)传送PUSH(Push onto the stack)进栈POP(Pop from the stack)出栈XCHG(Exchange)交换.MOV指令格式为: MOV  DST,SRC执行的操作:(DST).PUSH进栈指令格式

JofeeDong's Blog 1727

IA-32汇编语言笔记(14)—— IA32汇编指令小结

记录汇编语言课笔记,可能有不正确的地方,欢迎指出 教材《新概念汇编语言》—— 杨季文 这篇文章是书前四章的所有指令的总结,基本涉及到所有逻辑处理所需的指令,掌握这些之后就可以写各种嵌入式汇编程序了,这里不包括bios函数调用或者中断之类的指令 文章目录〇、思维导图一、数据传输指令组1. 传送指令(1)MOV(普通传送指令)2. 交换指令(1)XCHG(交换指令)3. 堆栈相关指令(1)PUS...

佚失的诗篇 3639

CPU的构成

CPU的构成一个典型的CPU有运算器、控制器、寄存器等器件构成,这些器件考内部总线相连。在 CPU 中:运算器进行信息处理;寄存器进行信息存储;控制器控制各种器件进行工作;内部总线连接各种器件,在它们之间进行数据的传送。cpu从内存中读写数据的过程地址总线一个 CPU 有 N 根地址线,则可以说这个 CPU 的地址总线的宽度为 N。这样的 CPU 最多可以寻找 2 的 N 次方个内存单元。小结(1) 汇编指令是机器指令的助记符,同机器指令一一对应。(2) 每一种 CPU 都有自己的汇编指令集……

fanjinhong_8521的博客 280

3.4 数据传送指令

欢迎来到我的专栏!我将帮助你在最短时间内掌握微机原理的核心内容,为你的考研或期末考试保驾护航。

VLOKL的博客 1737

ARM 汇编指令 CPS CPSID CPSIE

ARM 汇编 :CPS CPSID CPSIE的了解

坚韧与专注 6247

ARM 汇编指令 MRS用法

ARM 汇编指令 MRS用法

坚韧与专注 5688
上一篇: Git日常使用小结
下一篇: Makefile小结
hceng_blog
博客等级 码龄10年 263粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值