Intel 8080:内存偏移计算

时间:2012-11-24 14:14:16

标签: assembly emulation bit-manipulation intel-8080

我正在阅读有关英特尔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

由于

1 个答案:

答案 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