mov、mvn、cmp等ARM汇编指令集数据处理类指令(三星2440A)

news2024/12/23 10:46:30

文章目录

  • 前言
  • 一、为什么要学习汇编?
  • 二、2440下常用汇编指令
    • 1. 汇编指令集合
    • 2. 2440编译(汇编)工程框架
  • 三、汇编指令详解
    • 1. mov指令
    • 2. mvn
    • 3. add、sub、mul、rsb(算术运算)
    • 4. and、orr、eor、bic
    • 5. cmp、teq、tst
      • 5.1 cmp
      • 5.2 teq
      • 5.2 tst
  • 总结


前言


本期和大家主要分享的是ARM指令集,也就是通常所说的汇编;汇编是一门机器语言,比起c语言而言,它更加偏向于底层一点,更加贴切CPU执行任务的流程;并且呢汇编代码是整个ARM代码执行流程中必不可少的一部分;比如通常芯片的启动代码都是运用使用汇编语言所写的;汇编语言的特点是在起初学习时比较晦涩,但是在有了一定的基础之后再去反观像启动代码这样的文件时还是可以看得懂的,为了更好的了解CPU的任务调度以及它执行代码的逻辑顺序,学习汇编语言是至关重要的;接下来我们来看看吧!

一、为什么要学习汇编?

汇编是一门机器语言,比起c语言而言,它更加偏向于底层一点,更加贴切CPU执行任务的流程;并且呢汇编代码是整个ARM代码执行流程中必不可少的一部分;比如通常芯片的启动代码都是运用使用汇编语言所写的;为了更好的了解CPU的任务调度以及它执行代码的逻辑顺序,学习汇编语言是至关重要的;
汇编:机器码的助记符;
注:不同平台下的汇编语言略有差异,基本相同;

二、2440下常用汇编指令

1. 汇编指令集合

在这里插入图片描述

2. 2440编译(汇编)工程框架

2440在keil中建立好三星2440A的工程后(注意不添加启动代码,这里由自己编写),下图是汇编的框架:
在这里插入图片描述

	area reset,code   申请空间,reset段,代码   
entry            	  指定入口
start                 入口
		mov r1, #3	  代码位置		
end               	  结尾

在框架搭建好之后就可以在start之后添加汇编代码了,可以借助仿真器去查看寄存器具体的变化,以及CPSR和SPSR两个功能寄存器的变化,观察汇编指令的作用,并且在此处也可以观察SP,LR,PC,的值,观察异常发生时CPU的处理流程;

三、汇编指令详解

1. mov指令

mov r0, #2 === r0=2
mov r0, r1 === r0=r1
验证的结果如下:
在这里插入图片描述
mov指令的作用主要是对某个寄存器进行赋值;

2. mvn

mvn指令的作用是对操作数进行取反;

r1 = ~0;

在这里插入图片描述

3. add、sub、mul、rsb(算术运算)

add、sub、mul、rsb分别实现加减乘和反减的功能,寄存器不能够实现除法操作;
在这里插入图片描述
通过寄存器窗口可以观察到各个指令的作用;

4. and、orr、eor、bic

andorr比较常见,实现与和或的功能;eor和bic也是非常重要的两个指令;
eor的作用是异或,可以实现寄存器的某一位取反的功能(比如操作寄存器使用中断实现灯的闪烁,只需要在中断处理程序中对灯的相应位异或1即可);异或指令也可以用来判断两个数或者两个数的某一位是否相等;
bic:位清除指令,清楚第一操作数中第二操作数位1的位;
在这里插入图片描述

5. cmp、teq、tst

cpsr寄存器的nzcv表示需要被修改,指令需要加s

5.1 cmp

在观察cmp指令作用的同时观察CPSR中N位的变化;
在这里插入图片描述
下面再来看一下,为什么C位会置1呢,这是因为cmp指令的本质就是一个减法指令,所以当R1-R2时没有产生借位,所以这里会置1;哈哈哈,对,就是这么简单;

5.2 teq

