Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly TST和臂组件中的操作。为什么只考虑LSBit?_Assembly_Arm_Logical Operators - Fatal编程技术网

Assembly TST和臂组件中的操作。为什么只考虑LSBit?

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=

关于臂组件:

我对以下代码行中的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=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都是一样的,任何偶数应该遵循相同规则的基数,都必须考虑奇数基数。