summaryrefslogtreecommitdiff
path: root/rdoff/test/rdftest1.asm
diff options
context:
space:
mode:
Diffstat (limited to 'rdoff/test/rdftest1.asm')
-rw-r--r--rdoff/test/rdftest1.asm54
1 files changed, 54 insertions, 0 deletions
diff --git a/rdoff/test/rdftest1.asm b/rdoff/test/rdftest1.asm
new file mode 100644
index 0000000..76f1e43
--- /dev/null
+++ b/rdoff/test/rdftest1.asm
@@ -0,0 +1,54 @@
+ ;; program to test RDOFF production and linkage
+
+ ;; items to test include:
+ ;; [1] relocation within the same segment in each module
+ ;; [2] relocation to different segments in same module
+ ;; [3] relocation to same segment in different module
+ ;; [4] relocation to different segment in different module
+ ;; [5] relative relocation to same module
+ ;; [6] relative relocation to different module
+ ;; [7] correct generation of BSS addresses
+
+[SECTION .text]
+[BITS 32]
+
+_main:
+ mov ax,localdata ; [2] (16 bit) => 66 b8 0000
+ mov eax,localdata2 ; [2] (32 bit) => b8 0000000a
+
+[EXTERN _fardata]
+
+ mov eax,[_fardata] ; [4] => a1 00000000 (+20)
+ mov cx,next ; [1] => 66 b9 0012
+next:
+ call localproc ; [5] => e8 00000019
+
+[EXTERN _farproc]
+ mov eax,_farproc ; [3] => b8 00000000 (+40+0)
+ call _farproc ; [6] => e8 -$ (-0+40+0) (=1f)
+
+ mov eax,localbss ; [7] => b8 00000000
+
+[GLOBAL _term]
+_term: xor ax,ax ; => 66 31 c0
+ int 21h ; => cd 21
+ jmp _term ; => e9 -0a (=fffffff6)
+
+localproc:
+ ret ; => c3
+
+[GLOBAL _test1proc]
+_test1proc:
+ call localproc ; [5] => e8 -$ (-0+0+?) (=-6=fffffffa)
+ ret ; => c3
+
+[SECTION .data]
+[GLOBAL localdata2]
+localdata: db 'localdata',0
+localdata2: db 'localdata2',0
+farref: dd _fardata ; [3] => 0 (+20)
+localref: dd _main ; [2] => 0 (+0)
+
+[SECTION .bss]
+localbss: resw 4 ; reserve 8 bytes BSS
+ \ No newline at end of file