我在C中做了一个模拟Intel 8080微处理器的作业。其中一条指令是递增和递减寄存器对(INX和DCX),为此我们被告知使用此代码:
temp = (long)Registers[REGISTER_X] << 8 + (long)Registers[REGISTER_X];
其中X
是寄存器的字母(A,B,C,D等)
我的理解是,这首先将两个寄存器加在一起,然后将一些东西(我不确定是什么?)向左移8位。
这类似于我们使用的减量:
temp = (long)Registers[REGISTER_X] << 8 - (long)Registers[REGISTER_X];
任何人都可以解释这是如何增加寄存器对以及在此操作中移动的内容,因为我有点困惑。
感谢您的回复,我认为没有,我不知道他们从哪里获得该代码。 这样的事情会更合适吗?
temp = ((WORD)Registers[REGISTER_B] << 8) + (WORD)Registers[REGISTER_C];
temp++;
Registers[REGISTER_B] = (BYTE) (temp >> 8) & 0xFF;
Registers[REGISTER_C] = (BYTE) (temp & 0xFF);
答案 0 :(得分:0)
如果您的Register矢量使用BYTE元素,您可以使用这一个衬垫:
Registers[REGISTER_B] += ((++Registers[REGISTER_C]) == 0)? 1 : 0;