用异或测试两个数是否相等;如果相等CPSR的Z位会置位;
在这里插入图片描述

5.2 tst

用测试两个数的某一位是否相等;如果相等(结果为0)CPSR的Z位会置位;
在这里插入图片描述
到这里呢基本上数据处理类的汇编指令已经练习的差不多了;

总结

本期呢主要分享的ARM汇编指令,这是理解CPU处理程序过程非常重要的一部分内容,在本期分享了ARM汇编指令中的数据处理类的指令,下期呢希望能够和大家分享一下内存操作类的指令,以此呢来实现观察CPSR中中断标志位在程序执行过程中的改变;各位小伙伴们练习起来哦,一定不能只是看看,一定需要大家亲自动手操作一下!
最后,各位小伙伴们如果喜欢我的分享可以点赞收藏哦,你们的认可是我创作的动力,一起加油!

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

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

相关文章

视频会议需要什么设备?视频会议软硬件介绍

视频会议系统简介 视频会议系统是一种通过网络技术实现远程音视频通信的系统。它可以让不同地点的人们在同一时间进行实时的视音频交流,从而实现远程会议、远程教育、远程医疗以及最近比较新兴的直播等应用场景。 视频会议系统组成 视频会议系统通常包括摄像头、…

chatgpt赋能python:Python中如何精确到小数点

Python中如何精确到小数点 Python作为一种高级编程语言,被广泛应用于数据科学、网站开发、人工智能等领域。在处理数字时,精度一直是一个非常重要的问题。本文将介绍如何在Python中精确到小数点,并给出实例演示。 为什么需要精确到小数点 …

C++11学习笔记(4)——通用工具(下)

太长了,分两篇写吧 书接上回 4.数值极值 std::numeric_limits 是 C 标准库中定义的一个模板类,位于 头文件中。它提供了关于各种数值类型的属性和极值的信息。这些信息可以帮助我们在程序中进行数值处理时,了解特定类型的数值范围、精度以及…

Flutter如何获取屏幕的分辨率和实际画布的分辨率

Flutter如何获取分辨率 在Flutter中,你可以使用MediaQuery来获取屏幕的分辨率和实际画布的分辨率。 要获取屏幕的分辨率,你可以使用MediaQuery.of(context).size属性,它返回一个Size对象,其中包含屏幕的宽度和高度。下面是一个获…

Redis中常见的一些问题

缓存穿透问题 什么是缓存穿透? 例如当我们根据id查询一个数据的时候,但是这个数据本身不存在或者已经被删除之后,缓存中不存在,就会去查询数据库,但是不存在的数据不会缓存到数据库中,那么一旦大量的这个请…

层序遍历的应用——判断二叉树是否为完全二叉树

思维导图: 一,完全二叉树的特点 假如我们现在有一颗完全二叉树,那它应该长什么样呢? 它应该长这样: 这样: 这样: 如果不是一…

6 种方式读取 Springboot 的配置,老鸟都这么玩(原理+实战)

大家好,我是小富~ 从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一,但就是这么常用的功能,仍然有很多开发者在这个方面踩坑。 我整理了几种获取配置属性的方式,目的不仅是要让大家学会如何使用&#…

Exiv2 —— exiv2介绍及下载搭建环境(Vs2017)

Exiv2介绍 Exiv2 是一个跨平台C库和一个命令行实用程序,用于管理图像元数据。它提供对Exif,IPTC和XMP元数据以及ICC配置文件的快速简便的读写访问。 嵌入到各种格式的数字图像中。 Exiv2 作为免费软件提供,用于许多项目 包括KDE和Gnome Deskt…

chatgpt赋能python:Python自动化脚本编写——让工作更高效

Python自动化脚本编写——让工作更高效 在当今的工作中,自动化脚本已经成为了一个不可或缺的工具。而Python作为一门脚本语言,它的开源、易用以及强大的库使得它成为了很多人使用自动化脚本的首选语言。 在本文中,我们将会探讨如何使用Pyth…

