8086汇编语言入门-HelloWorld
附件下载:
http://pan.baidu.com/s/1i5R9qO9 密码:rfgk
80x86微处理器汇编语言编程。学习任何编程语言都免不了要跨越HelloWorld这道坎,面向机器的汇编语言与面向过程/对象的高级语言不同,编码过程中对寄存器、内存的分配等细节都需要编程人员去关心;而高级语言程序如C语言、C++,即使你不知道printf具体是怎么实现的,只要掌握使用方法即可(封装成模块)。C语言的helloworld程序简单到只有一行执行语句:
printf("Hello,World!"); //在屏幕缓冲区中显示"Hello,World!"一串字符
而汇编语言的Helloworld,同样很简洁,却让很多初学者摸不到头脑;打一个简单比喻,上面的printf(.....)就好比一把手枪,字符串"Hello,World!"好比子弹,给printf装上“子弹”就能完成射击的功能。当然你也可以更换其他子弹.....汇编语言要实现往屏幕缓冲区输出字符串并显示,所需做的工作就没有这么直观容易理解了。 汇编语言编程,面向的是“寄存器”,寄存器是计算机CPU内部的一种超高速缓存(速度胜过内存数倍,但容量极小),对数据的各种操作都由“指令”来进行,也被称作汇编指令,比如ADD AX,BX 意思是将寄存器AX与BX的值相加,结果存放到AX;AX/BX都属于8086通用数据寄存器。更多汇编知识将在以后篇幅中讲解。
hello.asm 源程序
;80x86汇编语言<入门程序>
;YPP.20170928
;文件名Hello.asm DSEG SEGMENT
MESS DB 'Hello,World!' ,0DH,0AH,24H
DSEG ENDS SSEG SEGMENT PARA STACK
DW DUP(?)
SSEG ENDS CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
BEGIN: MOV AX,DSEG
MOV DS,AX
MOV DX,OFFSET MESS
MOV AH, INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END BEGIN
初学者首先需要知道的是,汇编语言程序由两个基本元素组成:操作码、操作数
操作码,指明要进行的操作,如加、减、乘、除....
操作数,被操作的对象,可以是数字、字符串、存储单元(变量)等
本文不对代码细节做过多的解释,因为需要很多前置知识做铺垫,才能更好的理解这段代码。
前置知识包括,二进制数制换算、CPU内存单元寻址、14个16位寄存器组、存储器分段、中断机制等等
上面的代码编辑或复制到记事本中,另存为.asm文件,这是汇编语言的源代码文件,中间要进行汇编的操作,生成的.obj文件是目标文件,经过链接之后,才能形成最终的可执行文件.exe,整个过程与高级语言的运行过程是大致相仿的。
工具有很多,但还是推荐经典的Masm5.0,
注:编写80x86平台的汇编语言,不要在Win-Vista\7\8.1\10的系统上操作,因为16位程序会出现兼容性问题。
本文均在Windows XP sp3操作系统上编辑、汇编、链接、运行.
Masm5.0下载:http://pan.baidu.com/s/1hsjCcRi 密码:syqo
masm无需安装,解压到某磁盘根目录下,进入DOS操作
Win+R输入CMD进入DOS,先用DOS命令进入MASM5.0文件目录下,同时hello.asm源文件也要复制到同一路径下。
汇编命令格式> masm xxx.asm 回车 注:DOS下不区分大小写
连续回车,表示使用默认文件名,四个回车下来,会生成Hello.obj文件;如果出现错误应当更改源文件后重新汇编,
0 Warning Errors.....表示没有错误。
没有错误后,下一步进行“Link”链接,命令格式>link xxx
注:链接时要指定文件名,就是刚刚生成的Hello.obj 可以省略后缀,名字不要省略!不然会报错
link hello 回车 三次回车后,正常情况下会生成Hello.exe 那也就是程序的最终形态,直接输入hello就运行了这个程序(不要双击运行,不然DOS窗口一闪而过看不到执行结果)
HelloWorld字符串被成功输出出来,这个程序也就完成了
源文件Hello.asm——>目标文件Hello.obj——>可执行文件Hello.exe
这就是整个过程。
另外补充一点,由asm到obj在汇编语言中,这个过程叫做“汇编Assembly”;在高级语言中叫做“编译Compile”
有的教程中会缺少堆栈段SSEG,没有堆栈段 在masm中也会报错,会提示no stack segment要注意。
==========================================================
扫一扫关注微信公众号[跟着小白兔],及时获取更多编程、逆向/破解等技术类软文资讯
8086汇编语言入门-HelloWorld的更多相关文章
- RabbitMQ学习总结 第二篇:快速入门HelloWorld
目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...
- Wix学习整理(1)——快速入门HelloWorld
原文:Wix学习整理(1)--快速入门HelloWorld 1 Wix简介 Wix是Windows Installer XML的简称,其通过类XML文件格式来指定了用于创建Windows Instal ...
- CodeIgniter入门——HelloWorld
原文:CodeIgniter入门--HelloWorld CodeIgniter(CI)是一套给PHP网站开发者使用的应用程序开发框架和工具包. 初次接触,来一个HelloWorld~~~ ^_^ 准 ...
- Flask入门HelloWorld
Flask入门HelloWorld Flask官网:http://flask.pocoo.org/ Flask中文翻译:http://dormousehole.readthedocs.io/en/la ...
- 8086汇编语言(1)虚拟机安装ms-dos 7.1
8086汇编语言(1)虚拟机安装ms-dos 7.1 文/玄魂 前言 在开始这一系列文章之前,我想先说下,对于古董级的8086汇编到底还以有没有学习的必要.这里我说下我要从8086开始学习,而不是从w ...
- Windows Eclipse Scala的入门HelloWorld
[学习笔记] Windows Eclipse Scala的入门HelloWorld 有关带scala版本的eclipse4.7的下载, 你可以直接去: http://scala-ide.org/dow ...
- 8086汇编语言学习(二) 8086汇编开发环境搭建和Debug模式介绍
1. 8086汇编开发环境搭建 在上篇博客中简单的介绍了8086汇编语言.工欲善其事,必先利其器,在8086汇编语言正式开始学习之前,先介绍一下如何搭建8086汇编的开发环境. 汇编语言设计之初是用于 ...
- Springboot2.x入门——helloWorld
Springboot2.x入门--helloWorld 一.简介 1.1 Springboot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的 ...
- 汇编语言入门(在debug中编辑和调试程序)
2013-06-02 17:09 4252人阅读 评论(2) 收藏 举报 分类: 汇编语言(1) 版权声明:本文为博主原创文章,未经博主允许不得转载. 我们在Windows中进入的Dos方式,实际 ...
随机推荐
- vue(1)安装
1.安装node.js(https://nodejs.org/en/),我安装的是 v10.15.1 1).在nodejs安装路径下,新建node_global和node_cache两个文件夹 2). ...
- 阿里插件检查 lombok报错---方法缺少 '@Override' 注解
问题: Eclipse里,阿里编码规约插件扫描代码出现,但是idea却没有. 解决: 将以上注解改成 @Setter @Getter @NoArgsConstructor @AllArgsConstr ...
- thinkPHP5.0获取器
获取器的作用是在获取数据的字段值后自动进行处理,例如,我们需要对状态值进行转换,可以使用: class Cate extends Model { public function getTypeAttr ...
- import与export
expoer default 输出的是一个对象 export 输出的是对象的一个元素
- java替换word表格2007
package demo;import java.io.FileOutputStream;import java.util.HashMap;import java.util.Iterator;impo ...
- 如何成为一名:黑客/Programmer/Python高手
如何成为一名黑客 Eric Steven Raymond https://translations.readthedocs.org/en/latest/hacker_howto.html How To ...
- Android 中怎么重新启动APP或系统
重新启动应用程序,有两种方法,分别是: 1.通过ActivityManager来重新启动应用程序: ActivityManager manager = (ActivityManager)this.ge ...
- webpack安装与配置(window)
最近几天也是刚刚学习webpack工具,所以就要从安装开始我的学习的第一步.在网上搜索了找到webpack官网,在下载webpack就要先安装nodejs,在nodejs里用集成的npm下载webpa ...
- 多级菜单 menu
jquery menu: http://jqueryui.com/menu/ Kendo UI Demos http://demos.telerik.com/kendo-ui/web/menu/ind ...
- socket编程(一)
因为下载器涉及到socket的知识,就花了一天学习了.因为时间原因分成几部分.(这里记录上的是基于Windows平台的) #include <stdio.h> #include <w ...