c-nasm汇编器:
GitHub - Changele08/c-nasm: 简易的汇编语言编译器
【基本信息】
简单的汇编语言编译器,源程序包含一个源文件,总共约为10000行(大部分为汇编指令->机器指令对照表)
使用devc++5.11无错误无警告编译通过。
【支持指令】
汇编指令:
mov,add,sub,mul,div,cmp,and,or,xor,shl,shr,not,push,pop,int,in,out,hlt,pushad,popad,pusha,popa,nop,wait,pushf,popf,sahf,lahf,movsb,movsw,cmpsb,cmpsw,stosb,stosw,lodsb,lodsw,scasw,ret,leave,into,iret,aam,aad,aaa,cmc,clc,cld,std,cli,sti
伪指令:
jmp,org,call,jbe,jb,jz,je,fill(times指令的替代指令),db,dw,dd,resb,resw,resd,resq
【使用方法】
命令行输入:c-nasm infile outfile即可将infile汇编为outfile。
【软件速度】
使用STL_map存储汇编指令与机器代码对照表,对于每条汇编指令,编译所需复杂度为log2(n)(n为表中元素个数)
【使用样例】
以下汇编代码用来生成一个fat12格式的软盘文件,是一个非常小的操作系统,在模拟机上引导进入系统后,会在屏幕上显示“hello,world”字样,汇编代码摘自川合秀实的书《30天自制操作系统》。
org 0x7c00JMP entryDB 0x90DB "HELLOIPL" DW 512 DB 1 DW 1 DB 2 DW 224 DW 2880 DB 0xf0 DW 9 DW 18 DW 2 DD 0 DD 2880 DB 0,0,0x29 DD 0xffffffff DB "HELLO-OS " DB "FAT12 " RESB 18 entry:MOV AX,0 MOV SS,AXMOV SP,0x7c00MOV DS,AXMOV ES,AXMOV SI,lable msg
putloop:MOV AL,[SI]ADD SI,1 CMP AL,0JE finMOV AH,0x0e MOV BX,15 INT 0x10 JMP putloop
fin:HLT JMP fin msg:DB 0x0a, 0x0a DB "hello, world"DB 0x0a DB 0fill 0,510DB 0x55, 0xaaDB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB 4600DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB 1469432
保存为hello.nsm,输入c-nasm hello.nsm hello.img将其编译为软盘文件
将虚拟机的启动软盘设置为hello.img
运行后如图所示,显示helloword在屏幕