1

Intel8080エミュレーションエミュレータ101に関するこのガイドを読んでいて、自分が書いたものを確認するためにコードを読んでいるときに、これに遭遇しました。

case 0x36:      //MVI   M,byte
{                   
//AC set if lower nibble of h was zero prior to dec
uint16_t offset = (state->h<<8) | state->l;
state->memory[offset] = opcode[1];
state->pc++;
}
break;

Intel 8080/8085アセンブリ言語プログラミングという本から、私はMVIについてこれを読みました

この命令は、2番目のバイトに格納されているデータをHとLによってアドレス指定されたメモリ位置にコピーします。Mは、HとLのレジスタペアへのシンボリックリファレンスです。

だから、オフセットはHとLによってアドレス指定されたメモリ位置であると推測していますが、なぜそのようにするのですか?あれは(state->h<<8) | state->l

ありがとう

4

1 に答える 1

3

<<と|の組み合わせはどうですか 16ビットオフセットを提供しますか?

H、8ビットレジスタを取り上げます。ここで、H 7上位ビットであり、H0は最下位ビットです。

H 7 H 6 H 5 H 4 H 3 H 2 H 1 H 0

L、8ビットレジスタを取り上げます。ここで、L 7最上位ビットで、L0最下位ビットです。

L 7 L 6 L 5 L 4 L 3 L 2 L 1 L 0

Hここで、 (最も高い8ビット)と(最も低い8ビット)を組み合わせた結果として生じる16ビットオフセットを構築する必要があります。C / C ++ / Javaでは、これは8ビット左シフトとそれに続く8ビットシフトによって実現できます。ビット単位-または次のように:L<<|

H =   H 7 H 6 H 5 H 4 H 3 H 2 H 1 H 0 
H << 8 = H 7 H 6 H 5 H 4 H 3 H 2 H 1 H 0 0 0 0 0 0 0 0 0 
H << 8 | L = H 7 H 6 H 5 H 4 H 3 H 2 H 1 H 0 L 7                       L 6 L 5 L 4 L 3 L 2 L 1 L 0
于 2012-11-24T14:31:20.617 に答える