英特尔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
感谢
答
是如何的< <和组合|给我们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。 –
你的意思是“我们为什么要那样做?”文档中说'M'是'H'和'L'对的约定,'H'和'L'寄存器组合在一起(通过' vladr
我的意思是''''和'|'的组合怎么给我们16位的偏移? –
表示一个16位值需要两个字节。向左移8位将'h'的值放入第二个(* h * igh)字节(并将0放入低位字节),并将'|'与* l * ow字节('l '),产生所需的偏移量。研究小端和按位操作。 – DCoder