当前位置: 首页 > article >正文

6:arm condition code flags详细的讲解

目录

6.1 arm的 condition code flag 的详细讲解

6.1.1C

6.1.2Z

6.1.3N

6.1.4V


6.1 arm的 condition code flag 的详细讲解

在这篇文章中,我更加严格与严谨的讲解一下 arm的四个condition code flags,因为这个在汇编中还是非常重要的。

6.1.1C

在这个之中,C表示最后的结果有没有溢出,判断加法最后有没有进位,而减法有没有借位,如果是这样的,那么C将会成为1,否则C是0。

MOV R0, #0xFF     ; 将无符号最大值255 (0xFF)放入R0
ADD R0, R0, #1    ; 加1,结果变成256

0xFF是8bits中最大的值255,如果再加一,那么将会成为256就是会有9bits所以将会发生借位,所以答案C=1

再举一个例子


11010000+11110010 

那看看这个C咋样,首先得会计算这个玩意吧,加出来会成为111000010,所以这里有9bits了所以C=1

6.1.2Z

z代表的是zero flag这个还是很简单能理解的,就像我之前说的看他有没有作用,不能没有作用吧,这个就是看他是不是零,是零就是1,不是零就是0,同样也有例子

LDR R1, =0x80000000

LDR R2, =0xFFFFFFFF

ADDS R0, R1, R2

结果是0x7FFFFFFF,这可不是零啊,所以说这个Z=0,这个flag非常简单,因为就判断它是不是零就完事了。

6.1.3N

n flag是判断这个数字是不是负数的一个flag,这个也非常简单,但是这个是不是负数,再二进制的时候非常好判断,但是到十六进制就没有那么好判断。

举一个例子来说

还是这个,

11010000+11110010 ,答案上面也算出来了1 11000010,这个8bits,所以前面的那个就可以不要了(C=1),那么你看这个11000010最左边的是1,那么这个就是负数,那么这个N =1。

LDR R1, =0x40000000

LDR R2, =0x40000000

ADDS R0, R1, R2

那这个N是0还是1呢,其实这个加起来非常简单,答案是0x80000000,但是这个是正数还是负数呢?只能先转成2进制,那么这个将会非常麻烦,我们总结了一个规律。

正数:0x00000001--0x7FFFFFFF

负数:0x80000000--0xFFFFFFFF

当然还有一个0(既不是正数,也不是负数):0x00000000,

在flag的判断中是负数的为1,其他的就是0,所以在这里,0x80000000很抱歉并不是正数,是负数,所以N=1

6.1.4V

这个是这几个中比较难的一个flag,这个表示的是我最后运算好的值不能超过我2进制8bits中的补码范围。也就是[-2^7,2^7-1]这样一个范围。如果我超出了这个范围,那么V=1,不然的话就没啥事情了。所以在这里如果是一个负数与一个正数相加的话,其实100%V=0的,但是正数加正数与负数加负数就不一定了,因为一个很可能会超过最大值,一个很可能会小于最小值。这个时候其实转成十进制就能解决问题,同样我们也并不想转十进制,所以我这里还是总结了一个结论

  • 两数同为正,相加结果却变为负,说明溢出。
  • 两数同为负,相加结果却变为正,也说明溢出。

http://www.kler.cn/a/387905.html

相关文章:

  • Dial-insight:利用高质量特定领域数据微调大型语言模型防止灾难性遗忘
  • Elasticsearch(ES)简介
  • 《AI 使生活更美好》
  • mysql 更改 字段长度
  • uni-app表单⑪
  • pgsql和mysql的自增主键差异
  • P5019 [NOIP2018 提高组] 铺设道路
  • volta多版本node管理工具
  • 「Mac畅玩鸿蒙与硬件30」UI互动应用篇7 - 简易计步器
  • 共享汽车管理:SpringBoot技术实现指南
  • ubuntu 22.04 如何调整进程启动后能打开的文件数限制
  • 基于Spring Boot+Vue的养老院管理系统【原创】
  • ElasticSearch备考 -- 集群配置常见问题
  • FPN(Feature Pyramid Network)
  • pytorch3d报错:RuntimeError: Not compiled with GPU support.
  • 后台管理系统窗体程序:文章管理 > 文章列表
  • ChatGPT键盘快捷键(按ctrl + /呼出)
  • JavaSE:运算符 (学习笔记)
  • LeetCode热题100之贪心算法
  • 【系统架构设计师】2024年下半年真题论文: 论分布式事务及其解决方案(包括参考素材)
  • 【C语言】调试宏:进阶篇
  • Unity引擎智能座舱解决方案
  • C# 中 LibraryImport 和 DllImport有什么不同
  • [C++11] Lambda 表达式
  • 1.1 Android 应用的基础知识
  • w030基于web的甘肃非物质文化网站的设计与开发