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