ChatGPT 指南:角色扮演让回答问题更专业

让 ChatGPT 进行角色扮演 Act as ...,比如,律师、内科医生、心理医生、运动教练、哲学家、翻译、平面设计师、IT 工程师等等,从而才能让 ChatGPT 从这个角色角度来分析我们的问题,不然,它的回答可能会过于广泛。 下面以…

Vue中如何进行自动化测试与端到端测试(E2E测试)

Vue中如何进行自动化测试与端到端测试(E2E测试) Vue.js是一种流行的前端JavaScript框架,用于构建现代的单页应用程序。在Vue.js中,测试是一个非常重要的主题。测试可以确保代码的正确性,使代码更加可靠和可维护。在这…

p-tuing和Lora的区别

一、前言 自从chatgpt的爆火,也同时引发了国内大模型的热潮,像百度出了文心一言、阿里出了通义千问等,但是这些大模型并未开源,国内外开源的中等规模的模型有meta的LLaMA,斯坦福基于LLaMA微调的Alpaca,国内…

小程序开发的前沿趋势和技术

在过去的一年里,小程序已成为移动互联网行业最热门的话题之一。小程序已经改变了许多行业。那么,下一个小程序开发趋势是什么?下面我们就来分析一下。 随着微信小程序的开放和推广,小程序开发企业正在大力发展并逐渐从技术方面进…

【2023最新版】黑客零基础入门(全网最全)从零基础到进阶,学完这一篇就够了

学前感言 1.这是一条需要坚持的道路,如果你只有三分钟的热情那么可以放弃往下看了。2.多练多想,不要离开了教程什么都不会,最好看完教程自己独立完成技术方面的开发。3.有问题多google,baidu…我们往往都遇不到好心的大神,谁会无…

【Qt】使用libmodbus实现ModBusTcp

这里写目录标题 下载编译使用DemoQModbusTcpClient Demo:参照:Qt自带QModbusTcpClient,换个电脑就不好使了,换libmodbus 下载 可以去github下载 链接: https://pan.baidu.com/s/13lgEZ59Dt5M7zmTJNpfKvg?pwd=yzfm 提取码: yzfm 下载libmodbus 并解压 编译 进入该目录下…

智造零距离:工程师走访华秋深圳 PCB 工厂,观摩高可靠板制造流程

6月11日,来自硬十、是德、灵明光子、兆易创新、汇顶科技、中诺通讯等公司的近20位工程师走访了华秋深圳PCB工厂。华秋工艺经理余宁带领考察团参观了工厂的生产线,近距离观摩了PCB的制造流程。 参观环节正式开始前,工厂安排专家介绍PCB制造的详…

SpringBatch从入门到实战(四):执行上下文和单步骤重启

一:执行上下文 1.1 JobContext 作业上下文 JobContext 绑定 JobExecution 执行对象,为Job作业执行提供执行环境(上下文)。 1.2 StepContext 步骤上下文 StepContext 绑定 StepExecution 执行对象,为Step步骤执行提供执行环境(上下文)。 1…

Ansible playbook ----- 剧本

playbooks 本身由以下各部分组成 (1)Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 (2)Variables:变量 (3)Templates:模…

Ubuntu 20.04 LTS 安装教程

Ubuntu 20.04 LTS 以及必要软件的安装教程 1、Ubuntu 系统下载2、制作U盘安装盘3、安装Ubuntu系统4、必要软件安装4.1、调整系统时间4.2、安装搜狗中文输入法4.3、anaconda 安装4.4、安装 terminator4.4、安装 nvidia 驱动 1、Ubuntu 系统下载 官方桌面版下载:https…

电力监控系统软件的设计与功能介绍

安科瑞虞佳豪 风吹麦浪,炎夏将至。随着气温节节攀升,社会用电需求越来越大,给电网安全和电力供应带来挑战。国网诸城市供电公司扛牢电力保供责任,迎难而上,筑牢强电网、保安全、防大汛“三部曲”,全力保障…