# bitvm **Repository Path**: daxnet/bitvm ## Basic Information - **Project Name**: bitvm - **Description**: 极简虚拟机模型 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-30 - **Last Updated**: 2025-06-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: 虚拟机 ## README # bitvm - 极简虚拟机模型 ## 介绍 bitvm是一个学习型项目,目的是通过实现一个极为简单的虚拟机以及配套的程序编译器,帮助更好地理解计算机运行的基本流程和机理。项目使用C语言编程,采用cmake编译工具链,推荐在Linux下编译运行,或者在Windows下使用cygwin提供的工具链进行编译。 ## bitvm虚拟机 bitvm虚拟机是一款8位虚拟机,它的基本配置如下: - 内存:256个字节(非常少) - CPU:以每秒大约60条指令的频率执行指令,所以主频是60Hz 目前bitvm只干一件事情:完成两个单字节数值的加法运算,并可以输出运算结果。 ### 内存 内存只有256个字节,内存布局如下: ``` 0x00 ~ 0xEF,240个字节,执行程序代码区 0xF0 ~ 0xFD,14个字节,预留区,暂未用到 0xFE ~ 0xFF,2个字节,保存可供输出的加法计算结果 ``` bitvm采用小端字节序(Little-endian),因此,如果希望输出`0x3dfc`的值,则需将`0xfc`保存在内存地址为`0xFE`的内存单元,而将`0x3d`保存在内存地址为`0xFF`的内存单元。 ### CPU #### 寄存器 bitvm CPU提供两个寄存器: - PC:程序计数器(Program Counter) - A:算术累加器,1个字节 #### 指令集 CPU指令集如下: | 指令 | 操作码 | 操作数 | 指令长度 | 说明 | | ----- | ------ | ------ | ----- | ---- | | CLA | 0x5a | (无) | 1 | 清除寄存器A中的数据(A=0) | | STA | 0x5b | 1个字节 | 2 | 将操作数的数值保存到A寄存器 | | ADD | 0x5c | 1个字节 | 2 | 将操作数的数值累加到A寄存器 | | LDA | 0x5d | 1个字节 | 2 | 将A寄存器中的数值保存到内存中,内存地址由操作数决定 | | OUT | 0x5e | (无) | 1 | 将保存在地址`0xfe`和`0xff`中的十六位数值输出到屏幕 | 举例:计算56 + 67的结果: ```asm CLA STA 56 ADD 67 LDA 0xfe OUT ``` ## 文件目录结构 ``` ./ |---- vm # bitvm的虚拟机实现 |---- bitc # bitvm汇编语言编译器 ``` ## 编译bitvm ``` $ git clone https://gitee.com/daxnet/bitvm $ cd bitvm/src $ mkdir build $ cd build $ cmake .. $ make ``` bitvm虚拟机可执行程序为`vm/vm`