【ARM64 常见汇编指令学习 15 -- ARM 标志位的学习】

文章目录

    • ARM 标志位介绍
      • Zero Condition flag(零标志位)
      • 零标志位判断实例

上篇文章:ARM64 常见汇编指令学习 14 – ARM 汇编 .balign,.balignw,.balign 伪指令学习
下篇文章:ARM64 常见汇编指令学习 16 – ARM64 SMC 指令

ARM 标志位介绍

在这里插入图片描述
在ARM架构中,处理器的状态寄存器(例如CPSR)有一些标志位,用于表示特定的状态或结果。以下是这些标志位的含义:

  • N(Negative):负标志位。如果操作的结果是负数,那么N位将被设置为1。
  • Z(Zero):零标志位。如果操作的结果是零,那么Z位将被设置为1
  • C(Carry):进位标志位。如果操作导致了进位或借位,那么C位将被设置为1。
  • V(Overflow):溢出标志位。如果操作的结果导致了算术溢出,那么V位将被设置为1。

这些标志位主要用于条件指令,如CMP(比较)、ADD(加法)、SUB(减法)等,以及条件跳转指令,如BEQ(等于时跳转)、BNE(不等于时跳转)、BGT(大于时跳转)、BLT(小于时跳转)等。

例如:

  • 使用CMP指令比较两个值后,可以通过检查Z位是否被设置来判断这两个值是否相等。
  • 使用ADD指令进行加法操作后,可以通过检查C位是否被设置来判断是否发生了进位。
  • 使用SUB指令进行减法操作后,可以通过检查N位是否被设置来判断结果是否为负数。
  • 使用任何可以导致溢出的算术操作(如加法或乘法)后,可以通过检查V位是否被设置来判断是否发生了溢出。

总的来说,这些标志位为ARM处理器提供了一种检查和响应各种操作结果的机制,这对于许多编程任务来说是非常重要的。

Zero Condition flag(零标志位)

在ARM架构中,有许多指令在执行后会影响零标志位(Z),或者根据零标志位(Z)的状态来决定其行为。以下是一些常见的例子:

  • CMP(Compare):这条指令用于比较两个寄存器的值。它会执行一个减法操作,并根据结果设置条件标志,包括零标志位。如果两个值相等,那么结果为零,零标志位会被设置

  • TST(Test):这条指令用于测试两个寄存器的值。它会执行一个位与(AND)操作,并根据结果设置条件标志,包括零标志位。如果两个值的AND结果为零,那么零标志位会被设置

  • ANDS(Bitwise AND with Set Flags):这条指令执行一个位与操作,并根据结果设置条件标志,包括零标志位。

  • BEQ(Branch if Equal)和BNE(Branch if Not Equal):这两条指令都会根据零标志位的状态决定是否跳转如果零标志位被设置(表示最后一次比较或测试的结果为零),BEQ会导致处理器跳转到指定的位置,BNE不会跳转;如果零标志位被清除,BEQ不会跳转,BNE会跳转。

这只是零标志位在ARM中的一些用途。在实际编程中,零标志位的状态通常用于判断某个操作的结果是否为零,或者两个值是否相等。

零标志位判断实例

tst r0 , #0x2         //进行and运算,如果bit2为1,zero==0,如果bit2为0,则zero==1,即该指令测试bit2是否为0
bne led_blink         //非零则跳转,若zero==1,跳转到led_blink处执行;若zero==0,则继续执行下一步指令
sub r1 , r1 , #1      //r1=r1-1
cmp r1 , #0            //r1是否等于0,并更改标志位     
bne led_blink          //zero==1时跳转至led_blink处,zero==0时则继续执行

上篇文章:ARM64 常见汇编指令学习 14 – ARM 汇编 .balign,.balignw,.balign 伪指令学习
下篇文章:ARM64 常见汇编指令学习 16 – ARM64 SMC 指令

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提升Element UI分页查询用户体验与交互:实现修改未保存提示

我实现的功能是在 element ui 的分页组件中进行分页查询时,如果当前有未保存的修改数据就提示用户,用户可以选择是否放弃未保存的数据。确认放弃就重新查询数据;选择不放弃,不重新查询,并且显示条数选择框保持原样&…

爬虫009_字符串高级_替换_去空格_分割_取长度_统计字符_间隔插入---python工作笔记028

然后再来看字符串的高级操作 取长度 查找字符串下标位置 判断是否以某个字符,开头结尾 计算字符出现次数 替换

CAPL - XML和TestModule结合实现测试项可选

目录 目的:是否想实现如下面的功能呢? 一、.can和.cin文件中函数开发

AI Chat 设计模式:12. 享元模式

本文是该系列的第十二篇,采用问答式的方式展开,问题由我提出,答案由 Chat AI 作出,灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 给我介绍一下享元模式A.1Q.2 也就是说,其实共享的是对象的内部状态&…

pycharm的Terminal中如何设置打开anaconda3的虚拟环境

在pycharm的File -> Settings -> Tools -> Terminal下面,如下图所示 修改为红框中内容,然后关闭终端在重新打开终端,即可看到anaconda3的虚拟环境就已经会被更新

谈谈对Spring MVC的理解

问题分析: SpringMVC 是一种基于 Java 语言开发,实现了 Web MVC 设计模式,请求驱动类型 的轻量级 Web 框架。 SpringMVC采用了 MVC 架构模式的思想,通过把 Model,View,Controller 分离,将 Web 层…

【果树农药喷洒机器人】Part1:研究现状分析以及技术路线介绍

本专栏介绍:付费专栏,持续更新机器人实战项目,欢迎各位订阅关注。 关注我,带你了解更多关于机器人、嵌入式、人工智能等方面的优质文章! 文章目录 一、项目背景二、国内外研究现状2.1 国内研究现状2.2 国外研究现状 三…

时序预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测

时序预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测 目录 时序预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测。基于贝叶斯(bayes)…

GCC编译过程:预处理->编译->汇编->链接

目录 引言 概括介绍 一、预处理 二、编译 三、汇编 四、链接 总结 引言 当使用集成开发环境(IDE)进行C语言编程时,点击"编译"按钮后,整个C程序从源代码到可执行文件的生成过程会自动完成。IDE会在后台为我们执行C…

使用idea如何生成webservice客户端

需求阐述 在和外围系统对接的时候,对方只给了wsdl地址,记得之前了解到的webservice,可以用idea生成客户端代码。先记录生成的步骤 使用idea如何生成webservice客户端 1.创建一个Java项目 2.第二步生成代码 我的idea再右键要生成文件目录里…

【数据结构功法】第八话 · 树与二叉树的基本概念

目录 🍺知识点9:树的概念与性质 🍯9.1 树的逻辑结构与性质 🍊1.树的逻辑结构 🍊2.树的相关术语 🍊3.树的性质 📜习题检测 🍯9.2 二叉树的的定义与性质 🍊1.二叉树…

uni——不规则tab切换(skew)

案例展示 案例代码 <!-- 切换栏 --> <view class"tabBoxs"><view class"tabBox"><block v-for"(item,index) in tabList" :key"index"><view class"tabItem":class"current item.id&…