【问题标题】:Simpletron machine and indirect addressingSimpletron 机器和间接寻址
【发布时间】:2012-02-14 13:58:30
【问题描述】:

我最近完成了 Simpletron 任务 来自 Deitel 和 Deitel 教科书。

Simpletron 机器语言只有一种寻址模式,即直接寻址。
(也就是说,你必须在指令的操作数部分指定你要访问的地址。)

所以我认为没有办法在运行时计算地址并访问它。

所以做这样的事情:

[pseudo-c]

int a[10];

...  

int i = 0;

while(a[i] > 100)  
{  

i++;

}  

..

需要一些自我修改代码或扩展循环,对吗?
所以我的问题是:

教科书将 Simpletron 描述为与早期计算机非常相似。

后续架构中是否引入了间接寻址模式(如寄存器寻址)以简化编程?

【问题讨论】:

  • 您的“早期计算机”中有 100 个内存单元吗?我同意您需要自我修改代码或展开循环。定义你所说的“早期计算机”是什么意思,然后去寻找关于指令集的东西”早期的可编程计算机不像我们今天想象的那样在指令集上运行,所以你必须澄清什么意思,看看 4004、8008, 8080、6502 等,以找到类似于现代产品(晶体管、指令集等)的早期产品。
  • 可能是这个原因,但如果您的代码“段”是只读的,这也是必要的..

标签: c assembly history addressing


【解决方案1】:

我相信这是正确的。但是 Simpletron 是如此的微不足道,以至于自修改代码只有三个指令:

// address to load is in accumulator
ADD loadinstruction // construct load instruction
STORE $ + 1         // write instruction to next word of memory
...                 // placeholder filled in by write instruction
// value is in accumulator

loadinstruction: .data 2000

这只是可能的,因为 Simpletron 的程序与其数据共享内存。一些计算机体系结构不这样做;例如,PIC 系列微控制器。 (RAM 是 8 位宽,而程序存储器是 14 位宽!)如果程序在 ROM 中,您也不能修改它,显然足够了。

我不知道这是否是开发间接寻址模式的特定原因,但这肯定是一个重要的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多