cpu 模拟器
网友 story_tree 在偶的 blog 里询问 cpu 摸拟器实现的建议。斑竹你好,我来你这里讨教了,我现在在写一个cpu的模拟器,就是为了能够识别和模拟执行ia-32的指令,给点建议吧
呵呵,讨教就不敢当。偶觉得这是个很好的练手项目,有意思,所以在论坛里大家讨论讨论。
其目的是:建立一个 CPU 的模拟执行环境,主要是 x86 架构方面的。
如果是输入指令流,然后执行的,有点像 debug 这种模式,这种需求并不难。
将输入的指令进行合法检查后,host 机也是 x86 的话,就直接送CPU执行。host 机不是 x86 的话,对指令做相应的转换后执行 将输入的指令进行合法检查后,host 机也是 x86 的话,就直接送CPU执行。host 机不是 x86 的话,对指令做相应的转换后执行
怎么判断某一个或几个字节是X86指令,还是PowerPC指令,还是ARM指令,还是MCS-51的指令?
没办法判别的。 原帖由 beepbug 于 2007-4-29 10:20 发表于 2楼
怎么判断某一个或几个字节是X86指令,还是PowerPC指令,还是ARM指令,还是MCS-51的指令?
没办法判别的。
1、他的需求是输入汇编码而不是机器指令
2、他的需求已经讲得很明白了,就是:摸拟 X86 CPU,何需判断输入的是 x86、还是 PowerPC 指令 哦。那不该叫CPU模拟器了。我上当了。
不过,还是有问题。不同汇编语言并非所有指令都不同,有些正好定义成一模一样,怎么办?
[ 本帖最后由 beepbug 于 2007-4-30 15:04 编辑 ] 原帖由 beepbug 于 2007-4-30 15:02 发表于 4楼
哦。那不该叫CPU模拟器了。我上当了。
不过,还是有问题。不同汇编语言并非所有指令都不同,有些正好定义成一模一样,怎么办?
定义成一模一样又有啥矛盾呢? 原帖由 beepbug 于 2007-4-30 15:02 发表于 4楼
哦。那不该叫CPU模拟器了。我上当了。
不过,还是有问题。不同汇编语言并非所有指令都不同,有些正好定义成一模一样,怎么办?
2、他的需求已经讲得很明白了,就是:摸拟 X86 CPU,何需判断输入的是 x86、还是 PowerPC 指令 “将输入的指令进行合法检查后,host 机也是 x86 的话,就直接送CPU执行。host 机不是 x86 的话,对指令做相应的转换后执行”。楼主自己说的话,我们只能这样理解。
所谓CPU模拟器。我理解,是在一种CPU平台上,用软件做一个VM,在这个VM上能“运行”另外一种完全不同的CPU指令。
在绝大多数CPU中,总有某些指令同时间密切相关。因此,要完全模拟,寄生CPU的速率至少要比被模拟CPU高一个数量级。 原帖由 beepbug 于 2007-5-8 11:25 发表于 9楼
“将输入的指令进行合法检查后,host 机也是 x86 的话,就直接送CPU执行。host 机不是 x86 的话,对指令做相应的转换后执行”。楼主自己说的话,我们只能这样理解。
所谓CPU模拟器。我理解,是在一种CPU平台 ...
偶所说的:“将输入的指令进行合法检查后”是指语法上的检查。例如: "add ," .....
绝大多数CPU中,总有某些指令同时间密切相关。因此,要完全模拟,寄生CPU的速率至少要比被模拟CPU高一个数量级
偶不明白啥意思,望指教 原帖由 mik 于 2007-5-8 21:44 发表于 10楼
偶所说的:“将输入的指令进行合法检查后”是指语法上的检查。例如: "add ," .....
这个就不是CPU模拟器,而是汇编器模拟器了。
原帖由 mik 于 2007-5-8 21:44 发表于 10楼
偶不明白啥意思,望指教
譬如做一个硬件定时器,本来根据CPU的时钟速率,内置定时/计数器的结构,最短可以做到1μs。现在做成模拟CPU,内置定时/计数器当然也是用另一种CPU指令模拟出来的,除非后者比前者快很多,否则决计做不出1μs。如果做的是软件定时,那更明白。譬如,需要1ms,原来在实际CPU上做,重复做两条指令1000次。这两条指令做一次就是1μs。现在在模拟CPU上做,是用另一种CPU指令来模拟它,一般需用就多的指令来完成。如果两者的速率是同一数量级,就没法做出来。
据我经验,做模拟CPU的CPU的速率,比被模拟的CPU的速率,至少要高一个数量级。
页:
[1]
2