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之家],及时获取更多编程、逆向/破解等技术类软文资讯
转载于:https://www.cnblogs.com/imypp/p/7609185.html
8086汇编语言入门-HelloWorld相关推荐
- 8086汇编语言入门之HelloWorld
文章目录 一.学习汇编的目的 二.汇编仿真软件工具推荐 三.了解基本指令段 四.汇编的执行[调用debug命令] 绪论: 汇编语言是一门 面向机器编程的语言,与面向过程,面向对象的高级编程 ...
- 计算机汇编语言教程pdf,计算机汇编语言入门.pdf
计算机汇编语言入门 微处理器体系结构 基本微处理器设计 由时钟同步所有CPU 操作 控制器(CU) 协调各执行步骤的顺序 运算器(ALU) 进行算术运算和逐位处理 时钟 同步所有CPU 和总线操作 机 ...
- ARM 汇编语言入门
[翻译]二进制漏洞利用(二)ARM32位汇编下的TCP Bind shell:https://bbs.pediy.com/thread-253511.htm ARM汇编语言入门 From:ARM汇编语 ...
- 汇编语言入门--调试工具debug的使用(史上最全,11种常见命令)
汇编语言入门–调试工具debug的使用(史上最全,11种常见命令) 1.直接启动debug程序 详见:https://bingshuai.blog.csdn.net/article/details/1 ...
- 搭建8086汇编语言学习环境——dosbox
搭建8086汇编语言学习环境 资源网盘链接:链接:https://pan.baidu.com/s/1gamz6WYIWLOv5WP9H8L2Ng 提取码:ydvv 复制这段内容后打开百度网盘手机App ...
- 易语言入门-HelloWorld
易语言入门--HelloWorld 一.创建工程 二.编辑修改主窗口 三.增加按钮点击事件 四.运行 一.创建工程 程序-新建-选择windows窗口程序 二.编辑修改主窗口 右侧工具箱,选择添加编辑 ...
- OpenDaylight入门--HelloWorld
OpenDaylight入门--HelloWorld 环境说明 开发环境配置 生成./m2文件夹(可选) 修改settings.xml 创建项目 安装项目 运行项目 实现RPC API:"H ...
- 汇编语言入门·打印输出“Hello,Assembly”
这个学期开始学汇编语言,作为一门必修专业课,汇编语言的重要性不言而喻,第一次操作也是很坎坷,纪念打开汇编语言大门的打印"Hello Aeesmbly"第一课! 首先需要的环境:微软 ...
- 8086汇编语言精华笔记总结~
目录 第一章 汇编语言的基础知识 1.计算机系统概述 硬件(Handware) 软件(Software) 2.汇编语言介绍 3.数据表示 1. BCD码 2. ASCII码 3. 真值和机器数 4. ...
- Python入门 HelloWorld
Python入门篇 一直想学Py,可是总是有无形的力量在阻止,打破它! 没有什么简介了,直接的开始HelloWorld吧 命令行模式和Python交互模式 Python有交互模式,就是一边输入解释器一 ...
最新文章
- Boost之正则表达式_[转]
- java 基本类型 object_Java常用类-Object类
- 如何解决Beyond Compare内容相同仍然标示红色
- onblur 对象失去焦点事件
- linux脚本中怎么直接替换,linux-如何快速替换IP
- [NowCoder] 牛牛数星星
- telnet命令---Linux学习笔记
- 频繁自燃 烧伤消费者!充电宝一哥召回部分产品
- 动态设置imageview 宽高
- ubuntu16 kickstart pxe 安装系统
- 二进制安装mysql集群_实战mysql集群搭建(一)--centos7下二进制安装mysql-5.6
- Celery使用数据库代替rabbitmq
- C语言程序书写中 每行必须有分号,C语言课后习题答案
- 汉字拼音数据库_WinDev
- android 手机性能测试工具,不服跑个分?安卓手机性能测试工具科普
- 多元统计分析及R语言建模(第五版)——第3章多元数据的直观表示课后习题
- mysql截取字符串后缀_Mysql字符串截取函数SUBSTRING的用法说明
- EasyExcel第一次导出文件耗时长的问题
- 【排故篇】_啥是无效对象,出现时如何破?
- 拉普拉斯矩阵特征向量的几个关键性质证明
热门文章
- 进击的UI------------UIToolBar(bottom导航条)
- samba服务器常用指令
- 最长递增子序列和双序列
- iOS 面试常问考点
- document.body.scrollTop滚动失效
- js 报错(intermediate value)(...) is not a function
- 在FL Studio中如何混音你的鼓组采样与旋律采样
- 笔记-method-swizzling~那些年,一起遇过的坑
- 雅虎想卖个好价钱 竞购方却抱怨它遮遮掩掩
- tomcat使用spring-loaded实现应用热部署