我正在尝试模拟英特尔8080指令集,但我仍然坚持使用OUT D8
这条指令,根据书Intel 8080/8085 Assembly Language Programming它说明了
OUT
指令将累加器的内容放在8位数据总线上,并将所选端口的编号放在16位地址总线上。由于端口数范围为0到255,因此端口号在地址总线上重复。
事情是我不明白这是做什么的。有人可以向我解释一下,或者将我推荐给解释它的文章或书籍。
答案 0 :(得分:2)
考虑它的一种方法是8080和衍生产品具有17位地址总线而不是通常引用的16位总线。该地址总线的最高位是芯片的输入/输出请求线(IORQ)。
使用正常加载和存储时,最高位始终复位。执行输入或输出时,始终设置最高位。
英特尔命名这条线,并期望它用于与外围芯片通信,因此名称,可用寻址的更有限形式,扩展的访问成本以及程序计数器和堆栈指针都不能指向地址空间区域。
这给英特尔带来的问题是他们有16位地址总线需要填充,但只采用了8位参数。他们实际做的是将累加器加载到前8位。所以如果你有:
LD A, 0xfe
OUT (0xdc)
然后将值0xfe输出到端口地址0xfedc。
(除了:为Zilog语法而不是英特尔道歉;可能有趣的是,Z80添加了一堆像OUT (C), A
这样的指令,这些指令真正将整个BC转储到地址总线而不仅仅是C和大多数Z80微制造商我们非常乐意使用完整的16位地址,因为它允许他们使用简化的逻辑“如果该地址线为低电平则正在寻址组件”,同时仍有一个适当的范围留给外部外设)
答案 1 :(得分:1)
仿效它的意思是
当模拟设备中存在IN / OUT端口时 - 端口中的简单IN / OUT数据
当模拟设备具有内存映射端口时 -
然后
OUT AB - >到STA ABAB
IN 12 - > LDAX 1212
对于硬件开发人员而言,这意味着当执行输入/输出时,地址总线具有15-8 = a7-a0和= portNum