Skip to content
Tiny assembler for 8086/8088, able to run over DOS for 8086/8088 machines.
Assembly C Batchfile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
test Label list is now sorted. Oct 3, 2019
.gitignore First commit Oct 2, 2019
LICENSE First commit Oct 2, 2019
README Small corrections to manual Oct 8, 2019
TINYASM.EXE Tweak sprintf( ) buffer sizes to prevent buffer overflows Oct 8, 2019
e.bat First commit Oct 2, 2019
ins.c Added yet more comments. Oct 3, 2019
tinyasm.c Tweak sprintf( ) buffer sizes to prevent buffer overflows Oct 8, 2019


'--.  .--'`--',--,--, ,--. ,--.,--,--. ,---. ,--,--,--. 
   |  |   ,--.|      \ \  '  /' ,-.  |(  .-' |        | 
   |  |   |  ||  ||  |  \   ' \ '-'  |.-'  `)|  |  |  | 
   `--'   `--'`--''--'.-'  /   `--`--'`----' `--`--`--' 
Tinyasm 8086/8088 assembler
by Oscar Toledo G. Oct/02/2019

Tinyasm is a small assembler for 8086/8088 programs,
and it can work over a real PC XT machine. It requires
at least 128K of memory, maybe more.

It came to my attention that several people wanted to
assemble my boot sector games over real PC XT machines.

Unfortunately, nasm doesn't run over 8086/8088 processors,
and I couldn't find a compatible assembler!

So what does a programmer when doesn't find the required
tool? Start to code his own tool!

It took me 3 days to start from zero and get a working
assembler compatible with the nasm syntax, plus all the
directives I've used in my boot sector programs.

Using the same command line syntax as nasm:

  tinyasm -f bin rogue.asm -o rogue.img -l rogue.lst

There is also the -d option for define labels:


It returns a non-zero error code when the assembled
file generated errors.

Thanks to tkchia for making it portable to ia16-elf-gcc,
removing DeSmet C warnings, and making it to return
error codes.


The main difference is that Tinyasm won't insert long jumps
for miscalculated conditional jumps.

Labels are started with letter, underscore or period.
Case is insensitive.

Local labels are supported, and should start with period.
The local labels final name is derived from concatenation
of the last global label (not starting with period) and
the local label.

There is only support for 8086/8088 processors, and only
are implemented the following directives:

	cpu 8086

The following operators are implemented:

	|	Binary OR
	^	Binary XOR
	&	Binary AND
	<<	Shift to left
	>>	Shift to right
	+	Addition 
	-	Subtraction 
	* 	Multiplication 
	/	Division (unsigned 16-bit)
	%	Modulo operator
	(expr)	Parenthesis
	-	Unary negation

The following numbers are implemented:

	0b0000_0100	Binary, you can use underscore (it will be ignored)
	0xabcd		Hexadecimal.
	$0abcd		Hexadecimal (after $ the first digit must be a number)
	'a'		Character constant.
	10		Decimal.
	$$		Start address.
	$		Current address.

This assembler won't win a speed test ;) because the
internal implementation of linear search for the instruction
set, and it is also implemented as a kind of regular
expression subset for easier coding.


If you're building boot sector games with Tinyasm, then you
need the following info to load the game inside the boot
sector of a floppy disk.

You need to have DEBUG in your disk (included with the DOS

Do the following (replace filename as desired):

		Extract now your working disk and insert a blank one !!!
	MOV AX,0301
	MOV BX,0100
	INT 13
	JB 300
	INT 20
		Now the boot sector is replaced with the program!!!


You can build your own executable for Tinyasm using the
C compiler Desmet C, version 3.1h available graciously at:

The compiler has many bugs and limitations, but it works for
tinyasm purposes, and it's freely available.

Supposedly it should support ANSI C, but I couldn't fit a
standard ANSI C function definition, so I had to code again
in C K&R for the first time in maybe 20 years!

You can find the "e.bat" file to assemble the compiler.

I provide an executable on the Git to save you some time.

There are test cases in the 'test' subdirectory that are
runnable with the "test.bat" file.

There is a test for the full instruction set of 8086/8088
(the same listing that appears in my book Programming Boot
Sector Games).

The test cases come from my own programs:

>> ATTENTION <<        

Would you like to learn 8086/8088 programming? Then you
must get my new book Programming Boot Sector Games including
a 8086/8088 crash course!

Now available from Lulu:




These are some of the example programs documented profusely
in the book:

  * Guess the number.
  * Tic-Tac-Toe game.
  * Text graphics.
  * Mandelbrot set.
  * F-Bird game.
  * Invaders game.
  * Pillman game.
  * Toledo Atomchess.
  * bootBASIC language.

You can’t perform that action at this time.