Take the 2-minute tour ×

I have small question about pdp-11(simulator), I have this command (it begins from the address 1000) add 2500, #2500

and this initial list:

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

and I want to know how this small snippet exactly runs, in my booklet I found that: firstly it reads inforamtion from the address 1000, inside this address we have value 066727, after we read number from the address 1002, AND VALUE MUST BE 2500(because of add 2500, #2500), but in my booklet I have 1474 without any explanations why, I know that I have here relative addressing mode, but why 1474 inside the address 1002 and not 2500, thanks in advance for any help

share|improve this question

3 Answers 3

up vote 0 down vote accepted
ADD 2500,#2500

compiles as

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

If you have:

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

The first word assembled will be the instruction, the second will be the address data for the first operand (the 2500), and the third will be the immediate value 2500. The PC relative addressing mode for the first operand will add the value of the PC to the value given to get the address of the operand. This will be the difference between 2500 and the PC at that point (1474, after the increment to read the offset).

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

Normally, one would do a:

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

As the first example stored the result in the instruction stream.

share|improve this answer

I don't recall all the addressing modes, but look at address 1474 and see if it contains 2500.

share|improve this answer

Your Answer


