我正在学习汇编编程,所以我决定尝试在软件中实现一个“虚拟微处理器”,它有寄存器、标志和RAM,可以用变量和数组实现。但是,由于我只想模拟--这是任何微处理器中最基本的行为,我想要创建一种汇编语言,它只有必要的指令,只有那些指令,没有这些指令就无法使用。我的意思是,有些汇编语言可以做乘法和交换寄存器值等,但这些操作并不基本,因为您可以使用更简单的指令来实现它们。我不想执行这样的指令。
我可以想象到在任何汇编语言中都必须有几条指令(我相信),比如MOV移动字节,JP将指令指针发送到另一个地址。
你能提出一套最基本和最基本的装配说明吗?谢谢!
发布于 2012-02-24 22:35:11
嗯,这是一个非常广泛的主题。我想您需要熟悉随机存取机。我不是专家,但很难分辨哪些指令应该得到这个非常基本的微处理器的支持。例如,可以通过加法运算来模拟减法和乘法。如果微处理器支持跳转和条件指令,则乘法是可能的,并且可以通过增加负数来减法。
发布于 2012-02-24 23:04:06
令人惊讶的是,存在着一台指令集计算机这样的东西。
发布于 2013-10-30 08:58:00
最少的指令集需要无指令或零指令。我不知道它们是否进入了真正的设备,但是(监委会) 已经实现了,并在碳纳米管计算机和MAXQ中成功运行。
事实上,x86也可以作为OISC体系结构使用,因为只要一个mov就可以完成的任何事情,因为它是证明是图灵全的。甚至还有一个名为动杂波器的编译器可以将有效的C代码编译成一个程序,其中只有MOV(或者只有XOR、SUB、ADD、XADD、ADC、SBB和/ or、PUSH/POP、1位移位,或者CMPXCHG/XCHG)。请参阅为什么mov图灵完成了?
然而,与其他体系结构相比,一个体系结构应该足够“快速”(或者不需要像OISC这样的太多指令来执行任务)才能被认为是有用的。
计算机最基本的指令类型是数据移动、逻辑/算术操作和分支。对于算术运算,只要一个add/subtract就足够了。对于逻辑,我们可以只使用NOR或NAND计算任何函数,因此只需要一个。要跳转,我们需要一个jump on "<="或jump on "<"指令。数据移动可以由add/sub来模拟。这样,我们可以使用2位来编码3个操作码(add、nand、jump on "<="),并留出一个供将来扩展。但是,由于它没有单独的加载/存储指令,所以它必须直接操作大寄存器文件而不是内存,或者指令必须能够使用内存作为操作数。
如果需要更多的速度,则可以添加更多的逻辑、分支指令和可能的加载/存储,从而将操作码空间增加到3位。指令集可以是:
左移可以用add来完成,但是右移比较困难,所以您可能还想添加一个右移位来简化一些常见的操作。
https://stackoverflow.com/questions/9439001
复制相似问题