アセンブリに次の簡単なコードがあります。
1000 Add R3,R2,#20
1004 Susbtract R5,R4,#3
1008 And R6,R3,#0x3A
1012 Add R7,R2,R4
私の質問は、「And」が何をするかということです...私はそれについて本当に混乱しています。私は宿題をしていて、行き詰まっています。
どうもありがとう。
アセンブリに次の簡単なコードがあります。
1000 Add R3,R2,#20
1004 Susbtract R5,R4,#3
1008 And R6,R3,#0x3A
1012 Add R7,R2,R4
私の質問は、「And」が何をするかということです...私はそれについて本当に混乱しています。私は宿題をしていて、行き詰まっています。
どうもありがとう。
2 つのソース オペランド間でビット単位and
の演算を行い、結果をデスティネーション オペランドに入れます。結果を詳細に視覚化するには、各数値を 2 進数に変換してから、 を実行し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 である場合にのみ、if となります。
0x3A = 00111010b
8ビットマシン用。これは 64 ビット マシンのように見えるので、先頭に 56 個のゼロを追加します。
[0 から始まる](1 番目、3 番目、4 番目、5 番目、6 番目) を除く R3 の数字のすべてのビットを右からマスクします。他のすべてのビットは無効化され、R6 に格納されます。
たとえば、R3 に 0x5848 が含まれている場合、(0x5848 (および) 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
-----------------