c-nasm简易的汇编语言编译器(nasm、nask语法)
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在屏幕
c-nasm简易的汇编语言编译器(nasm、nask语法)相关推荐
- Linux下配置汇编编译器NASM和bochs模拟器
NASM下载:http://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D 解压:tar zxvf nasm-2.12.02.tar.gz 进入刚解压的目录 然 ...
- 在linux下 nasm 编译,Ubuntu上安装nasm以及nasm在Ubuntu上的简单使用
1.在Ubuntu上安装nasm方法 首先在网站http://www.nasm.us/pub/nasm/releasebuilds/2.10.07/下面去下载2.10.07.tar.gz这个版本(一般 ...
- 汇编语言编译器masm_计算机汇编语言和指令操作
机器语言 每种类型的CPU都能理解它们自己的机器语言.机器语言里的指令是以字节形式在内存中储存的数字.每条指令有它唯一的数字码称为操作代码,或简称为操作码.80x86处理器的指令大小不同.操作码通常是 ...
- 用c语言编写一个简易的编译器,面向教学的简易c语言编译器的设计与实现(54页)-原创力文档...
目录 TOC \o "1-5" \h \z \o "Current Document" 摘要I ABSTRACTII \o "Current Docu ...
- 汇编语言---指令格式和基本语法
汇编语言的指令格式,目前有两种不同的标准:Windows下的汇编语言基本上都遵循Intel风格的语法,比如:MASM.NASM;而Unix/Linux下的汇编语言基本上都遵循AT&T风格的语法 ...
- 编译器入门 语法分析器 java_从零开始写个编译器吧 - Parser 语法分析器
Parser(语法分析器)的编写相对于 Tokenizer (词法分析器)要复杂得多,因此,在编写之前可能也会铺垫得更多一些.当然,本系列旨在"写出"一个编译器,所以理论方面只会简 ...
- android 脚本引擎,GitHub - PassByYou888/zExpression: 脚本与编译器内部的语法引擎内核,也是一种op内核,zExpression可以轻松实现自己的脚本引擎...
zExpression 句法编译器+解释器,脚本引擎内核 技术体系解释: 在编译原理的技术体系中,凡是处理文本化的代码前,都需要做一次预处理,其中我们常说的语法,语法糖,都是一种预处理程序 词法:词法 ...
- Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序
文章的标题看似自相矛盾,然而我在"正确"二字上打了引号.我们来看一个例子,关于Java异常处理(Exception Handling)的一些知识点. 看下面这段程序.方法pleas ...
- 编译原理 第一章(源程序、目标程序、解释器、编译器、词法语法语义分析)
第一章 (一)什么是编译程序 1.编译程序 将用高级语言书写的程序翻译成等价的低级语言程序(汇编.机器语言),这种翻译程序称为编译程序. 2.源程序 编译程序的输入对象为源程序 3.目标程序 编译程序 ...
最新文章
- 读书笔记:软件人才-管理的艺术
- 详解 二叉搜索树-----AVL树
- 快速排序详解+各种实现方式
- matlab 联合体,C++11非受限联合体(union)
- VS2012下基于Glut OpenGL GL_POLYGON示例程序:
- 使用ResourceHacker以命令行方式更新应用程序图标
- github 仓库中文名_Github仓库重命名
- Git, Gitlab使用文档
- Windows 2008 R2 配置 DNS 实现二级域名
- 测绘工程本科生如何入门GNSS算法 - 引言
- 鸿蒙os2.0第一批升级名单,首批升级鸿蒙OS名单终于来了!
- 家谱树(gentree)
- ★ SMILES与分子图像的转换代码【及后续操作:识别、指标评估】
- Nmap的使用方法总结
- 制作和合入quilt补丁
- 冷启动、热启动时间性能优化
- java对称加密(DES/DESESE/AES)的简单使用
- 深度研究微软的资产负债表和财务状况以及未来投资价值
- 【onenote】onenote2016独立版安装方法
- 最详细的 Toolbar 开发实践总结