diff options
Diffstat (limited to 'test/objtest.asm')
-rw-r--r-- | test/objtest.asm | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/test/objtest.asm b/test/objtest.asm new file mode 100644 index 0000000..8530bae --- /dev/null +++ b/test/objtest.asm @@ -0,0 +1,82 @@ +; test source file for assembling to Microsoft 16-bit .OBJ +; build with (16-bit Microsoft C): +; nasm -f obj objtest.asm +; cl /AL objtest.obj objlink.c +; other compilers should work too, provided they handle large +; model in the same way as MS C + +; This file should test the following: +; [1] Define and export a global symbol +; [2] Define a non-global symbol +; [3] Define a common symbol +; [4] Define a NASM local label +; [5] Reference a NASM local label +; [6] Import an external symbol +; [7] Make a PC-relative relocated reference +; [8] Reference a symbol in the same section as itself +; [9] Reference a symbol in a different segment from itself +; [10] Define a segment group +; [11] Take the offset of a symbol in a grouped segment w.r.t. its segment +; [12] Reserve uninitialised data space in a segment +; [13] Directly take the segment address of a segment +; [14] Directly take the segment address of a group +; [15] Use SEG on a non-external +; [16] Use SEG on an external + +[bits 16] + +[global _bsssym] ; [1] +[global _function] ; [1] +[global _selfptr] ; [1] +[global _selfptr2] ; [1] +[common _commvar 2] ; [3] +[extern _printf] ; [6] + +[group mygroup mybss mydata] ; [10] +[group mygroup2 mycode mycode2] ; [10] + +[segment mycode private] + +_function push bp + mov bp,sp + push ds + mov ax,mygroup ; [14] + mov ds,ax + inc word [_bsssym] ; [9] + mov ax,seg _commvar + mov ds,ax + dec word [_commvar] + pop ds + mov ax,[bp+6] + mov dx,[bp+8] + push dx + push ax + push dx + push ax + call far [cs:.printf] ; [5] [8] + pop ax + pop ax + call trampoline ; [7] + pop ax + pop ax + mov sp,bp + pop bp + retf + +.printf dw _printf, seg _printf ; [2] [4] [16] + +[segment mycode2 private] + +trampoline: pop ax + push cs + push ax + jmp far _printf + +[segment mybss private] + +_bsssym resw 64 ; [12] + +[segment mydata private] + +_selfptr dw _selfptr, seg _selfptr ; [8] [15] +_selfptr2 dw _selfptr2 wrt mydata, mydata ; [11] [13] |