中断如何在Intel 8080上运行?我搜索了谷歌和英特尔的官方文档(197X),我发现只有一点关于此的描述.我需要一个关于它的详细解释,来模拟这个CPU.
我想比较两个 16 位数字并根据结果进行分支:相当于if (a<b) goto negative. 我使用的是英特尔 8080。
Z80 有一个有符号算术溢出标志,可以通过一定程度的努力来实现此目的。标准代码是:
ld de, _left
ld hl, _right
ld a, e
sub a, l
ld a, d
sbc a, h
jp po, $+5 ; branch on overflow flag not set
xor a, 0x80 ; flip sign bit
jm negative ; actually do the test
Run Code Online (Sandbox Code Playgroud)
但8080并不是Z80的严格子集,上面的代码在那里不起作用——在8080上,算术指令根据结果的奇偶校验设置P标志,结果很搞笑。
那么在 8080 上进行带符号比较的惯用方法是什么?
实际上计算溢出标志是可能的,但确实很痛苦,因为它需要对操作数和结果进行位操作,而且我的寄存器已经用完了。而且,这实际上并不是我想要的;我实际上并不关心溢出。我只是想做个比较。
(如果结果为负,我不能简单地进行减法和分支,因为这并不适用于所有情况。考虑 INT_MIN < INT_MAX。即 0x8000 - 0x7fff = 1,这显然是正数。)
在Z80,8080,8085和8086处理器的标志寄存器中,第1,3,5位的目的是什么,它们被记录为"保留"或"未定义"?
由于Gameboy的处理器LR35902是Z80和Intel 8080的混合体,因此请记住,Z80和Intel 8080的设计基本上都是交叉兼容的,拥有Z80处理器的任何产品都可以运行是指LR35902?我想知道不是因为我希望使用TI84在自习室玩口袋妖怪。
编辑:我知道我将不得不重新编程控件,可能还需要重新编程游戏访问RAM的方式,但是我宁愿这样做,也不愿移植整个游戏。
我为 Intel 8080 编写了一个模拟器,我想检查我实现的指令是否正确。是否有测试套件或方法来测试每条指令是否正确?
我的模拟器是用 C 编写的。
最近我一直在玩Altair 8800仿真器以了解计算的基础知识,我想知道处理器如何"知道"字节是指令还是数据?
我正在开展一个个人项目,以提高我对CPU工作方式的了解.所以我正在做一个Intel 8080仿真器,它是一个8位微处理器.
在RRC指令的实现中,其示例如下:
case 0x0f: {
uint8_t x = state->a;
state->a = ((x & 1) << 7) | (x >> 1);
state->cc.cy = (1 == (x&1));
}
Run Code Online (Sandbox Code Playgroud)
我无法理解这条线是如何工作的.
state->a = ((x & 1) << 7) | (x >> 1);
Run Code Online (Sandbox Code Playgroud)
我知道它应该将所有位向右移动1个位置,但我无法弄清楚如何.
如果有人能够为我提供一步一步的实际操作示例,我将不胜感激.
state->a是一个uint8_t模拟名为A的intel 8080寄存器的模拟器.
0x0f 是RRC的HEX值.
这个例子已提供此页.
intel-8080 ×7
assembly ×3
emulation ×2
z80 ×2
8085 ×1
binary ×1
c ×1
comparison ×1
gameboy ×1
instructions ×1
intel ×1
interrupt ×1
signed ×1
test-suite ×1
x86-16 ×1