Most every programmer needs the tools listed in this section since you need them to translate your thoughts into
a running program. A language is a set of statements designed to present your thoughts to the machine. Most
languages today at least share almost the same set of control statements and also offer some way to use program
flow mechanisms. The most important distinction between languages today is between OO(oriented) and procedural
languages. The compiler and assembler cooperate in translating the statements for the binary machine.
The difference between compilers and assemblers is that both are OS-specific. A compiler
translates your high level source code into an executable file which is specific for your OS. For instance DOS
can run MZ exes and *.com programs, win30 can run that and also NE executables, and windows 95 can run all of the
ones before and also PE executables. An assembler translates low level source code into the above executables.
Mostly the sequence of a compiler is that it translates first to assembly language which then is translated into
an OS specific objectfile(*.obj or *.coff) by an assembler. The last step in making the runnable file is to statically link
the object sources, which mainly involve relocating all labelreferences relative to the allocated segments.
Remember though that the LAST step into making your executable run is the dynamic linking that
the OS does to your programs. In single tasking environments like DOS that involves reading the info from a
relativaly small header, allocating an arena for the program to play in, reading the whole program in memory and leaving the executable alone. In multitasking WINDOWS however much more has to be done. For one thing you never know for sure that the code is presently available in RAM. Windows uses a very difficult swapping policy which involves pagetables
to decide which parts should be present. Another thing a windows program does is that is dynamically links all your
consious and unconsious api references to the appropriate kernal vxds functions.
Lots of discussion can be triggered about which languages, compilers and assemblers to use however. I won't do that.
I just present my the set of free tools that I use, and that can at least compete on all dimensions I know with commercial
products, being it from microsoft or watcom or borland or powerbasic. I don't say they are better, but one thing is for
sure: the are all affordable, all activaly maintained and also heavily supported on usenet.
-
- QBASIC( interpreter)
Never been beaten intrepreter for hands on experimenting with techniques and algorithms before the real work. Also the only exception to the above maintainance rule.
QBasic hasn't been maintained for years by MS. Basic as a language is fairly limited, and thats why the only use for it is in
quick experimentations. Nothing is as easy and fast for basic literates to type a few lines, run it, update it, etc etc. Basic
is a procedural language which does not support OO.
- DJGPP(C++ compiler)
c/c++ compiler which has
all features to write big, and good programs. DJGPP is also used in a lot off university courses. C is the procedural language that you will see used most, also when it comes to showing algorithms and new technigues. If you want to stay in procedural programming
you might also consider on off the free PASCAL compilers around.
C++ is a language which supports OO by the implementation of virtual functions and inheretance. Both C and C++ are supported by DJGPP which is a 32 bit pmode compiler, which is to say it compiles to true 32 bit executables.
-
- RSXDJNT(Windows C++ compiler)
c/c++ compiler for windows which is a compatible with DJGPP. It comes with its own version of ld.exe and djgpp.env so you probably have to
write a batfile to toggle between the two versions. Other then that it also includes its own IDE, and there are no problems
with using both djgpp and rsxntdj.
-
- DEBUG
Never been beaten debugger at assembly language level for hands
on experimenting with assembly language. The first tool *a lot* of assembly language programmers used. Does not offer symbolic
capacities however. I maintain a page which offers a syntax overview in html.
- VALARROW
This is an assembler with symbolic capacities. Can be easily used to write small assembly language programs. I have been maintaining a page with features the learning of assembly language with the aid of this tool for a long time now. At that page you find the tools, specifications for the assembler, includefile for the stdlib for assembly programmers, links to assembly language pages and more.
- NASM
If you really want to write big and 586 compatible assembly language
programs you have only three choices: MASM which is no longer supported, TASM which has quite a few bugs and NASM which
is a djgpp compatible assembler. NASM has its own syntax, and because I was already used to MASM syntax and also bought the
product I still use MASM.