Fer*_*llo 23 assembly instruction-set microprocessors vm-implementation
我正在研究汇编编程,所以我决定尝试用软件实现一个"虚拟微处理器",它有寄存器,标志和RAM来处理,用变量和数组实现.但是,由于我只想模拟任何微处理器的最基本行为,我想创建一个只有基本指令的汇编语言,只有那些没有它就没用的指令.我的意思是,有汇编语言可以执行乘法和交换寄存器值等,但这些操作不是基本的,因为您可以使用更简单的指令来实现它们.我不想实现那些指令.
我可以想象一些指令(我相信)必须始终以任何汇编语言存在,例如MOV移动字节和JP将指令指针发送到另一个地址.
你能否提出一套最基本和最基本的装配说明?谢谢!
控制结构包括没有语言的基本特征.这意味着您的语言必须对两个变量提供算术运算; 然后允许程序根据操作的结果更改程序计数器 - 即分支.通常,关键操作是SUB,用于从另一个操作数中减去一个操作数.您允许分支的条件是:
您还需要移动数据的说明:负载和存储,比方说.
任何程序都需要这三个条件及其相应的分支(或跳过,这是另一种方式).不仅如此,只是这三个简单的操作加上数据移动指令,足以在除I/O之外的程序中执行任何操作.如果您愿意,并且给予一个合作的内存组织,您可以使用LOAD,STORE,ADD,SUB和三个条件分支重写Linux.
PDP-8是一个比这更强大的机器:它有一套丰富的八条指令,包括I/O.
HTH
最少的指令集不需要指令或零指令.我不知道他们是否已经进入真正的设备,但是已经实现了一台指令集计算机 并在碳纳米管计算机和MAXQ中成功运行.
然而IMO的架构应该是"快"不够(或不需要像OISC一个任务相比其他架构太多的指令)被认为是有益的.
计算机最基本的指令类型是数据移动,逻辑/算术运算和分支.对于算术运算,只需一个即可mov.对于逻辑,我们可以计算出任何功能,只有一个add/subtract或NOR,所以只需要一个.对于跳跃,我们需要一个NAND或jump on "<="指令.可以通过add/sub模拟数据移动.这样,我们就可以用2位来编码3个操作码(jump on "<",add,nand),并留下一个为将来的扩展.但由于它没有加载/存储指令,因此它必须使用大型寄存器文件并直接从该文件而不是内存处理数据,或者指令必须能够将内存用作操作数.
如果需要更高的速度然后加载/存储,可以添加更多的逻辑和分支指令,将操作码空间增加到3位.指令集可以是: