VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > 汇编语言 >
  • 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要注意。

相关教程