免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7406 | 回复: 13
打印 上一主题 下一主题

cpu 模拟器 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-28 20:39 |只看该作者 |正序浏览
网友 story_tree 在偶的 blog 里询问 cpu 摸拟器实现的建议。

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


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


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

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

论坛徽章:
0
14 [报告]
发表于 2007-05-14 21:47 |只看该作者
这个比较简单,我做过相对简单的模拟,其实最主要的是识别指令,因为x86是cisc的架构,所以是不定长的,要通过指令码识别,另外注意分配x86架构的通用寄存器,以及他们的用途,还有要晓得寻址方式,以及虚拟内存映射方式,简单的基本方式就是这样,扩展模式就复杂了,寄存器也会多出很多,包括寄存器重写等技术

论坛徽章:
0
13 [报告]
发表于 2007-05-10 06:25 |只看该作者
CPU的模拟,是非常有用的。
交叉开发就需要这个(可能不叫这个名字)。
像低档单片机,由于本身资源极其有限,直接在上面做开发,会有很大的限制。
在各种单片机开发装置上做开发,有一个限制,你不能完全使用这种单片机的所有资源。因为开发装置本身一定要占用一些资源。
如果在X86或PowerPC等机器上做交叉开发,就没有这种限制。
但是,交叉开发也有不足。最大的问题就是上面说的与时间有关的。
做交叉开发,大致有两种。一是只在宿主机上编程、编译(或汇编)、链接,然后把目的程序传到目的机上调试。这只需要做个交叉编译器。二是连调试也在宿主机上做,这就需要模拟CPU了。
13楼说的,可能就是个交叉汇编器吧?

论坛徽章:
0
12 [报告]
发表于 2007-05-09 21:43 |只看该作者
原帖由 beepbug 于 2007-5-9 06:56 发表于 11楼  

这个就不是CPU模拟器,而是汇编器模拟器了。


譬如做一个硬件定时器,本来根据CPU的时钟速率,内置定时/计数器的结构,最短可以做到1μs。现在做成模拟CPU,内置定时/计数器当然也是用另一种CPU指令模拟出 ...


这样做就真正想做一个CPU模拟器了。这就复杂了,倒不如真正设计一个CPU出来!

人家的需求可不需要这么复杂,确实不能称做为“CPU模拟器”称做“解释器”比较合适

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
11 [报告]
发表于 2007-05-09 09:06 |只看该作者
如果在x86上模拟x86,那么可能不会有太大的性能损失。模拟指令可以直接在芯片上执行而不需要被转换。
性能的损失大多发生在特权指令(如果要运行特权软件如OS的话)和相关的存储管理上。

论坛徽章:
0
10 [报告]
发表于 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的速率,至少要高一个数量级。

论坛徽章:
0
9 [报告]
发表于 2007-05-08 21:44 |只看该作者
原帖由 beepbug 于 2007-5-8 11:25 发表于 9楼  
“将输入的指令进行合法检查后,host 机也是 x86 的话,就直接送CPU执行。host 机不是 x86 的话,对指令做相应的转换后执行”。楼主自己说的话,我们只能这样理解。

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


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


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


偶不明白啥意思,望指教

论坛徽章:
0
8 [报告]
发表于 2007-05-08 11:25 |只看该作者
“将输入的指令进行合法检查后,host 机也是 x86 的话,就直接送CPU执行。host 机不是 x86 的话,对指令做相应的转换后执行”。楼主自己说的话,我们只能这样理解。

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

论坛徽章:
0
7 [报告]
发表于 2007-05-07 19:50 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2007-04-30 22:08 |只看该作者
原帖由 beepbug 于 2007-4-30 15:02 发表于 4楼  
哦。那不该叫CPU模拟器了。我上当了。

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


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

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP