8086汇编语言入门-HelloWorld

转载 2018年04月16日 21:17:43

    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  256 DUP(?)
SSEG    ENDS


CSEG    SEGMENT
        ASSUME  CS:CSEG,DS:DSEG
BEGIN:  MOV AX,DSEG
        MOV DS,AX
        MOV DX,OFFSET MESS
        MOV AH,9


        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)

  • 2009年01月02日 12:12
  • 1.46MB
  • 下载

8086汇编语言实现HelloWorld

汇编的学习
  • shawnping
  • shawnping
  • 2017-10-31 00:47:09
  • 66

初学spring3.05,一个helloworld例子

运行环境   1、myeclpise10.5  2、JDK6 3、 junit-4.11.jar 、hamcrest-core-1.3.jar 、 hamcrest-library-1.3.ja...
  • lu8000
  • lu8000
  • 2013-05-29 19:25:27
  • 7509

8086/8088汇编语言基础

关于汇编语言  百度百科-汇编语言 汇编语言作为最接近底层的,人类能够读懂的语言,在计算机快速发展的时代里,同样能够发挥许多作用。相比高级语言,拥有着更高的效率,在逆向方面,软件安全防护方面,发挥...
  • qq_34190023
  • qq_34190023
  • 2017-05-19 00:57:41
  • 447

SpringBoot学习——SpringBoot入门HelloWorld

SpringBoot学习——SpringBoot入门HelloWorld
  • flygoa
  • flygoa
  • 2017-02-22 10:25:15
  • 1521

【Android 开发入门】走进Android开发的世界,HelloWorld

你知道Hello World程序的由来吗?对于大多数编程语言的学习来说,真正入门的一课就是 Hello World!会而不难,难而不会。虽然很多人写过关于Android开发Hello World的文章...
  • testcs_dn
  • testcs_dn
  • 2016-12-08 14:11:25
  • 1892

Dubbo入门之HelloWorld篇

一、前言 Dubbo是阿里巴巴推出的分布式服务器,通过Dubbo可以为Web应用提供WebService的功能。把单服务器应用实现分布式,万事开头难,在Dubbo的使用前,必须要部署Dubb...
  • WJW15363193644wjw
  • WJW15363193644wjw
  • 2017-05-29 15:26:04
  • 993

Zookeeper入门-Java版本HelloWorld例子

上一篇介绍了,Zookeeper的基本概念,怎么启动,怎么解决可能遇到的几个问题。本篇,根据网上代码,整理了一个例子,Zookeeper的HelloWorld。下面这个代码,还是比较简单的,核心类就是...
  • FansUnion
  • FansUnion
  • 2015-12-01 11:18:26
  • 5491

objective-c入门(xcode helloworld程序 创建类)

一:objective-c简介 Objective-C是进行iPhone软件开发的语言 Objective-C语言是C语言的一个扩展集 Objective-C是一种面向对象的语言 大小写敏...
  • rhljiayou
  • rhljiayou
  • 2012-03-24 11:54:11
  • 9517

springboot HelloWorld

  • 2018年02月26日 11:18
  • 12KB
  • 下载
收藏助手
不良信息举报
您举报文章:8086汇编语言入门-HelloWorld
举报原因:
原因补充:

(最多只允许输入30个字)