Not Hello World
通常对于一门语言的学习,一般都是以“Hello,World!”开始的。但对于汇编语言的学习,输出这句话并不容易,首先得了解寄存器等硬件知识。
汇编语言要得以运行,首先要讲源文件编译链接成可执行文件,才能运行。这里需要编译器和连接器(资源我分享到了百度云:链接:https://pan.baidu.com/s/1dE4mb3F,密码:ywfp)。因为我用的是32位Win7,因此我可以不用DosBox。
一、第一个源文件
代码如下
assume cs:codeseg
codeseg segment
mov ax,2
add ax,ax
add ax,ax mov ax,4c00H
int 21H
codeseg ends
end
从这个汇编语言程序是用来计算23的。
首先看到assume(伪)指令,英文意思是“假设”之意,后面紧跟cs:codeseg,这里其实是定义了一个代码段名,对于一个程序必须得有一个段而且是代码段,对于数据段和栈段可以不必有,若缺少代码段,数据段和栈又怎能构成一个程序呢。codeseg称为标号,指代一个地址,这个段的名称最终会被编译链接称为一个地址。对于codeseg
segment……codeseg
ends这一对伪指令定义了一个段,segment表示段开始,ends表示段结束。end伪指令意味着程序的真正结束,每个程序必须有,否则将无法知道程序什么时候结束。
段内部分是真正的汇编指令,最后面两句mov ax,4c00H和int 21H是程序返回,这是固定的。DOS系统是一个单任务操作系统,对于两个程序P1,P2(假设P1正在执行),如果要执行P2,必须由P1将P2加载到内存,将CPU授权给P2,P2才可执行,此时P1将挂起。当P2结束后,应将CPU还给P1,让P1继续执行,若只有一条指令,则交给系统,int指令不是c或其他语言中的整形类型,而是中断指令。因此这两句必不可少。
二、程序编辑、编译、连接&运行
(1)编辑
对于编辑器有很多,什么notepad,notepad++,UltraEdit什么的都可以,喜欢用哪个就用哪个。保存为“文件名.asm”的形式。
(2)编译
新建立一个文件夹,我的在F:\masm中,将masm6.15中的debug.exe,masm.exe,link.exe和ml.exe拷贝进去就行。在DosBox下masm6.15自己的不知道为什么不能用,只能用masm5,。当然将源程序也放进去。
编译:使用masm 文件名.asm
编译成功,将会生成一个obj文件,用ue打开之后是一些16进制数,不懂。
(3)连接
连接:使用link 文件名.obj即可,连接后将生成exe文件。
编译时Run File什么的直接回车略过就行,因为这个文件没用什么库啥的,暂且不用管。
连接的作用主要是:
- 当源程序较大时,将源程序分为多个文件来编译,编译完成后再将其一一连接,便于源程序管理。
- 需要用到其他的库文件时
- 对于生成的obj文件还不能直接执行,需连接程序将其处理为可直接运行的文件
(4)运行
直接输入exe文件名运行就可以了,但通常是一闪而过,因为机器足够快。
随机推荐
- Node学习笔记(四):gulp+express+io.socket部署angularJs2(填坑篇)
这篇就先暂停下上篇博客--你画我猜的进度,因为在做这个游戏的时候,想采用最新的ng2技术,奈何坑是一片又一片,这边就先介绍下环境部署和填坑史 既然要用ng2,首先要拿到资源,我这边用的是angular ...
- DevExpress.XtraGrid.view.gridview 属性说明
本文摘自: http://www.cnblogs.com/-ShiL/archive/2012/06/08/ShiL201206081335.html (一)双击展开,收缩字表 ExpandedChi ...
- 网站上如何添加显示favicon
favicon.ico图标是网站的缩略标志,可以显示在浏览器标签.地址栏左边和收藏夹,是展示网站个性的缩略logo标志,也可以说是网站头像. 要添加显示favicon,步骤如下: 1.生成favi ...
- 同比 VS 环比
同比(YoY=year on year):与历史同时期比较,例如2014年7月份与2013年7月份相比,叫同比 环比(MoM=month on month):是本期统计数据与上期比较,例如2014年7 ...
- Hibernate-模板模式
在我的博客<Hibernate总结(一)>在对数据库的增删改查前后重复的使用了得到Session与关闭Session等操作,因此我想到了模板设计模式. 模板设计模式概述: 定义一个操作中的 ...
- Atitit 延迟绑定架构法attilax总结
Atitit 延迟绑定架构法attilax总结 配置文件的延迟绑定1 Api属性与方法的回调延迟绑定1 后期绑定和前期绑定2 延迟调用2 用 Java 语言延迟绑定2 什么是推迟绑定 C++3 配置文 ...
- 纯css3圆形从中心向四周扩散动画效果
查看效果:http://hovertree.com/texiao/css3/37/ 先来个简单的示例,例如: @keyframes hovertreemove{from {top:30px;}to { ...
- [转]通过Visual Studio为Linux编写C++代码
Build 2016大会上Microsoft首次公布的Visual Studio 2015扩展提供了在VS2015中编写C++代码,随后通过Linux/UNIX计算机进行编译和执行的能力.这种想法非常 ...
- IT菜鸟的生存指南(三)流行还是经典
经常被刚入行的新人请教,想学一门开发语言,最好又简单工资又高又有发展前途.那门语言最好这个话题能在程序员群里吵一下午,所以我也就不掀起战争了. 个人建议如下: 工资高不高不在于学那门语言,而在于你的行 ...
- iOS网络1——NSURLConnection使用详解
原文在此 一.整体介绍 NSURLConnection是苹果提供的原生网络访问类,但是苹果很快会将其废弃,且由NSURLSession(iOS7以后)来替代.目前使用最广泛的第三方网络框架AFNetw ...