Instructions for installing Cygwin and Gnu C/C++ compiler Cygwin (now owned by Redhat) is a port of many Unix-like utilities to the Microsoft Win32 platform. It also includes the free Gnu C/C++ compiler. Goto http://sources.redhat.com/cygwin Click "install cygwin now" to download a setup file run the setup file You can either install directly over the net (if you have a fast connection) or download all files to a directory. You must select a mirror site (you may have to try several to find one that responds - just rerun setup each time) You'll now be presented with a large list of packages to download. The most important (Base) has already been selected. BUT YOU NEED TO select "gcc" from the "Devel" category. You should also download other developement tools such as "make" Installation will take many minutes to complete, even with a fast internet connection. Follow instructions. If you download the files first, you can rerun the setup program and choose install from directory. Some options you should know about gcc: -c: create object (.o) file as opposed to executable a.exe -O2: Level 2 optimization (O6 is highest level) -S: generate assembly code (in gnu format - quite different from MASM) To combine MASM assembly program with C/C++ program: Assemble the program with ml /c /coff prog1.asm This produces a "prog1.obj" file (as opposed to executable) Then compile all programs with gcc prog2.c prog1.obj Or, first create an object file for prog2: gcc -c prog2.c Then compile and link everything together: gcc prog1.obj prog2.o Use g++ instead of gcc if C++ is used. The "extern" directive need to be used in C files to declare items to be imported from other files. Use extern "C" in C++. The "extrn" directive need to be used in masm (see examples). gcc recognizes both .o and .obj files. MASM only recognizes .obj files (what do you expect from microsoft?!). If you want to use MASM's linker to create the executable, you'll have to use a microsoft compiler to compile the C/C++ source.