Assembly TST和臂组件中的操作。为什么只考虑LSBit?
关于臂组件: 我对以下代码行中的TST操作有些困惑,这些代码测试一个数字是偶数还是奇数:Assembly TST和臂组件中的操作。为什么只考虑LSBit?,assembly,arm,logical-operators,Assembly,Arm,Logical Operators,关于臂组件: 我对以下代码行中的TST操作有些困惑,这些代码测试一个数字是偶数还是奇数: mov R0, #167 TST R0, #1 //AND operation addeq ... //add if even addne ... //add if not even 我的问题是,为什么TSt操作只考虑最低有效位(LSB)来判断数字是否为偶数,而不考虑#167(LSB的0111)中的其余位 由于TST 167,1将和167以及1将和LSB(0111和0001),并且即使LSB将和to=
mov R0, #167
TST R0, #1 //AND operation
addeq ... //add if even
addne ... //add if not even
我的问题是,为什么TSt操作只考虑最低有效位(LSB)来判断数字是否为偶数,而不考虑#167(LSB的0111)中的其余位
由于TST 167,1将和167以及1将和LSB(0111和0001),并且即使LSB将和to=1,第二个LSB的ANDing不会导致TST操作输出0吗?Z标志是基于整个结果为零或不为零而设置的。i、 e.它是
167&1
中所有位的水平或水平方向
如果希望每个位有32个独立的零或非结果,可以使用AND和查看整数寄存器结果,而不是标志结果。要测试二进制数字是偶数还是奇数,只需检查最右边(最低有效)位。其他位无关紧要,因为它们的所有“值”都是2的非零幂,即偶数 将偶数相加永远不会产生奇数,所以它们并不重要
按位与167和1的结果是1,这不是零。不知道为什么您会如此担心其余的位,因为按位AND的第二个参数只有1,除了LSB之外没有其他的位(它们都将被屏蔽,并在隐式结果中强制为0)。与1相比,只测试R0的(单个)LSB,因为“1”的所有其他位是零-R0的非LSB不能影响结果
0x000000a7&0x00000001==0x00000001(!=0)
-这就是它的全部内容。我不明白这里被问到的问题的前提…:/“为什么只考虑LSB位?”:因为它是奇偶校验位。我明白了,我忘记了只有1和1=1,否则,当对其余位进行AND运算时,任何零的存在都将导致0,并且由于#1=0001,非LSB都是零,因此与它们AND运算的任何东西都将是零。谢谢。在以10为基数的数字中,要知道一个数字是否可以被10整除,你需要看看最低有效位是否为零。在基数10中,要查看一个数字是偶数还是奇数,请查看最低有效位以查看它是偶数还是奇数。在同一交易的基数2中,最低有效位为偶数(0)或奇数(1)。基数8,基数16都是一样的,任何偶数应该遵循相同规则的基数,都必须考虑奇数基数。