Advertisement
7_2009-2012 Complete Applications #230615

BUILDING AN ASSEMBLER step by step (1

Hi ya all ! This is my first attempt to create an assembler called Universal ASM. And I decided to do it step by step sharing with you all. Please appreciate this effort by voting for me and sending your feedback on this project....

AI

AI Summary: This codebase represents a historical implementation of the logic described in the metadata. Our preservation engine analyzes the structure to provide context for modern developers.

Source Code
original-source
<pre>
 ___________________________________________________________
 |
 |		 BUILDING AN ASSEMBLER 
 |  		   Step By Step
 |		   (Session 1)
 | 		  By Vivek Mohan
 | 
 |  Visit me at http://www.geocities.com/cppresources/
 |   or shoot me an email at opendev@phreaker.net
 |
 | To join the mailing list for BUILDING AN ASSEMBLER 
 | step by step, mail to opendev@phreaker.net with the
 | subject field = join UASM mail with a little info about
 | yourself.
 |___________________________________________________________

 {{{{ INTRODUCTION }}}}
 Hi there ! Firstly thanx for taking a look at this. Frankly speaking I'm no ASM 
 Guru, but this is my first attempt towards creating an Assembler. I know very well
 that there are many people who are really interested in things like this, so I 
 decided to develop step by step, uploading each step and waiting for your feedback
 on suggestions, bugs and stuff like that. And I hope you appreciate the whole 
 effort by sending me you feedback on this project. You are always welcome 
 to contribute to this project.

 {{{{ THE ASSEMBLER }}}}
 I've named the assembler UNIVERSAL ASSEMBLER or UASM. The first version of UASM
 will assemble for the 8086 intel architecture. UASM will be an integral part of
 OPOS the open source operating system under development.
 {{{{ STEP 1 }}}}
 By the end of this session..
 1. UASM will assemble two simple types of MOV instructions
	
	mov offset, accumulator regs
	mov regs , Imm8/16
 
 2. UASM will assemble the two interrupt instructions
	int Imm8
	int3
 3. UASM will assemble the return instructions
	ret
 By the end of this session, using UASM we'll be able to use UASM to build a COM 
 program which can print a message.
 {{ 1.1 }}
 As the first step I wrote a few file IO routines for parsing the 
 source code. These routines can be found in the file fileio.c

 {{ 1.2 }}
 As the second step I wrote a few routines to convert between number systems
 as they are going to be very important. They can be found in the file math.c
 {{ 1.3 }}
 Then came a very important part of the assembler - The x86 instruction processing
 unit. This is where all the processing takes place. It can be found in the file 
 x86.c. Functions like mmm(..) , rrr(...) return the bit values for corresponding
 functions and regs. The array x86[] holds the various x86 instructions, so far only
 the implemented ones. The function mov constructs the mov instruction when the right
 args are passed. Intr and Ret also do the same for int and ret instructions. Most of
 the functions have been well connected so you won't have trouble understanding.
 {{ 1.4 }}
 UASM.C is the main file. The getinstruction function is like the driver code for the
 whole thing. It reads the instruction and the corresponding operands. It then calls
 the right function with the right args passed. Thats enough of coding for the first 
 session.... 
 {{ 1.5 }}
 Compiling... (using DJGPP)
	gcc -o uasm.exe uasm.c
 {{ 1.6 }}
 Assembling the example1.asm file
	
	uasm.exe example1.asm example1.com
 run the file and you'll see the message 'Hi';
 {{{{ Conclusion }}}}
 Looks like I've made a small working version of uasm. I hope there are no major
 errors or bugs but if you do find any please mail me.
 {{{{ Next Session }}}}
 In the next session the objectives will be to
 1. include support for comments
 2. support for all single byte instructions
 3. support for a few more mov instructions
 Thats all for now,....
 Vivek Mohan
</pre>
Upload
Original Comments (3)
Recovered from Wayback Machine