8086汇编语言入门之HelloWorld
文章目录
- 一.学习汇编的目的
- 二.汇编仿真软件工具推荐
- 三.了解基本指令段
- 四.汇编的执行【调用debug命令】
绪论:
汇编语言是一门 面向机器编程的语言,与面向过程,面向对象的高级编程语言不同;编程者只需要调用模块方法就行,不需要关心寄存器与内存的分配问题,但是汇编语言就需要编程者多关心这类问题了。
一.学习汇编的目的
总所周知,汇编语言并不普及吃香,作为计算机最底层的语言,其作用更多的是展现在硬件设计与开发的工作中,如嵌入式开发。帮助学习者深入理解计算机体系结构。学习汇编语言也能帮助理解高级语言。比如你明白System.out.println
()是调用了System
类,但是你知道类的具体调用原理吗?你知道#include
是定义了宏,但你知道宏的具体内容是什么构成的吗?
汇编语言编程,面向的是“寄存器”,寄存器是计算机CPU内部的一种超高速缓存(速度胜过内存数倍,但容量极小),对数据的各种操作都由“指令”来进行,也被称作汇编指令。所以从汇编的角度来说,程序就是指令。从电子电路硬件设计与开发的角度来看,程序就是集成电路里的高低平信号,通常1为高电平,0为低电平。信号通过解码器和译码器转化为指令,继而被高级语言封装成代码与模块,方法,说白了就是指令集。这里扯远了,继续回到汇编这件事上。
二.汇编仿真软件工具推荐
仿真软件+debug工具:Masm for windos
如果你也想要这套工具,就在公众号里回复“汇编工具”即可。毕竟这玩意要绝种了,我们面向的是8086微处理器。
三.了解基本指令段
我将对比高级语言进行讲解,高级语言中,我们定义一个类的时候,通常会定义它的数据成员变量,和成员方法;方法的话少不了构造方法之类的。汇编也如此,我们先定义一个数据段:
写法就是:
;datas segment相当于定义了一个数据段,用于存储代码中的数据
;datas ends表示数据段的结束
;------------------------------------------
内部的DB
不要当成变量了,它是寄存器!寄存器的类型是STRING
的。13和10分别代表回车和空格。
DATAS SEGMENTSTRING DB 'Hello World!',13,10,'$';'$'代表字符串结束
DATAS ENDS
在定义一个代码段:
;codes segment相当于代码段开始
;codes ends相当于代码段结束
;start相当于main函数,作为函数入口
;----------------------------------
CODES SEGMENTASSUME CS:CODES,DS:DATAS
START:;相当于main函数MOV AX,DATASMOV DS,AXLEA DX,STRINGMOV AH,9INT 21HMOV AH,4CHINT 21H
CODES ENDSEND START
你可能疑惑为什么要一开始定个代码段和数据段。如果你只学过高级语言,那么定义这个没有为什么,因为那是规定,也就是代码的规范化。汇编语言为什么要定义这个呢?因为CPU内部及其内存长成这个样子。数据段+代码段+…段构成了内存。你用高级语言定义的变量都要在里面开一个内存单元的。我们看到如上图的指令包含了数据传送指令,指针地址指令,中断指令等等。中间的桥梁就是:
ASSUME CS:CODES,DS:DATAS;关联了代码段寄存器CS和数据段寄存器DS
这种关联关系,类似于高级语言里方法调用成员变量及其属性的作用。数据段的寄存器存储的是立即数,也就相当于高级语言里的常量,那么在代码段里我们认定它的地址是不会改变的,我们需要用一个类似于指针的东西去指!指针除了出现在C和C++里就基本绝种了,因为不安全,它的安全性其实在C#里得到了提升,C#对于指针的运用还是比较常见的,主要是它安全了,因为它引入了委托的新概念,我委托一个新变量存储指针指向的新地址,不仅解决了容易内存溢出还解决了安全问题,,,等等,刹车,,,回到主话题。所用上文用到了指针指令lea
,它能调用字符串开始的地址,我们的字符串就是Helloworld,我们知道它的存储单元地址是16位的,我们说过了它是寄存器存储的,那么先找到寄存器的偏移量地址。从而找到我们存储的这段指令,按高低位从内存进行读取,再存储到寄存器DX
中。
四.汇编的执行【调用debug命令】
高级语言走的也是这几个步骤,语言越高级,编译器越强大帮你省掉了几个步骤。但是,如果编译器出bug导致你的项目也出问题了?你有办法再快乐的coding了吗?学习汇编可以在一定程度帮你解决这些问题。汇编不是一门语言,而是一门集合了《计算机体系结构》《微机技术与接口》《操作系统》《汇编原理》的综合科学,底层架构是原理与体系结构。祝大家学习愉快,晚饭时间写了这篇博客,希望大家喜欢。这是一门需要连根拔起的理论+实践体系,学了它你可以玩反编译,反汇编搞po解。
我的这期po解,反汇编课程资料需要的可以私聊我:
我的微信:JL1714873054
编译 | 生成可执行文件 |
---|---|
链接动态库文件 | 运行 |
– | – |
8086汇编语言入门之HelloWorld相关推荐
- 计算机汇编语言教程pdf,计算机汇编语言入门.pdf
计算机汇编语言入门 微处理器体系结构 基本微处理器设计 由时钟同步所有CPU 操作 控制器(CU) 协调各执行步骤的顺序 运算器(ALU) 进行算术运算和逐位处理 时钟 同步所有CPU 和总线操作 机 ...
- 最简单最详细的SpringBoot入门项目——HelloWorld
最详细的SpringBoot入门项目--HelloWorld 关于SpringBoot的介绍以及优点这里就不说了,想了解的可以直接点击这里 Spring Boot百度百科 接下来我们直奔主题,开始用S ...
- 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 ...
- docker入门之HelloWorld
docker入门之HelloWorld 作者:雨水,日期:2016-04-01 CSDN博客:http://blog.csdn.net/gobitan 摘要:docker真的是个好东东,能够极大的简化 ...
- Flutter入门之——HelloWorld
Flutter入门之--HelloWorld 安装Flutter开发环境 首先要准备好Flutter的开发环境和开发所使用的IDE,这里我们使用AndroidStudio作为开发工具. Flutter ...
- Netty框架之网络通信入门程序~helloWorld
案例演示:创建客户端和服务端,实现客户端与服务端建立连接,并且发送消息给服务端 Netty框架之网络通信入门程序~helloWorld 1.服务端代码实现 2.客户端代码实现 请尝试阅读代码,并理解注 ...
- 汇编语言入门·打印输出“Hello,Assembly”
这个学期开始学汇编语言,作为一门必修专业课,汇编语言的重要性不言而喻,第一次操作也是很坎坷,纪念打开汇编语言大门的打印"Hello Aeesmbly"第一课! 首先需要的环境:微软 ...
最新文章
- makefile常用语法讲解(1)
- 第一节:复习委托,并且通过委托的异步调用开启一个新线程和异步回调、异步等待。
- 深度学习——在TensorFlow中查看和设定张量的形态
- 夏普 DN7C3A006 PM2.5 传感器测量步骤及存在问题
- 将时间戳转为中国标准时间
- 软件工程之软件工程管理
- 所有的I/O端口都是兼容CMOS和TTL 表示什么意思
- Quorum区块链原理及其概念
- 学习java框架-J2EE体系-Spring-IOC-AOP-Bean-事务-
- 【HIN】异质信息网络分析与应用综述
- 扬子晚报:杨百万 PK 巴菲特
- 【tio-websocket】5、tio-websocket-server统计在线人数
- 基于STM32智能手环心率计步器体温显示设计
- C语言 二级指针内存分配、初始化和释放
- 【第80期】浅谈如何成为技术一号位?
- Adobe Magento 2 认证证书的变化
- 合成迪丽热巴下海_F4同台是虚拟合成,只有吴建豪到了现场,F4其他三子呢?...
- 阿里2016实习offer五面经验与总结
- 吉林考生500分左右计算机类大学,吉林高考理科500分能上什么大学
- Active Spring transaction synchronization or active JTA transaction with specifi
热门文章
- 列支敦士登弗里克银行推出加密货币机构交易平台
- 大一计算机 应用大题,大一计算机试题及答案
- linux 备份手机照片,如何更安全有效的保存手机里的照片?
- qt5.9支持linux,Linux环境下搭建Qt5.9开发环境
- 如何将两个PDF合并成一个PDF,几个方法教会你简单操作!
- css 选择器和属性
- poj1013 假硬币
- 微博java实现原理_【转】URL短地址压缩算法 微博短地址原理解析 (Java实现)...
- 推荐一个快速证件照换底色的工具超级好用
- 技术服务于生活——羽毛球+程序员=?