我在汇编中有这个简单的代码:
1000 Add R3,R2,#20
1004 Susbtract R5,R4,#3
1008 And R6,R3,#0x3A
1012 Add R7,R2,R4
我的问题是“和”做了什么......我真的很困惑,我正在做我的功课,我被卡住了。
太感谢了。
我在汇编中有这个简单的代码:
1000 Add R3,R2,#20
1004 Susbtract R5,R4,#3
1008 And R6,R3,#0x3A
1012 Add R7,R2,R4
我的问题是“和”做了什么......我真的很困惑,我正在做我的功课,我被卡住了。
太感谢了。
它and
在两个源操作数之间进行按位运算,并将结果放入目标操作数。要详细可视化结果,请将每个数字转换为二进制,然后执行and
. 例如,如果 R0 = 0x1234 且 R1 = 0x8765,则:
R0 = 0x1234 = 0001 0010 0011 0100
R1 = 0x8765 = 1000 0111 0110 0101
Result = 0000 0010 0010 0100
Hex result = 0x0224
即,结果中的每一位都是1
当且仅当两个输入操作数中该位置的位都是 1 时。
0x3A = 00111010b
对于 8 位机器。这看起来像一个 64 位机器,所以在前面加上 56 个零。
它将屏蔽 R3 中除 [starts from 0](1st, 3rd, 4th, 5th and 6th) 之外的所有数字位,从右开始。所有其他位将被无效并存储在 R6 中
例如,如果 R3 包含 0x5848,则 (0x5848 (and) 0x3A) = 0x08 (将存储在 R6 寄存器中)
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0101 1000 0100 1000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0011 1010 (AND)
--------------------------------------------------------------------------------------
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1000
--------------------------------------------------------------------------------------
AND运算的真值表=
A B A(and)B
-----------------
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1
-----------------