附件下载:

    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之家],及时获取更多编程、逆向/破解等技术类软文资讯

        

 

转载于:https://www.cnblogs.com/imypp/p/7609185.html

8086汇编语言入门-HelloWorld相关推荐

  1. 8086汇编语言入门之HelloWorld

    文章目录 一.学习汇编的目的 二.汇编仿真软件工具推荐 三.了解基本指令段 四.汇编的执行[调用debug命令] 绪论:       汇编语言是一门 面向机器编程的语言,与面向过程,面向对象的高级编程 ...

  2. 计算机汇编语言教程pdf,计算机汇编语言入门.pdf

    计算机汇编语言入门 微处理器体系结构 基本微处理器设计 由时钟同步所有CPU 操作 控制器(CU) 协调各执行步骤的顺序 运算器(ALU) 进行算术运算和逐位处理 时钟 同步所有CPU 和总线操作 机 ...

  3. ARM 汇编语言入门

    [翻译]二进制漏洞利用(二)ARM32位汇编下的TCP Bind shell:https://bbs.pediy.com/thread-253511.htm ARM汇编语言入门 From:ARM汇编语 ...

  4. 汇编语言入门--调试工具debug的使用(史上最全,11种常见命令)

    汇编语言入门–调试工具debug的使用(史上最全,11种常见命令) 1.直接启动debug程序 详见:https://bingshuai.blog.csdn.net/article/details/1 ...

  5. 搭建8086汇编语言学习环境——dosbox

    搭建8086汇编语言学习环境 资源网盘链接:链接:https://pan.baidu.com/s/1gamz6WYIWLOv5WP9H8L2Ng 提取码:ydvv 复制这段内容后打开百度网盘手机App ...

  6. 易语言入门-HelloWorld

    易语言入门--HelloWorld 一.创建工程 二.编辑修改主窗口 三.增加按钮点击事件 四.运行 一.创建工程 程序-新建-选择windows窗口程序 二.编辑修改主窗口 右侧工具箱,选择添加编辑 ...

  7. OpenDaylight入门--HelloWorld

    OpenDaylight入门--HelloWorld 环境说明 开发环境配置 生成./m2文件夹(可选) 修改settings.xml 创建项目 安装项目 运行项目 实现RPC API:"H ...

  8. 汇编语言入门·打印输出“Hello,Assembly”

    这个学期开始学汇编语言,作为一门必修专业课,汇编语言的重要性不言而喻,第一次操作也是很坎坷,纪念打开汇编语言大门的打印"Hello Aeesmbly"第一课! 首先需要的环境:微软 ...

  9. 8086汇编语言精华笔记总结~

    目录 第一章 汇编语言的基础知识 1.计算机系统概述 硬件(Handware) 软件(Software) 2.汇编语言介绍 3.数据表示 1. BCD码 2. ASCII码 3. 真值和机器数 4. ...

  10. Python入门 HelloWorld

    Python入门篇 一直想学Py,可是总是有无形的力量在阻止,打破它! 没有什么简介了,直接的开始HelloWorld吧 命令行模式和Python交互模式 Python有交互模式,就是一边输入解释器一 ...

最新文章

  1. Boost之正则表达式_[转]
  2. java 基本类型 object_Java常用类-Object类
  3. 如何解决Beyond Compare内容相同仍然标示红色
  4. onblur 对象失去焦点事件
  5. linux脚本中怎么直接替换,linux-如何快速替换IP
  6. [NowCoder] 牛牛数星星
  7. telnet命令---Linux学习笔记
  8. 频繁自燃 烧伤消费者!充电宝一哥召回部分产品
  9. 动态设置imageview 宽高
  10. ubuntu16 kickstart pxe 安装系统
  11. 二进制安装mysql集群_实战mysql集群搭建(一)--centos7下二进制安装mysql-5.6
  12. Celery使用数据库代替rabbitmq
  13. C语言程序书写中 每行必须有分号,C语言课后习题答案
  14. 汉字拼音数据库_WinDev
  15. android 手机性能测试工具,不服跑个分?安卓手机性能测试工具科普
  16. 多元统计分析及R语言建模(第五版)——第3章多元数据的直观表示课后习题
  17. mysql截取字符串后缀_Mysql字符串截取函数SUBSTRING的用法说明
  18. EasyExcel第一次导出文件耗时长的问题
  19. 【排故篇】_啥是无效对象,出现时如何破?
  20. 拉普拉斯矩阵特征向量的几个关键性质证明

热门文章

  1. 进击的UI------------UIToolBar(bottom导航条)
  2. samba服务器常用指令
  3. 最长递增子序列和双序列
  4. iOS 面试常问考点
  5. document.body.scrollTop滚动失效
  6. js 报错(intermediate value)(...) is not a function
  7. 在FL Studio中如何混音你的鼓组采样与旋律采样
  8. 笔记-method-swizzling~那些年,一起遇过的坑
  9. 雅虎想卖个好价钱 竞购方却抱怨它遮遮掩掩
  10. tomcat使用spring-loaded实现应用热部署