objtest.asm
上传用户:yuppie_zhu
上传日期:2007-01-08
资源大小:535k
文件大小:2k
源码类别:

编译器/解释器

开发平台:

C/C++

  1. ; test source file for assembling to Microsoft 16-bit .OBJ
  2. ; build with (16-bit Microsoft C):
  3. ;    nasm -f obj objtest.asm
  4. ;    cl /AL objtest.obj objlink.c
  5. ; other compilers should work too, provided they handle large
  6. ; model in the same way as MS C
  7. ; This file should test the following:
  8. ; [1] Define and export a global symbol
  9. ; [2] Define a non-global symbol
  10. ; [3] Define a common symbol
  11. ; [4] Define a NASM local label
  12. ; [5] Reference a NASM local label
  13. ; [6] Import an external symbol
  14. ; [7] Make a PC-relative relocated reference
  15. ; [8] Reference a symbol in the same section as itself
  16. ; [9] Reference a symbol in a different segment from itself
  17. ; [10] Define a segment group
  18. ; [11] Take the offset of a symbol in a grouped segment w.r.t. its segment
  19. ; [12] Reserve uninitialised data space in a segment
  20. ; [13] Directly take the segment address of a segment
  21. ; [14] Directly take the segment address of a group
  22. ; [15] Use SEG on a non-external
  23. ; [16] Use SEG on an external
  24.   bits 16
  25.   global _bsssym ; [1]
  26.   global _function ; [1]
  27.   global _selfptr ; [1]
  28.   global _selfptr2 ; [1]
  29.   common _commvar 2 ; [3]
  30.   extern _printf ; [6]
  31.   group mygroup mybss mydata ; [10]
  32.   group mygroup2 mycode mycode2 ; [10]
  33.   segment mycode private
  34. _function push bp
  35.   mov bp,sp
  36.   push ds
  37.   mov ax,mygroup ; [14]
  38.   mov ds,ax
  39.   inc word [_bsssym] ; [9]
  40.   mov ax,seg _commvar
  41.   mov ds,ax
  42.   dec word [_commvar]
  43.   pop ds
  44.   mov ax,[bp+6]
  45.   mov dx,[bp+8]
  46.   push dx
  47.   push ax
  48.   push dx
  49.   push ax
  50.   call far [cs:.printf] ; [5] [8]
  51.   pop ax
  52.   pop ax
  53.   call trampoline ; [7]
  54.   pop ax
  55.   pop ax
  56.   mov sp,bp
  57.   pop bp
  58.   retf
  59. .printf   dw _printf, seg _printf ; [2] [4] [16]
  60.   segment mycode2 private
  61. trampoline: pop ax
  62.   push cs
  63.   push ax
  64.   jmp far _printf
  65.   segment mybss private
  66. _bsssym   resw 64 ; [12]
  67.   segment mydata private
  68. _selfptr  dw _selfptr, seg _selfptr ; [8] [15]
  69. _selfptr2 dw _selfptr2 wrt mydata, mydata ; [11] [13]