本帖最后由 yuxuanchiadm 于 2014-9-30 15:07 编辑

主贴:http://www.mcbbs.net/thread-197233-1-1.html

APC是个以汇编语言、VCPU-32虚拟机为基础的MOD。其实其用起来并没有想象中的复杂,只要入门了就很容易学会。此MOD开发时就是个编(触)程(手)普(退)及(散)向的MOD。所以其指令集的设计也尽量简单化。

1.基础MOD知识
APC中有两大设备:
计算机

其中的计算机的前面按钮用于打开和关闭计算机。
侧面的机箱盖右键可以往里面放置CMOS芯片。
和:
外设

(从左到右分别是300Bytes储存器、显示器、键盘、数值显示器、控制台文本显示器、红石控制器)
(其中“控制台文本显示器”可以用“扩展控制台文本显示器”来扩展)
其分别用
数据线和数据接口

连接。
可以用:
外设端口分配器

来分配设备的端口(右键外设)

如果两个设备外设端口相同则后来的会被忽略。
虚拟机需要自行编写程序运行(以后会加一个默认的简单的操作系统)
编写程序没有想象中那么复杂,拿着:
电擦写BIOS设备

右键打开GUI:

右边可以放入
CMOS芯片

如果芯片内有数据则可以点击反编译,反编译芯片中的数据到可识别的文本。
当写好程序后依次点击汇编、写入来写入程序到CMOS芯片。

2.基础程序知识
虚拟机本身有三个部分能存储数据:寄存器、内存和函数栈。
1.寄存器
寄存器是高效、便捷的储存数据的方式。所有寄存器都是线程独立的(线程间不共享)。虚拟机每个线程拥有8个通用寄存器(无其他特定用处的寄存器):A、B、C、X、Y、Z、I、J。可以存放任何自己想存放的数据。有3个特殊寄存器:O、PC、SP。O寄存器用于在特定指令出现错误后读取其数值来确定发生了什么。PC寄存器问程序指针,指向一个特定内存位置,表示线程当前程序目前执行到的位置。改变其数值可以跳转程序。SP寄存器是函数栈的指针,用于确定当前函数栈顶在哪,其值是可变的。
2.内存
内存是虚拟机中最大的存储器,其中存放着程序、BIOS程序(CMOS芯片内的数据)、静态数据和用户数据:

内存 说明
0 - 3071 代码段 存放程序代码
3072 - 7167 静态储存区 储存字符串和其他数据,由编译器编译时修改其中的内容,不应该对其进行修改
7168 - 8191 BIOS预留 BIOS(前512为只读BIOS程序,后512为BIOS设置储存区)
8192 - 65534 自由内存 程序可以自由使用的内存,还可以映射IO端口

其访问方式为[address]例如[8192]为访问8192号内存。也可以用[register]的方式通过先从寄存器获取值,然后再通过寄存器所指定的地址来访问内存,例如[A]、[B]、[C]、[X]、[PC]、[O]等。
3.函数栈:
函数栈用于在两个函数间交换数据,栈是一种先进后出的结构:

关于栈的内容会在以后讲解。
3.第一个程序
任何程序猿的第一个程序几乎都是“Hello World!”。但在这之前,我们先来看看第一个最简单的指令:SET
SET用于设置虚拟机的一个存储器为特定值。
输入:
SET A,233

编译、写入程序到芯片,然后放入虚拟机运行。观察Debug信息(控制台输出)就会发现A寄存器被设置为了233~。



下一教程:基础教程2