FAsm, by Tomasz Grysztar http://omega.im.uj.edu.pl/~grysztar/ I use an assembler called FAsm. It requires no linking, and will code a .com file with only two required lines:
This is opposed to an old masm I have that required a bunch of assume and other junk. With fasm, you only code what actually ends up into the file. It has macro support, but I prefer to use subs. Taken from the FAsm.doc:
use16 ;May not be required org 0x100
nullHow many FAsm users are there?
The flat assembler is a fast, efficient 80x86 assembler that runs in 'flat real mode'. So, it must be run on at least an 80386 PC, but it can certainly assemble programs for any 80x86 PC. Unlike many other 80x86 assemblers, fasm only requires the source code to include the information it really needs.
"We want you for Win32Asm" !
fasm is cool. but what i don't like is that the size of an exe (that does nothing... just an empty window) is 4K. that's tooo much. i guess you should stick with masm, that way - you have more support.
I saw in some doc on the PE format that 3072bytes is the minimum for an executable. If this is true the masm may not be fully compliant. Also, is there an easy way to get the forum (the software) to word wrap my messages? This message was edited by eet_1024, on 6/19/2001 11:41:19 PM
yeah finish your code tags and use CRLF :) the code tag has been designed to specifically preserve any formatting, including length. use quote to get the effect you want This message was edited by Hiroshimator, on 6/20/2001 5:12:25 AM
eet_1024, Both MASM and VC can produce PE files of 1k using standard options so someone is pulling your leg about a minimum size of 3k. The minimum size for a PE to work on all versions of windows is 2 sections which translates to 1024 bytes. There are some that are smaller by using non standard DOS stubs and custom written PE headers but they will not run on some versions of windows, mainly the later ones. The problem with source to binary style assemblers is that they cannot interface with other languages, MASM is produced by Microsoft and it will produce modules and libraries that can be used by C/C++. C runtime libraries and modules written in C can be used in MASM. The real problem is that the world is a complicated place and while it sounds fine to have a "simple" assembler, they cannot do what a big and well developed assembler can do. MASM has its range of directives for good reason, it is among the reason why MASM can do more than any other assembler available at the moment. MASM has been with us since the 80s and an enormous number of people have written in it at some stage so it is more or less the defacto standard for x86 assembler syntax. This is because it conforms with Intel's format. I am pleased to see people develop new tools and it is certainly a lot of work to write a working assembler but I have yet to see an x86 assembler that can compete with MASM for sheer grunt and I guess thats why so many people are using it now. Regards, email@example.com
As I recall, the smallest page size for Window NT, 98, ME and 2K is 4K, so even if you program was 1 byte, it will take up 4K of ram when it loads anyway. It's also worth noting that the file, again even if it was 1 byte, will take up a single cluster on your HDD, mine are also 4K, so a 1 byte file will take up 4K of disk, and if I run it 4K of RAM. It's a good challenge to get your exe really small, but at the end of the day, it's not going to make any difference to running it..... umbongo This message was edited by umbongo, on 6/20/2001 4:05:52 AM
Umbongo, Code size is important. Small code will fit in the code cache and will not be paged to disk. It will run faster.
The smallest possible PE contains 512B for stub and header, and 512B for one section. One can create that 1kB program using fasm with two lines of source: format PE ret But multiple sections should be used to separate code, data and resources, just because of protection advantages (under WinNT, of course). This will enlarge .exe file for small apps - each 512B is noticeable, when your code and data is about 100B, but when your code is - for example - 30kB large, section alignment won't change much. And that is why my win32app example is 4kB; you can link code and data into the one section and get it a little smaller this way.