英特尔8080:内存偏移计算

问题描述:

我阅读本指南,了解有关英特尔8080仿真Emulator 101当我读的代码来检查我写的,我是从一个叫做英特尔8080本书偶然发现了这个英特尔8080:内存偏移计算

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; 

/8085汇编语言程序,我读到MVI这个

存储在其第二个字节的数据到由H和L.中号寻址的 存储器位置这指令复制是一个符号参照 H和L寄存器对。

所以我猜测偏移量是H和L处理的内存位置,但为什么我们这样做?这是(state->h<<8) | state->l

感谢

+2

你的意思是“我们为什么要那样做?”文档中说'M'是'H'和'L'对的约定,'H'和'L'寄存器组合在一起(通过' vladr

+0

我的意思是''''和'|'的组合怎么给我们16位的偏移? –

+1

表示一个16位值需要两个字节。向左移8位将'h'的值放入第二个(* h * igh)字节(并将0放入低位字节),并将'|'与* l * ow字节('l '),产生所需的偏移量。研究小端和按位操作。 – DCoder

是如何的< <和组合|给我们16位偏移量?

H,一个8位的寄存器,其中H 是最显著位和H 是至少显著位:

H7H6H5H4H3H2H1H0

L,一个8位寄存器,其中L 是最高有效位和L 是最低有效位:

L7L6L5L4L3L2L1L0

您现在要建构16位偏移因组合Hħ ighest 8位)的结果和L大号亏欠于8位)。在C/C++/Java的,这可以通过一个来实现8位左移位01​​接着是按位或|如下:

 
H  = H7H6H5H4H3H2H1H0 
H<<8 = H7H6H5H4H3H2H1H000000000 
H<<8|L = H7H6H5H4H3H2H1H0L7L6L5L4L3L2L1L0
+0

非常感谢vladr。 –