前言
上一期,我们粗略分析了bochs中cpu执行的大体流程,并且修改了代码禁止指令的递归执行。众所周知,在众多指令中通过IO与外设进行交互的指令是in/out指令,我们这篇文章就来大体分析一下in/out指令执行流程。
在第七篇文章中,我们通过floppy外设简单分析了一下IO中断的结构体,我们将它放在这篇文章开头处,可能在分析过程中具有参考价值。

定位到out指令
在上篇文章中我们分析了BIOS的启动流程,其第三条指令为"BIOS_F:E05D out 0Dh, al",因此我们就使用该指令来作为分析指令。
BIOS_F:FFF0 jmp far ptr start_0
BIOS_F:E05B start_0: ; CODE XREF: sub_F5421+2BC↑J
BIOS_F:E05B ; start↓J
BIOS_F:E05B xor ax, ax
BIOS_F:E05D out 0Dh, al ; DMA controller, 8237A-5.
我们下面来设置软件条件断点定位到该指令处,首先必须看上篇文章将递归执行的宏给关掉。之后如下图,我们设置软件条件断点,其该指令的执行地址为0xf000:E05D,则条

本文详细介绍了Bochs模拟器中处理in/out指令的流程,从定位到out指令开始,分析了指令执行的具体步骤,以及IO注册的过程。在执行out指令时,数据被发送到连接于特定端口的设备,如DMA控制器。文章还回顾了IO注册的机制,强调了设备初始化时对端口的注册操作。最后,指出了在禁止CPU递归执行过程中遇到的问题,预示了后续将进一步探讨解决方案。
最低0.47元/天 解锁文章
2792

被折叠的 条评论
为什么被折叠?



