The SIC/XE architecture is the brainchild of Leland L. Beck, who is the author of System Software: An Introduction to Systems Programming [1]. This book is used in many university courses that deal with language processors. The SIC (Simplified Instructional Computer) architecture itself is completely made-up and has never been implemented for any practical application. All of its functions are entirely conceptual and will never serve a purpose in the real world. So, of course, in my Language Processors class in college, one of the assignments was to write an assembler for the SIC/XE instruction set, and a linker/loader for compiled SIC/XE object code. Let's just say that, by the end of this assignment, I really started to hate the name "SIC/XE," and so will you.
To begin with, here is the assembler for the SIC/XE assembly language: download source code and executable. There is no documentation included, since you should already know what you're doing if you're actually downloading this. However, here are some quick facts about the assembler.
- The assembler is for SIC/XE only, not SIC
- It does support literals
- It does not support macros
- It does not support external references or definitions
- It does create relocatable programs with Modification records
And now, here is the linker/loader for programs compiled with the assembler: download source code and executable. There is also no documentation for the linker/loader, but here are some quick facts:
- The linker is only for SIC/XE programs, not SIC
- It supports external references
- It only supports modification records with import reference numbers, e.g.
M00002405+02 - It outputs a file called
outfile, which is simply a dump of the SIC/XE's memory as it would appear if the program were completely loaded. The file also includes a dump of all external references and their addresses.
This code is freeware, but please give me credit where appropriate if you're actually going to use it. These programs come as-is, and with no warranty whatsoever.
Reference:
1. Beck, Leland L. System Software: An Introduction to Systems Programming, 3rd ed. 1997, Addison Wesley Longman, Inc.

October 26th, 2006 at 10:41 pm
"Let's just say that, by the end of this assignment, I really started to hate the name "SIC/XE," and so will you."
same here buddy
I can not seem to be able to compile siclink.cpp,
can someone help me out?
I get way too many errors everytime I try to compile that file
May 4th, 2007 at 7:50 pm
Hi
Thanx for posting your Assignment
i am this course this semester and the prof ask mme to make an sic assembler but i have worked for 3 weeks now i didnt finish yet ((i am really baaaad in programming ))
now were can i found this code on the net (sic Assembler)
its could help me right???
and thanx
Note: i am bad in English Alsoooooooooooo!
November 5th, 2007 at 12:15 am
Nice post...I go to SDSU where Beck is the CS Dept chair. I'm in the class that uses his book...Figures it isnt good for anything
December 3rd, 2007 at 7:18 pm
Ziad,
Can you help me with you assignment? I've been stuck with it for a long time. I'm truly grateful if you can send yours to me. Thank you!
April 27th, 2008 at 6:42 pm
Hey
,
This is a very cool thing to post
I've not been attending the Systems programming course, and needed to make a quick SIC assembler, learning all about SIC in a couple of days isn't so easy.
I managed to write very small Pass1 compiler, of course it's totally buggy and wasn't good enough
as a project.
so I've downloaded yours, learned it well, it helped me write my own Pass1, Pass2 assembler !:)
People like you help keep the world great !:)
thx again.
November 25th, 2008 at 1:35 pm
can i have the one pass assmbler program on VB.NET code ???
i need help
November 2nd, 2009 at 2:15 am
which compiler should i use for this code to compile...Kindly provide a link to the compiler use d along with the appropriate version
October 12th, 2010 at 2:29 pm
anyone have a java version of this code, my asshole teacher changed the assembler from C to java
August 20th, 2011 at 3:21 am
explain how to generate object code for SIC/XE in detail using all adressing modes and instruction sets of SIC/XE.......anyone help me to solve this problem......
September 7th, 2011 at 10:22 am
Can u tell me what is the need for pass 1 and pass 2 assembler in SIC/XE please...
I have been searching for it for a long time........
March 1st, 2012 at 10:53 am
I am taking system software, and the instructor for that class has us do an sic assembler in either c or c++. Well i am doing mine in c++ but i am having trouble figuring out the logic of how it works. I mean does it suppose to display the registries on the screen? or does it have to run internally? I don't know, right now I am pulling my hair out trying to figure it out. So yeah thanks for your source I am going to carefully dissect your code to get a better understanding. By the way the difference between SIC and SIC/XE are a few extra registries and bigger size of memory allocated to those already present on the SIC also from what I understood is that the code starts a line 4000h which equals to 16bits decimal. So thanks again man for your sample.