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 源程序

 1 ;80x86汇编语言<入门程序>
 2 ;YPP.20170928
 3 ;文件名Hello.asm
 4
 5 DSEG    SEGMENT
 6 MESS    DB   ‘Hello,World!‘ ,0DH,0AH,24H
 7 DSEG    ENDS
 8
 9 SSEG    SEGMENT PARA STACK
10         DW  256 DUP(?)
11 SSEG    ENDS
12
13 CSEG    SEGMENT
14         ASSUME  CS:CSEG,DS:DSEG
15 BEGIN:  MOV AX,DSEG
16         MOV DS,AX
17         MOV DX,OFFSET MESS
18         MOV AH,9
19
20         INT 21H
21         MOV AH,4CH
22         INT 21H
23 CSEG    ENDS
24         END  BEGIN
25    

初学者首先需要知道的是,汇编语言程序由两个基本元素组成:操作码、操作数

操作码,指明要进行的操作,如加、减、乘、除....

操作数,被操作的对象,可以是数字、字符串、存储单元(变量)等

本文不对代码细节做过多的解释,因为需要很多前置知识做铺垫,才能更好的理解这段代码。

前置知识包括,二进制数制换算、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要注意。

 ==========================================================

扫一扫关注微信公众号[Cracker之家],及时获取更多编程、逆向/破解等技术类软文资讯

        

 

时间: 2024-10-28 16:11:07

8086汇编语言入门-HelloWorld的相关文章

8086汇编基础 8086汇编语言用什么软件写?

镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 有的同学问我,8086汇编语言用什么写呀? 那我就在这里说一下,其实我也就只是学了十几天的汇编语言,说的东西可能不太全面,还望包涵. 1 dosbox (我自己拿VB6.0做的快捷方式存储小程序) 效果是这样的, 我进入的是debug界面,debug是用来调试已经写好的asm的.输入q退出,deb

Hibernate4.3.5入门HelloWorld

本文给出一个简单的Hibernate4.3.5入门实例,配置方式采用XML文件方式(这种方式已经不是主流了,目前越来越多采用Annotation方式映射POJO实体) 代码结构如下图所示:主要用到hibernate-release-4.3.5.Final\lib\required下的jar 在这里只展示出主要的代码 1.HibernateUtil.java 1 package com.wangp.hibernate.helper; 2 3 import org.hibernate.Session

汇编语言入门———逻辑三大总线及工作原理

指令和数据: 在内存或者磁盘上,指令和数据是没有任何区别的,都是二进制信息. 那怎么区分二进制信息到底是数据还是程序呢? 下面会有解释. cpu要想进行数据的读写,必须和外部器件进行三类信息交互: 1.存储单元的地址(地址信息) 2器件的选择,读还是写(控制信息) 3 操作的数据(数据信息) 计算机中专门链接cpu和其他芯片的导线,通常称为总线(bus) 物理上:一根根导线的集合 逻辑上划分为: 地址总线 数据总线(从这条总线到cpu的二进制信息 就算做数据) 控制总线(从这条总线到cpu的二进

CodeIgniter入门——HelloWorld

原文:CodeIgniter入门--HelloWorld CodeIgniter(CI)是一套给PHP网站开发者使用的应用程序开发框架和工具包. 初次接触,来一个HelloWorld~~~ ^_^ 准备工作: 一.下载CI 官方网站:http://ellislab.com/codeigniter CodeIgniter中国:http://codeigniter.org.cn/ 可以从上面下载相关版本以及文档,我在这里下载使用的2.2.0版本. 二.安装CI 1.首先你得有php运行环境.如果是w

汇编语言入门———cpu的工作原理(寄存器)

CPU构成 典型的cpu有 运算器,控制器,寄存器 等器件组成.这些器件靠内部总线相连 寄存器 寄存器是cpu内的组成部分.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和地址 8086CPU有14 个寄存器  AX , BX, CX, DX, SI, DI, SP, BP, IP, CS , SS, DS, ES , PSW 通用寄存器(8个 一般不变) 8086CPU所有的寄存器都是16位的,可以存放两个字节(1个字) AX BX CX DX 是通用寄存器,通常用来放一般性数据

汇编语言入门———cpu与存储器的配合(外部通讯)

存储器: 随机存储器(RAM) :断电以后就会丢失: 只读存储器(ROM): 公共能和链接上分为 随机存储器RAM 装有BIOS的ROM bios(基本输入输出系统),是由主板和各类接口卡(显卡 网卡)厂商提供的软件系统. 接口卡上的RAM (显存) 各类存储器的逻辑链接 内存地址空间: 一个cpu的地址线宽度是10,那么可以寻址1024个内存单元(2的10次方),这1024个可寻到的内存单元就构成了 这个cpu的内存地址空间. 在cpu看来,各类存储器是一个逻辑存储器,如下图所示 Intel

8086汇编语言学习(二) 8086汇编开发环境搭建和Debug模式介绍

1. 8086汇编开发环境搭建 在上篇博客中简单的介绍了8086汇编语言.工欲善其事,必先利其器,在8086汇编语言正式开始学习之前,先介绍一下如何搭建8086汇编的开发环境. 汇编语言设计之初是用于在没有操作系统的裸机上直接操作硬件的,但对于大部分人来说,在8086裸机上直接进行编程将会面临各种困难.好在我们可以使用软件模拟器来模拟硬件进行8086的学习实践.在<汇编语言>中作者推荐通过windows环境下的masm和debug进行学习. masm介绍: masm是一款DOS下的汇编工具包,

Springboot2.x入门——helloWorld

Springboot2.x入门--helloWorld 一.简介 1.1 Springboot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者. 1.2 Springboot2.x比较1.x 新版本代码无

汇编语言入门(在debug中编辑和调试程序)

2013-06-02 17:09 4252人阅读 评论(2) 收藏 举报  分类: 汇编语言(1)  版权声明:本文为博主原创文章,未经博主允许不得转载. 我们在Windows中进入的Dos方式,实际上是虚拟8086模式的Dos,方法是:点击“开始”,“运行”,输入"command",点击“确定”, 可以看到弹出一个黑色的框框,然后,在黑色的框框中输入相关信息,如图所示(提前说一句,汇编语言对大小写不敏感,而C语言对大小写敏感): 下面来具体分析一下: 1. debug是一个调试工具(