任何汇编语言被认为有用所需的最小指令集是什么?

Fer*_*llo 23 assembly instruction-set microprocessors vm-implementation

我正在研究汇编编程,所以我决定尝试用软件实现一个"虚拟微处理器",它有寄存器,标志和RAM来处理,用变量和数组实现.但是,由于我只想模拟任何微处理器的最基本行为,我想创建一个只有基本指令的汇编语言,只有那些没有它就没用的指令.我的意思是,有汇编语言可以执行乘法和交换寄存器值等,但这些操作不是基本的,因为您可以使用更简单的指令来实现它们.我不想实现那些指令.

我可以想象一些指令(我相信)必须始终以任何汇编语言存在,例如MOV移动字节和JP将指令指针发送到另一个地址.

你能否提出一套最基本和最基本的装配说明?谢谢!

Pet*_*son 9

控制结构包括没有语言的基本特征.这意味着您的语言必须对两个变量提供算术运算; 然后允许程序根据操作的结果更改程序计数器 - 即分支.通常,关键操作是SUB,用于从另一个操作数中减去一个操作数.您允许分支的条件是:

  1. 结果为零;
  2. 结果大于零;
  3. 结果小于零.
  4. 无条件,即无条件分支

您还需要移动数据的说明:负载和存储,比方说.

任何程序都需要这三个条件及其相应的分支(或跳过,这是另一种方式).不仅如此,只是这三个简单的操作加上数据移动指令,足以在除I/O之外的程序中执行任何操作.如果您愿意,并且给予一个合作的内存组织,您可以使用LOAD,STORE,ADD,SUB和三个条件分支重写Linux.

PDP-8是一个比这更强大的机器:它有一套丰富的八条指令,包括I/O.

HTH

  • 这对于最基本的微处理器来说似乎已经足 谢谢! (2认同)

Luk*_*asz 7

嗯,这是一个非常广泛的主题.我想你需要熟悉随机访问机器.我不是专家,但很难说这个非常基本的微处理器应该支持哪些指令.例如:可以通过加法运算来模拟减法和乘法.如果微处理器支持跳转和条件指令,则可以通过添加负数来进行乘法运算.


Arc*_*gon 7

令人惊讶的是,存在一个指令集计算机这样的东西.

  • Apple II软盘驱动器控制器中的"处理器"有一个8位"指令"(来自256字节存储器):在4个控制输出上输出指定的4位值,并使用4个控制输入和4位找到下一条指令的8位地址的指令.而是一个专门的应用程序,但对于任何曾经阅读或编写Apple II软盘的人来说肯定有用. (2认同)

phu*_*clv 7

最少的指令集不需要指令零指令.我不知道他们是否已经进入真正的设备,但是已经实现了一台指令集计算机 并在碳纳米管计算机MAXQ中成功运行.

然而IMO的架构应该是"快"不够(或不需要像OISC一个任务相比其他架构太多的指令)被认为是有益的.

计算机最基本的指令类型是数据移动,逻辑/算术运算和分支.对于算术运算,只需一个即可mov.对于逻辑,我们可以计算出任何功能,只有一个add/subtractNOR,所以只需要一个.对于跳跃,我们需要一个NANDjump on "<="指令.可以通过add/sub模拟数据移动.这样,我们就可以用2位来编码3个操作码(jump on "<",add,nand),并留下一个为将来的扩展.但由于它没有加载/存储指令,因此它必须使用大型寄存器文件并直接从该文件而不是内存处理数据,或者指令必须能够将内存用作操作数.

如果需要更高的速度然后加载/存储,可以添加更多的逻辑和分支指令,将操作码空间增加到3位.指令集可以是:

  1. 加载
  2. 商店
  3. 也不
  4. 跳得不到
  5. 跳得相等