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,0je        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        0RESB    0x1fe-$DB    0x55,0xaaDB    0xf0,0xff,0xff,0x00,0x00,0x00,0x00,0x00
RESB  4600
DB    0xf0,0xff,0xff,0x00,0x00,0x00,0x00,0x00
RESB  1469432

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

运行效果如图:

一个小型的汇编编译器相关推荐

  1. c++ 模板类实现堆栈实验报告_编译原理——小型类C编译器的设计和实现(生成8086汇编代码)之1:问题定义以及总体功能...

    前面花了两篇文章来介绍词法分析和语法分析,接下来才是比较有意思的部分--一个小型类C编译器的设计和实现(其实是编译原理的课程设计啦!~)我用的是python2.7.13+PyQt来做的...事实上,正 ...

  2. 学习C++:C++进阶(三)CMake基础篇---用一个小型项目了解CMake及环境构建

    V1.1 于2022年7月15日第二次修改:添加了比较多的解释图,解读了各类库的CMakelist.txt文件 目录 第一部分 基础篇(Basics) 1.0 本部分主要学什么(Intro) 1.1 ...

  3. 分析一个简单的汇编代码

    分析一个简单的汇编代码 部分常见的寄存器 寄存器 16位 32位 64位 累加寄存器 AX EAX RAX 基址寄存器 BX EBX RBX 计数寄存器 CX ECX RCX 数据寄存器 DX EDX ...

  4. c语言转汇编编译器,【转】C语言内嵌汇编(asm)

    TIPS:在编译过程汇中,汇编代码块是原封不动地送到汇编语言编译阶段的. 一.为什么会用到汇编? 1.为了提高速度和效率.不过这种情况很少了,现在C/C++编译器的优化很厉害了. 2.为了实现某些C语 ...

  5. 计算机系统要素--第六章,01-HACK汇编编译器模块介绍

    从零开始构建现代计算机--第六章,01-HACK汇编编译器模块介绍 语法分析器(Parser) 编码(Code) 无符号程序的汇编编译器 符号表(Symbol Table) 有符号程序的汇编编译器 H ...

  6. debug和汇编编译器masm对指令不同的处理

    debug和汇编编译器masm对指令不同的处理 1.在汇编源程序中,如果用指令访问一个内存单元,则在指令中必须用[...]来表示内存单元.如果 在[  ]里用一个常量idata直接给出内存单元的偏移地 ...

  7. 《计算机系统要素》 第六章 汇编编译器

    6.1 背景知识 符号化的语言称为汇编,翻译程序称为汇编编译器,汇编编译器对每个汇编命令的所有部分进行解析,将每个部分翻译成它对应的二进制码,并将生成的二进制码汇编成真正能被硬件执行的二进制指令. 编 ...

  8. 用AntlR4实现简单的汇编编译器

    最近在学习<计算机系统要素--从零构建现代计算机>这本书,花了两天时间用antlr4把书中第6章的汇编编译器实现了. 输出的机器指令和参考答案完全一致. 下面把antlr4的代码贴出来,供 ...

  9. 计算机系统要素--第六章,02-HACK汇编编译器实现

    从零开始构建现代计算机--第六章,02-HACK汇编编译器实现 要点 A-指令 C-指令 符号表 python实现 要点 关心三点: A指令,C指令,符号表 A-指令 A指令:将@num的num转为1 ...

  10. gcc的ar工具及as汇编编译器入门练习及curses库

    gcc的ar工具及as汇编编译器入门练习及curses库 目标 参考资料 一.ar工具使用 1.编写三个函数main.c/sub1.c/sub2.c 2.将x2x.x2y目标文件用 ar工具生成1个 ...

最新文章

  1. 神经网络预测模型算法_MATLAB Elman神经网络的数据预测—电力负荷预测模型研究...
  2. linux导出并追加到文件,linux – 如何将awk结果输出到文件
  3. 瑞士的迷人风光(转)
  4. c语言可以将负数强制转换成正数吗_C语言笔记(一、概述)
  5. IO流 (三) ----- 字符流和字符缓冲流
  6. 软件开发者优质资源网站
  7. 《人性的弱点》简明总结
  8. python编写一个汽车类_编写类-汽车类
  9. PHP变量说法不正常是,关于PHP变量的说法中正确的是(? ?)。
  10. 小程序实现正计时和倒计时
  11. linux 'pthread_create'未定义的引用,如何解决`_imp__pthread_create'的未定义引用
  12. 一知半解学CubeMX——GPIO:LED
  13. 运营好社群——打造你专属的新媒体流量入口! | 黎想
  14. 我国非按劳分配收入初探
  15. 可视化 Echarts
  16. 微信如何自动唤起外部浏览器打开APP下载文件或指定链接
  17. MySql左连接无法显示左表全部数据
  18. 高中生必须学习python吗_想少走弯路的看过来 高中生如何学习编程详解
  19. pyspark进行词频统计并返回topN
  20. oracle论坛 南派三叔,关于南派三叔微访谈的不吐不快,想知道路人,书粉,剧粉,都是什么感受...

热门文章

  1. 奈奎斯特稳定性判据的推导
  2. 基于 Java 机器学习自学笔记 (第60天:过去十日的总结)
  3. 机器学习入门-用Java实现简单感知机
  4. 一篇文章读懂拿了图灵奖和诺贝尔奖的概率图模型
  5. 罗马音平假名片假名转换器_平假名与片假名
  6. Linux系统中的用户管理
  7. 装载机液压系统原理图分析方法
  8. 小飞鱼通达OA二开 OA与HR系统集成解决方案
  9. 2020低压电工模拟考试及低压电工复审模拟考试
  10. 阿里oss服务端签名后直传