NodeJS实现的8085指令集两遍汇编器

需积分: 10 1 下载量 70 浏览量 更新于2024-11-27 收藏 10KB ZIP 举报
资源摘要信息:"asm8085:Node NodeJS中的8085指令集的两遍汇编器" asm8085是一个由NodeJS编写的工具,旨在为8085处理器提供支持。8085是一款经典的微处理器,曾经广泛应用于计算机和电子设备中。这个项目是一个学校项目,意在编写一个能够处理8085指令集的汇编器,并且设计为两遍处理程序。 两遍汇编器的概念: 两遍汇编器是汇编过程中的一种技术,它分为两个阶段处理源代码。在第一遍中,汇编器读取源代码文件,记录下所有的标签及其对应的地址,并解决所有直接引用。第二遍中,汇编器根据第一遍收集的信息来处理所有的指令和数据定义,完成最终的汇编过程。这种方式的优点是结构清晰,易于管理和优化程序。 NodeJS与JavaScript: NodeJS是一个基于Chrome V8引擎的JavaScript运行环境,它允许在服务器端运行JavaScript代码。NodeJS的应用非常广泛,尤其是在构建快速、可扩展的网络应用程序方面表现出色。尽管JavaScript通常在浏览器端使用,但NodeJS的出现打破了这一界限,让JavaScript的用途不再局限于前端开发。 asm8085汇编器的用法: asm8085提供了简单的命令行接口(CLI),可以通过Node命令行使用。用法说明如下: 1. node cli fileName:这个命令用于获取按代码顺序排列的普通指令。 2. node cli fileName true:这个命令除了获取普通指令外,还会为每个指令提供地址信息。 汇编器支持的特性: - #ORG 指令:指定程序的起始地址。 - #DB 指令:定义字节,可以指定一系列的字节值。 - 标签支持:在代码中可以使用标签来标记特定的内存位置,方便指令跳转和数据引用。 - 大部分指令集支持:asm8085能够支持8085处理器的大部分指令,几乎涵盖了所有的基础指令。 模块化设计: asm8085的设计是模块化的,这意味着它被设计成可以通过修改处理器相关的模块来适应不同的处理器指令集。这种设计的好处是,如果未来需要为其他处理器编写类似的汇编器,开发者可以复用大部分代码,只修改与特定处理器相关的部分。 开发与测试: asm8085仍处于开发阶段,并且作者计划在未来将其发布到npm(Node Package Manager)上。npm是NodeJS的包管理器,允许用户安装和发布NodeJS包,方便共享和重用代码。 指令集文件: asm8085项目包含了名为instructionSet.js的文件,这个文件中包含了8085指令集的实现细节。开发者可以通过这个文件来参考和了解8085指令集的具体内容。 如何使用项目: 用户可以通过npm link命令来链接本地的asm8085项目,这样就可以在其他项目中通过asm8085命令来替代原有的node cli命令。此外,项目提供了npm test命令用于执行测试,确保汇编器的功能按预期工作。 综上所述,asm8085项目代表了对经典处理器指令集的支持,并结合了现代JavaScript技术。它为学习和研究8085处理器及其编程提供了工具支持,同时也展示了NodeJS在非传统应用领域的潜力。
2013-02-07 上传
古老的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对代码做了加大改动,并加入的测试的用例及研读的注释,增加的若干的伪指令。 这个编译器的指令表为对指令名按字典序排序的,需要增加新的伪指令是要注意,加入新指令后仍然要保持按字典序排序。 === 古老的经典代码,让你温故而知新。