Вопрос

У меня есть небольшой вопрос о PDP-11 (симулятор), у меня есть эта команда (она начинается с адреса 1000) Добавить 2500, #2500

И этот первоначальный список:

register/address - initial value
pc                 1000
sp                 600
2500               3000

И я хочу знать, как именно работает этот небольшой фрагмент, в моем буклете я обнаружил, что: во -первых, он читает информацию с адреса 1000, внутри этого адреса мы имеем значение 066727, после того, как мы прочитали номер с адреса 1002, и значение должно быть 2500 (из -за добавления 2500, #2500), но в моем буклете у меня есть 1474 без каких -либо объяснений, почему, я знаю, что у меня здесь есть относительный режим адресации, но почему 1474 внутри адреса 1002, а не 2500, заранее спасибо за помощь

Это было полезно?

Решение

ADD 2500,#2500

компилируется как

    0:      066727 ; ADD
    2:      002474 ; 2500 - 6 (next instruction offset)
    4:      002500 ; #2500 (literal value)
    6:      ...    ; next instruction
  ...
 2500:      003000

Другие советы

Если у вас есть:

    add     2500,#2500      ;add content of location 2500 to immediate value.

Первым собранным словом будет инструкция, вторым будут адресные данные для первого операнда ( 2500) и третий будет непосредственным значением 2500Анкет Режим относительной адресации ПК для первого операнда добавит значение ПК к значению, предоставленному для получения адреса операнда. Это будет разница между 2500 и ПК в этот момент (1474, после приращения, чтобы прочитать смещение).

1004 + 1474 = 2500, the address of the data.

Обычно можно сделать:

    add     #2500,2500       ;add 2500 to the word at location 2500.

В качестве первого примера сохранялось результат в потоке инструкций.

Я не помню все режимы адресации, но посмотрите на адрес 1474 и посмотрите, содержит ли он 2500.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top