Симплетрон машина и косвенная адресация - PullRequest
2 голосов
/ 14 февраля 2012

Я недавно сделал задание Simpletron из учебника Deitel и Deitel.

В машинном языке Simpletron есть только один режим адресации - прямая адресация.
(то есть вы должны указать адрес, который вы указалихочу получить доступ к части инструкции в операнде.)

Так что я думаю, что нет способа вычислить адрес во время выполнения и получить к нему доступ.

Так что-то вроде этого:

[pseudo-c]

int a[10];

...  

int i = 0;

while(a[i] > 100)  
{  

i++;

}  

..

потребовал бы некоторого самоизменения кода или расширения цикла, я прав?
Итак, мой вопрос:

Учебник представляет Симплетрон очень похожим на ранние компьютеры.

Были ли в последующих архитектурах введены режимы косвенной адресации (например, адресация регистров), чтобы упростить программирование?

1 Ответ

0 голосов
/ 20 февраля 2012

Я верю, что это правильно. Но 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. (Если ОЗУ имеет ширину 8 бит, а память программы - 14 бит!) Очевидно, что вы также не можете изменить программу, если она находится в ПЗУ.

Я не знаю, была ли это специфическая причина, по которой были разработаны режимы косвенной адресации, но это, безусловно, важная причина.

...