PDP11/45 machine code question.

der Mouse mouse at Rodents.Montreal.QC.CA
Sun Feb 20 19:48:45 CST 2005


> I was looking at a listing for a light chaser for the PDP 11, and the
> last instruction is branch back 4, (BR -4). The hex for this is given
> as 000775

Octal, not hex, but yes.

> I understand that this is a bit type instruction, where the op code
> is the base code plus 2*offset.  If the base code is 000400, how do I
> calculate the offset to make it go back ?

The low 8 bits of the instruction are a *signed* offset (measured in
words) from the point after the instruction to the target of the
branch.

> Is bit 7 a sign bit?

I think that's a yes, if by "bit 7" you mean the 000200 bit - but it's
two's-complement, not sign-magnitude, so just thinking of the 000200
bit as a sign bit without realizing that the 000177 bits are also
affected for negative offsets is misleading.

> full program is
> location    contents    opcode
> 001000    012700        mov #1,r0
> 001002    000001        
> 001004    006100        rol r0
> 001006    000005        reset
> 001010    000775        br -4

Right.  That branch instruction contains 0375 in the offset bits.  This
is sign-extended and doubled (the latter to convert from a word offset
to a byte offset), giving 0177772, or -06, and then taken relative to
001012, the address after the branch.  001012-6 is 001004, which is
where execution picks up.

The reason I get -6 and the assembly code says -4 is that the -4 in the
code is relative to the beginning of the instruction, whereas the -6 is
relative to the byte just after the end of the instruction.  The
assembler/disassembler deals with compensating for the difference.

/~\ The ASCII				der Mouse
\ / Ribbon Campaign
 X  Against HTML	       mouse at rodents.montreal.qc.ca
/ \ Email!	     7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B



More information about the cctalk mailing list