HEC虚拟机的一些改进建议
陈硕 2004-02-13
在《虚拟机的设计与实现——C/C++》一书中,作者Bill Blunden描述了一个简单但完整的虚拟机——HEC的设计及实现。在阅读第三章的过程中,我发现有几处值得改进的地方。不是针对HEC的总体设计和代码结构——那样牵一发而动全局,而是针对HEC虚拟机实现代码中某些细节做些改进。
1. 转换字节序
HEC的字节序(byte order)是big-endian(高位在前),而宿主平台(Win32 on Intel)是little-endian(低位在前),所以在装入.RUN文件时需要转换字节序。作者先定义了HEC虚拟机的各种类型(p.61,原书p.67):
#define U1 unsigned char
#define U2 unsigned short
#define U4 unsigned long
#define U8 unsigned __int64
然后定义了10个转换函数(p.62,原书p.68)。例如,U2 bytecodeToWord(U1 bytes[]) 的作用是将big-endian的16位无符号整数转换为本机格式:
U2 bytecodeToWord(U1 bytes[])
{
U2 word;
U1 *buffer;
buffer = (U1*)&word;
buffer[0] = bytes[1];
buffer[1] = bytes[0];
return(word);
}
这个函数没有考虑移植性(portability),它认定本机的字节序是little-endian。一种移植性较好的做法是:

本文提出了对HEC虚拟机的几点改进建议,包括使用移植性更好的字节序转换方法,如利用sockets API中的ntohs()和ntohl()函数,以及改进指令验证过程,通过设计小语言描述指令格式,提高代码复用性和可维护性。此外,还建议增加SLTU指令以支持有符号整数比较。
最低0.47元/天 解锁文章
3882

被折叠的 条评论
为什么被折叠?



