我正在阅读有关英特尔8080仿真Emulator 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的这个
该指令将存储在其第二个字节中的数据复制到 由H和L处理的存储位置M是对符号的参考 H和L寄存器对。
所以我猜测偏移量是H和L所解决的内存位置,但为什么我们这样做呢?那是(state->h<<8) | state->l
由于
答案 0 :(得分:3)
&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;和|给我们16位偏移?
取H
,一个8位寄存器,其中H 7 是最高有效位,H 0 是最低有效位:
H7H6H5H4H3H2H1H0
取L
,一个8位寄存器,其中L 7 是最高有效位,L 0 是最低有效位:
L7L6L5L4L3L2L1L0
您现在想要构造由H
( H 最高8位)和L
( L owest 8-bit。)在C / C ++ / Java中,这可以通过8位左移<<
后跟按位 - 或|
来实现,如下所示:
H = H7H6H5H4H3H2H1H0 H<<8 = H7H6H5H4H3H2H1H00 0 0 0 0 0 0 0 H<<8|L = H7H6H5H4H3H2H1H0L7L6L5L4L3L2L1L0