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

编译器/解释器

开发平台:

C/C++

  1. ; test source file for assembling to COFF
  2. ; build with (under DJGPP, for example):
  3. ;    nasm -f coff cofftest.asm
  4. ;    gcc -o cofftest cofftest.c cofftest.o
  5. ; This file should test the following:
  6. ; [1] Define and export a global text-section symbol
  7. ; [2] Define and export a global data-section symbol
  8. ; [3] Define and export a global BSS-section symbol
  9. ; [4] Define a non-global text-section symbol
  10. ; [5] Define a non-global data-section symbol
  11. ; [6] Define a non-global BSS-section symbol
  12. ; [7] Define a COMMON symbol
  13. ; [8] Define a NASM local label
  14. ; [9] Reference a NASM local label
  15. ; [10] Import an external symbol
  16. ; [11] Make a PC-relative call to an external symbol
  17. ; [12] Reference a text-section symbol in the text section
  18. ; [13] Reference a data-section symbol in the text section
  19. ; [14] Reference a BSS-section symbol in the text section
  20. ; [15] Reference a text-section symbol in the data section
  21. ; [16] Reference a data-section symbol in the data section
  22. ; [17] Reference a BSS-section symbol in the data section
  23.   BITS 32
  24.   GLOBAL _lrotate ; [1]
  25.   GLOBAL _greet ; [1]
  26.   GLOBAL _asmstr ; [2]
  27.   GLOBAL _textptr ; [2]
  28.   GLOBAL _selfptr ; [2]
  29.   GLOBAL _integer ; [3]
  30.   EXTERN _printf ; [10]
  31.   COMMON _commvar 4 ; [7]
  32.   SECTION .text
  33. ; prototype: long lrotate(long x, int num);
  34. _lrotate: ; [1]
  35.   push ebp
  36.   mov ebp,esp
  37.   mov eax,[ebp+8]
  38.   mov ecx,[ebp+12]
  39. .label   rol eax,1 ; [4] [8]
  40.   loop .label ; [9] [12]
  41.   mov esp,ebp
  42.   pop ebp
  43.   ret
  44. ; prototype: void greet(void);
  45. _greet   mov eax,[_integer] ; [14]
  46.   inc eax
  47.   mov [localint],eax ; [14]
  48.   push dword [_commvar]
  49.   mov eax,[localptr] ; [13]
  50.   push dword [eax]
  51.   push dword [_integer] ; [1] [14]
  52.   push dword _printfstr ; [13]
  53.   call _printf ; [11]
  54.   add esp,16
  55.   ret
  56.   SECTION .data
  57. ; a string
  58. _asmstr   db 'hello, world', 0 ; [2]
  59. ; a string for Printf
  60. _printfstr db "integer==%d, localint==%d, commvar=%d"
  61.   db 10, 0
  62. ; some pointers
  63. localptr  dd localint ; [5] [17]
  64. _textptr  dd _greet ; [15]
  65. _selfptr  dd _selfptr ; [16]
  66.   SECTION .bss
  67. ; an integer
  68. _integer  resd 1 ; [3]
  69. ; a local integer
  70. localint  resd 1 ; [6]