一个小型的汇编编译器

article/2025/10/13 4:46:58

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为生成的文件:

运行效果如图:


http://chatgpt.dhexx.cn/article/dKkJFHoR.shtml

相关文章

高级语言(C语言)、汇编语言、机器语言区别?编译器如何将高级语言编译成机器语言?

⾼级语⾔: 是相对于汇编语⾔⽽⾔的,是⾼度封装了的编程语⾔,与低级语⾔相对。它是以⼈类的⽇常语⾔为基础的⼀种编程语⾔,使⽤⼀般⼈易于接受的⽂字来表⽰(例如汉字、不规则英⽂或其他外语),从…

汇编语言使用的工具

现在我们的电脑大多数是win10系统的,64位操作系统。这个可以右键点击我的电脑,查看属性。 学习汇编语言,我们就要安装64位的汇编开发环境,这里是win764位汇编开发环境的安装。 1.把你的文件复制到电脑盘符。我的在电脑D盘 2.点击…

浅谈汇编器、编译器和解释器

作者: 硬核老王 简单介绍一下编程方式的历史演变。 -- Erik Oshaughnessy(作者) 在计算机诞生不久的早期年代,硬件非常昂贵,而程序员比较廉价。这些廉价程序员甚至都没有“程序员”这个头衔,并且常常是由数学家或者电…

编译器如何将高级语言转化成汇编语言的?

对于每天奋斗在一线,用Java,C,C#,Python等高级编程语言写程序的程序员们来说,理解编译器是如何将高级语言编译成汇编语言,有助于我们更好的理解计算机编程。 编译器将高级语言转化成汇编语言主要经过三个步…

编译器是什么

什么是编译器,查阅百度:编译器就是将“高级语言”翻译为“机器语言(低级语言)”的程序。那高级语言自然是指C#,C等一些高度抽象化的语言。而机器语言是直接用二进制代码指令表达的计算机语言,指令是用0和1组…

汇编语言是什么?

文章目录 基础定义汇编语言的语法 常用指令函数的调用机制函数的内部处理机制从汇编语言角度看多线程的安全问题 基础定义 助记符: 例如在加法运算的本地代码中加上 add(addition的缩写)、在比较运算的本地代码中加上 cmp(compar…

汇编语言和本地代码及通过编译器输出汇编语言的源代码

CSDN话题挑战赛第2期 参赛话题:学习笔记 目录 一、汇编语言和本地代码 二、通过编译器输出汇编语言的源代码 一、汇编语言和本地代码 计算机CPU只能运行本地代码(机器语言)程序,用C语言等高级语言编写的代码,需要经…

c-nasm简易的汇编语言编译器(nasm、nask语法)

c-nasm汇编器: GitHub - Changele08/c-nasm: 简易的汇编语言编译器 【基本信息】 简单的汇编语言编译器,源程序包含一个源文件,总共约为10000行(大部分为汇编指令->机器指令对照表) 使用devc5.11无错误无警告编…

记录:汇编语言编译器选择(vscode,永远的神)

我下了两个,一个是一个入门级的,要49块成为注册用户才能解锁全部功能,好像还容易崩。另一个是dosbox,太老了,界面交互性差,我因为安装过两次,出现了一些文件位置问题,运行总出bug&am…

03.汇编语言和编译器

机器指令 早期的程序设计均使用机器语言。程序员们将用0, 1数字编成的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。这样的机器语言由纯粹的0和1构成,十分复杂&#xff0…

软件测试报告

近期,老师给我们布置了一个任务,那就是软件的测试报告,刚刚接触测试报告的我,并不是很了解测试报告怎么写,我们又是如何进行测试的,这里,我将自己对测试的想法写在这里。 一、概述 本软件是根据…

【详解】服务可用性详细说明及其解决方案

该文章转自: 搜狐文章 链接 谈到高并发和高可用往往引起很多人的兴趣,有时候成为框架选择的噱头。实际上,它们往往和框架关系不大,而是跟架构息息相关。在很多时候,老码农会直面一个问题: “系统的服务可…

可用性并非阳春白雪

写代码?这个环节的工作其实不难。开发出人们真正想用的应用程序,然后把它们发布到用户手上,这才是难事! 长久以来,我一直着迷于Steve Krug的那本《Dont Make Me Think》。不仅因为那本书短小精悍,读来朗朗…

软件工程-需求分析

软件需求任务 功能需求 接口需求 性能需求 约束 可靠性和可用性需求 逆向需求 出错处理需求 将来可能提出的要求 功能需求(一定要有) 这方面的需求指定系统必须提供的服务。通过需求分析应该划分出系统必须完成的所有功能 性能需求(最好有) 性能需求指定系统必须满足的定时约束…

服务可用性的一知半解

谈到高并发和高可用往往引起很多人的兴趣,有时候成为框架选择的噱头。实际上,它们往往和框架关系不大,而是跟架构息息相关。在很多时候,老码农会直面一个问题: “系统的服务可用性是多少?是怎么得来&#x…

高可用性架构

1. 高可用性架构 高可用性是指一个系统经过专门的设计后具备的减少停工时间并能持续保持提供服务的高可用性质。该特性是衡量系统提供服务能力的一个特征,也是对系统进行设计时需要考虑在内的一个重要因素。   对于数据库系统而言,高可用、高可靠和高性…

系统可用性

一个网站、系统的战术包括可用性战术、可修改性战术、性能战术、安全性战术、可测试性战术、易用性战术。可用性是在某个考察时间,系统能够正常运行的概率或时间占有率期望值。它是衡量设备在投入使用后实际使用的效能,是设备或系统的可靠性、可维护性和…

系统可用性量表评估问卷

1,中文:可用性问卷 2,英文原版: sus Measuring Usability With The System Usability Scale (SUS) The System Usability Scale (SUS) was originally created as a “quick and dirty” scale for administering after usabili…

软件可靠性

知识点 主要难点和考点可靠性计算 串联系统 串联系统可靠性计算 并联系统 并联系统可靠性计算 并联系统有一个系统是可靠系统,整个并联系统就是可靠系统 1-R 表示系统的失效率 N模混合系统 可靠性计算 计算软件可靠性指标公式 可靠性:MTTF/(1MT…

软件测试中的可用性、可维护性、可靠性有什么区别?

我们生活在一个用户依赖于对服务的一致访问的可靠性时代。在相互竞争的服务之间进行选择时,对用户来说,没有比可靠性更重要的特性了。但是可靠性是什么意思呢? 为了回答这个问题,我们将根据可靠性工程中的其他度量来分解可靠性:可用性和可维护性。区分这些术语并不是语义…