一个小型的汇编编译器

train汇编器

本程序包含4个源文件与6个头文件,源文件约2200行代码,头文件共约500行,可识别并编译27项指令。

支持vs2013及更高版本

支持gcc 6.3.0及更高版本,gcc编译过程如图:(2019.7.26更新,直接在终端输入make来编译,编译文件时可以输入"./train.exe 源文件1.asm 源文件2.asm 源文件3.asm ·······",编译后的文件后缀名默认为bin,名称为源文件的名字,下图为第一版的展示图)

代码详见github,网址如下:

GitHub - lindorx/train: A small assembly compiler

可编译的指令如下:

mov,in,out,

jbe,jb,jz,je,jmp

shr,shl,cmp,

add,sub,mul,

push,pop,

db,dw,dd,resb,

org,int,hlt,

and,or,xor,not,

基于nask和nasm语法

编译效果,测试:

例子:;以下汇编代码用来生成一个fat12格式的软盘文件,是一个非常小的操作系统,在模拟机上引导进入系统后,会在屏幕上显示“hello,world”字样,汇编代码摘自川合秀实的书《30天自制操作系统》。

;hello-os
;TAB=4
org0x7c00;指明程序装载地址
;描述用于标准FAT12格式的软盘
jmp entry
db 0x90
DB    "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,ax
mov        sp,0x7c00
mov        ds,ax
mov        es,ax
mov        si,msg
putloop:
mov        al,[si]
add        si,1        ;给si加1
cmp        al,0

je        fin
mov        ah,0x0e        ;要显示的一个字符
mov        bx,15        ;指定字符颜色
int        0x10        ;调用14号中断,调用显卡bios
jmp        putloop
fin:
hlt                ;让cpu停止工作,等待指令
jmp        fin        ;无限循环
msg:
db        0x0a,0x0a        ;换行两次
db        "hello,world"        ;要显示的字符串
db        0x0a                ;换行
db        0

RESB    0x1fe-$

DB    0x55,0xaa

DB    0xf0,0xff,0xff,0x00,0x00,0x00,0x00,0x00
RESB  4600
DB    0xf0,0xff,0xff,0x00,0x00,0x00,0x00,0x00
RESB  1469432

在VM上的设置如下,os.img为生成的文件:

运行效果如图:

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值