您的位置:首页 > 文旅 > 美景 > 线上推广的好处_制作网页教程的软件_杭州百度快照优化排名_永久免费低代码开发平台

线上推广的好处_制作网页教程的软件_杭州百度快照优化排名_永久免费低代码开发平台

2024/12/23 9:01:46 来源:https://blog.csdn.net/2301_76578848/article/details/143538228  浏览:    关键词:线上推广的好处_制作网页教程的软件_杭州百度快照优化排名_永久免费低代码开发平台
线上推广的好处_制作网页教程的软件_杭州百度快照优化排名_永久免费低代码开发平台

目录

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的,但是正数加正数与负数加负数就不一定了,因为一个很可能会超过最大值,一个很可能会小于最小值。这个时候其实转成十进制就能解决问题,同样我们也并不想转十进制,所以我这里还是总结了一个结论

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com