工具
精华
|
战斗力 鹅
|
回帖 0
注册时间 2005-4-11
|
对一般应用来说,模拟CPU只需要模拟CPU的指令。举例来说,如何模拟 mov ax, bx 这条指令?假如用 C++ 来写模拟程序,可以定义 AX 和 BX 两个变量来保存这两个寄存器的值,用一条命令 AX = BX 就完成了汇编指令执行结果。
在实际应用中,还需要有汇编指令的输入和分析功能,还要有显示手段来明示指令执行结果。在上例中,需要首先显示 AX 和 BX 寄存器的初始值。假如其初始值分别是 0 和 128,可以在窗口中显示:
AX = 0000
BX = 0080 (把 128 显示为十六进制 80h)
需要有一段程序来分析 mov ax, bx 这条指令,类似于一般的语句分析(汇编语句的分析应该很简单)。分析之后,程序明白指令的含义是把 bx 寄存器的值复制到 ax 寄存器,于是调用 C++ 的 AX = BX 语句,然后显示如下执行结果:
AX = 0080
BX = 0080
这样就完成了整个指令执行过程。无论所模拟的 CPU 很简单还是很复杂,其基本模拟方式大同小异。当然,还需要模拟内存状态,或许还需要模拟堆栈空间。基本手段都是一样的。这种模拟方式可以连续执行多条汇编指令,还可以设置单步跟踪和断点跟踪。
但是,这跟能完全模拟运行不是一个感念好吧,不单纯的是0和1的事~ |
|