Zur Addressarithmetik: Wenn der Assembler relocatable code erzeugt ist es natuerlich einigermassen umoeglich Addressen zu multipliziern und dividieren. Subtrathieren kann man sie solange die relativen schon definiert sind. relativ - relativ = absolute Instruktionen wie MOV R0, #Addresse / 256 wo Addresse eine relocatale address ist, koennen nicht erzeugt werden, da der Wert von Address beim Assemblieren unbekannt ist. Das man doch so einiges machen kann, zeigt folgendes Beispiel: .PROC test .ENTRY start .MACRO LOAD \load .IF \load - %2 > 4084. MOV %1, #((\load - %2 + 8 + 8) / 100) << 8 ADD %1, %1, #((\load - %2 + 8 + 8) & 0FF) SUB %1, PC, %1 LDR %1, [%1] .ELSE LDR %1, %2 .ENDC .ENDM textaddress: .WORD text text: .STRING "This is a far away string." .ALIGN .BLOCK 2000 start: LOAD R0, textaddress SWI OS_Write0 SWI OS_NewLine SWI OS_Exit .END Dies ist sogar relocatable code, man kann ihn linken.