mik 发表于 2007-04-28 20:39

cpu 模拟器

网友 story_tree 在偶的 blog 里询问 cpu 摸拟器实现的建议。

斑竹你好,我来你这里讨教了,我现在在写一个cpu的模拟器,就是为了能够识别和模拟执行ia-32的指令,给点建议吧

呵呵,讨教就不敢当。偶觉得这是个很好的练手项目,有意思,所以在论坛里大家讨论讨论。


其目的是:建立一个 CPU 的模拟执行环境,主要是 x86 架构方面的。

如果是输入指令流,然后执行的,有点像 debug 这种模式,这种需求并不难。
将输入的指令进行合法检查后,host 机也是 x86 的话,就直接送CPU执行。host 机不是 x86 的话,对指令做相应的转换后执行

beepbug 发表于 2007-04-29 10:20

将输入的指令进行合法检查后,host 机也是 x86 的话,就直接送CPU执行。host 机不是 x86 的话,对指令做相应的转换后执行
怎么判断某一个或几个字节是X86指令,还是PowerPC指令,还是ARM指令,还是MCS-51的指令?
没办法判别的。

mik 发表于 2007-04-29 12:29

原帖由 beepbug 于 2007-4-29 10:20 发表于 2楼

怎么判断某一个或几个字节是X86指令,还是PowerPC指令,还是ARM指令,还是MCS-51的指令?
没办法判别的。


1、他的需求是输入汇编码而不是机器指令
2、他的需求已经讲得很明白了,就是:摸拟 X86 CPU,何需判断输入的是 x86、还是 PowerPC 指令

beepbug 发表于 2007-04-30 15:02

哦。那不该叫CPU模拟器了。我上当了。

不过,还是有问题。不同汇编语言并非所有指令都不同,有些正好定义成一模一样,怎么办?

[ 本帖最后由 beepbug 于 2007-4-30 15:04 编辑 ]

cjaizss 发表于 2007-04-30 21:46

原帖由 beepbug 于 2007-4-30 15:02 发表于 4楼
哦。那不该叫CPU模拟器了。我上当了。

不过,还是有问题。不同汇编语言并非所有指令都不同,有些正好定义成一模一样,怎么办?
定义成一模一样又有啥矛盾呢?

mik 发表于 2007-04-30 22:08

原帖由 beepbug 于 2007-4-30 15:02 发表于 4楼
哦。那不该叫CPU模拟器了。我上当了。

不过,还是有问题。不同汇编语言并非所有指令都不同,有些正好定义成一模一样,怎么办?

2、他的需求已经讲得很明白了,就是:摸拟 X86 CPU,何需判断输入的是 x86、还是 PowerPC 指令

FireR2 发表于 2007-05-07 19:50

beepbug 发表于 2007-05-08 11:25

“将输入的指令进行合法检查后,host 机也是 x86 的话,就直接送CPU执行。host 机不是 x86 的话,对指令做相应的转换后执行”。楼主自己说的话,我们只能这样理解。

所谓CPU模拟器。我理解,是在一种CPU平台上,用软件做一个VM,在这个VM上能“运行”另外一种完全不同的CPU指令。
在绝大多数CPU中,总有某些指令同时间密切相关。因此,要完全模拟,寄生CPU的速率至少要比被模拟CPU高一个数量级。

mik 发表于 2007-05-08 21:44

原帖由 beepbug 于 2007-5-8 11:25 发表于 9楼
“将输入的指令进行合法检查后,host 机也是 x86 的话,就直接送CPU执行。host 机不是 x86 的话,对指令做相应的转换后执行”。楼主自己说的话,我们只能这样理解。

所谓CPU模拟器。我理解,是在一种CPU平台 ...

偶所说的:“将输入的指令进行合法检查后”是指语法上的检查。例如: "add ," .....


绝大多数CPU中,总有某些指令同时间密切相关。因此,要完全模拟,寄生CPU的速率至少要比被模拟CPU高一个数量级

偶不明白啥意思,望指教

beepbug 发表于 2007-05-09 06:56

原帖由 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
查看完整版本: cpu 模拟器