资源说明:古老的8085汇编器
看看先贤们在古老的年代(作于1988年)所写的古老的8085汇编器(BTW:8085是intel的8位的微处理器,比8086/8088还要古老),明显的2遍扫描的处理方式,将汇编语言转换为机器语言,输出文件为.lst和.hex文件。
代码结构简洁,有效文件仅有6个,容易研读和分析,研读时候需要找到8085的datasheet,以便分析每条指令的意义和程序的汇编过程。
asm80
|-- [Apr 21 1988] Makefile
|-- [Apr 21 1988] README
|-- [Apr 21 1988] as81.c
|-- [Apr 21 1988] as82.c
|-- [Apr 21 1988] as83.c
|-- [Apr 21 1988] as85.c
|-- [Apr 21 1988] asm.c
|-- [Apr 21 1988] asm.h
|-- [Apr 21 1988] asm80.1
`-- [Apr 21 1988] asm80.doc
0 directories, 10 files
代码包含有3个压缩文件
-rw-r--r-- 1 root root 25362 Dec 4 2001 asm80.tar.Z
-rw-r--r-- 1 root root 16795 Oct 7 23:57 asm80.tar.gz
-rw-r--r-- 1 root root 21523 Oct 18 12:56 asm80-121018.tar.gz
其中的asm80.tar.Z是原封不动的原始的代码用Linux环境下的编译器稍微做改动放可编译通过
解压方式: tar zxvf asm80.tar.Z
其中的asm80.tar.gz是稍微做改动可在Linux环境下的编译器编译通过的代码包,改动点只有一处,
位于asm.h文件的15行,改动如下(原有的代码注释保留,改动后的放在其下面。):
//#define putback(c) ((c) != '\0' && --sptr < sbuf && abort())
#define putback(c) ((c) != '\0' && --sptr < sbuf && ({abort();0;})) //snallie@tom.com, Sun Oct 7 22:38:47 CST 2012
编译过程如下
[root@localhost dd]# tar zxf asm80.tar.gz
[root@localhost dd]# cd asm80
[root@localhost asm80]# make
cc -O -c -o asm.o asm.c
cc -O -c -o as81.o as81.c
cc -O -c -o as82.o as82.c
cc -O -c -o as83.o as83.c
cc -O -c -o as85.o as85.c
cc -O asm.o as81.o as82.o as83.o as85.o -o asm80
使用asm80 汇编a.asm,生成a.lst以及a.hex
[root@localhost asm80]# ./asm80 -l a.asm
Total bytes assembled = A20D
[root@localhost asm80]# more a.lst
a.asm KSE cross assembler for the 8080 page 1
1 ;
2 ; a.asm , a 8080 asm source file
3 ; snallie@tom.com
4 ; Sun Oct 7 22:38:47 CST 2012
5 ;
0100 6 org 100H
0100 7 start:
0100 160A 8 mvi d, 0AH
0102 0E0B 9 mvi c, 0bH
0104 3E00 10 mvi a, 0
0106 CD00A2 11 call subRoutine
0109 00 12 nop
010A C30E01 13 jmp exit
010D 00 14 nop
010E 15 exit:
010E 76 16 hlt
17
A200 18 org 0a200H
A200 19 subRoutine:
A200 80 20 add b
A201 81 21 add c
A202 00 22 nop
A203 C9 23 Ret
24
A204 25 bufByte:
A204 01 26 db 1
A205 27 bufWord:
A205 01000200 28 dw 1,2,3,4
A209 03000400
A20D 29 End start
^L
a.asm Symbol table dump Page 1
bufbyte = A204 bufword = A205 start = 0100 exit = 010E subroutine = A200
^L
[root@localhost asm80]# more a.hex
:0F010000160A0E0B3E00CD00A200C30E010076C2
:0DA20000808100C90101000200030004007C
:00000000
[root@localhost asm80]#
其中的asm80-121018.tar.gz对代码做了加大改动,并加入的测试的用例及研读的注释,增加的若干的伪指令。
这个编译器的指令表为对指令名按字典序排序的,需要增加新的伪指令是要注意,加入新指令后仍然要保持按字典序排序。
===
古老的经典代码,让你温故而知新。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。