新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 80C51虚拟指令执行系统的设计与实现

80C51虚拟指令执行系统的设计与实现

作者:时间:2011-07-04来源:网络收藏


3 器的
一般地,CPU总是不停的取、分析指令,指令器执行同样的过程,它以模拟上述三个阶段的操作为核心,并模拟出指令中每条指令的执行效果。图4给出了指令执行器的总体

本文引用地址:http://www.eepw.com.cn/article/172643.htm

i.JPG


可以看出,虚拟指令执行器的工作流程分为三个阶段:取指令阶段、分析指令阶段和执行指令阶段。
3.1 取指令阶段
虚拟的指令执行每一周期根据PC的值从虚拟的ROM中取将要执行的指令。在虚拟指令执行器执行指令之前,必须将硬盘上的二进制文件(hex文件格式)加载到虚拟的ROM中,作为指令执行器的输入。装载的过程按照如下描述完成:解析二进制文件的内容,将指令存放在指定的ROM地址处。加载完成后还需要将PC寄存器的值设置为第一条要执行的指令的地址。
虚拟的指令执行每次取的指令长度是不确定的。的指令长度不是固定的,分为单字节、双字节和三字节指令三种,因此取一条指令时需要确定该条指令的长度。通过分析的指令表可以得到,任何一条指令第一个字节都是唯一的。利用这个特点,可以建一个该字节到指令长度的映射表。取指令时,先从PC所指地址处取第一个字节,然后通过查询映射表再取相应的字节数。取指成功后需要更新PC值,使PC就指向下条指令的地址。
为了后续两个阶段的使用,需要将取到的指令存放在一个缓冲区中。80C51的最长指令为3个字节,因此可以使用一个3个字节长度的数组存放取到的指令,比如unsigned char inst,将取到的指令按顺序填充到inst中。
3.2 分析指令阶段
一条指令包括操作码和操作数,操作码决定该条指令对操作数执行什么样的动作。分析指令阶段需要从取到的指令中解析出操作码和操作数。解析的过程为,假设指令已经取到inst中,从虚拟指令执行器的角度可以认为指令的第一个字节为操作码,即inst[0],操作数分别存在inst[1]和inst[2]中,根据操作码到指令长度的映射表确定操作数的个数。
解析出指令码和操作数后,就需要根据操作码来调用该指令对应的执行函数。每条指令都有自己的执行动作,可以为每条指令一个执行函数来模拟该指令的执行动作。指令操作码和指令执行函数也是一一对应的,所以虚拟系统中会有指令操作码到指令执行函数的映射表,当分析出指令的操作码后,就能快速地调用该指令的执行函数来模拟该指令的语义动作。比如,取到的指令为e580,按照前面所述,0xe5为操作码,存放在inst[0]中,0x80为操作数,存放在inst[1]中,通查指令表可知0xe5对应的汇编指令为MOV A,direct,为这条指令设计一个执行函数mov_a_direct0,虚拟的指令执行系统在执行指令e580时,实际上就是调用其执行函数mov_a_direct 0。
3.3 执行指令阶段
指令的执行动作是通过调用指令的执行函数来完成的。指令的执行函数是对该条指令的实际执行动作的模拟,主要包括对寄存器、内存的访问,以及对程序状态字中标志位的影响等。比如上面介绍的操作码为0xe5的指令,该指令对应的汇编指令为MOV A,direct,其意义为将direct中的内存数存放在寄存器A中,并且改变PSW中的P标志位,该指令的执行函数mov_a_direct 0实际上就是对上面描述的
j.JPG
k.JPG
80C51指令系统共有111条指令,虚拟指令执行器为每条指令都设计一个类似的执行函数。这些指令可以分为几类:数据传送指令、算术运算指令、逻辑运算和移位指令、控制转移指令和位操作指令。在设计执行函数时有一些需要注意的地方:算术运算指令需要注意运算对PSW的标志位的影响,控制转移指令需要精确改变PC寄存器的值等。

4 结束语
本文详细介绍了虚拟80C51指令执行系统的设计与,文章给出的方法也适用于存储空间和指令规模与80C51相似的单片机指令系统。虚拟指令执行系统是虚拟目标机其他功能的基础,有广泛的应用,比如可以构造出基于虚拟指令执行系统的目标机代码调试器等。另外根据应用需要.也可增加对80C51单片机的虚拟范围,比如实现对中断和I/O等的虚拟。


上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