文章目录

  • 一.学习汇编的目的
  • 二.汇编仿真软件工具推荐
  • 三.了解基本指令段
  • 四.汇编的执行【调用debug命令】

绪论:
      汇编语言是一门 面向机器编程的语言,与面向过程,面向对象的高级编程语言不同;编程者只需要调用模块方法就行,不需要关心寄存器与内存的分配问题,但是汇编语言就需要编程者多关心这类问题了。

一.学习汇编的目的

总所周知,汇编语言并不普及吃香,作为计算机最底层的语言,其作用更多的是展现在硬件设计与开发的工作中,如嵌入式开发。帮助学习者深入理解计算机体系结构。学习汇编语言也能帮助理解高级语言。比如你明白System.out.println()是调用了System类,但是你知道类的具体调用原理吗?你知道#include是定义了宏,但你知道宏的具体内容是什么构成的吗?

汇编语言编程,面向的是“寄存器”,寄存器是计算机CPU内部的一种超高速缓存(速度胜过内存数倍,但容量极小),对数据的各种操作都由“指令”来进行,也被称作汇编指令。所以从汇编的角度来说,程序就是指令。从电子电路硬件设计与开发的角度来看,程序就是集成电路里的高低平信号,通常1为高电平,0为低电平。信号通过解码器译码器转化为指令,继而被高级语言封装成代码与模块,方法,说白了就是指令集。这里扯远了,继续回到汇编这件事上。

二.汇编仿真软件工具推荐

仿真软件+debug工具:Masm for windos

如果你也想要这套工具,就在公众号里回复“汇编工具”即可。毕竟这玩意要绝种了,我们面向的是8086微处理器。

三.了解基本指令段

我将对比高级语言进行讲解,高级语言中,我们定义一个的时候,通常会定义它的数据成员变量,和成员方法;方法的话少不了构造方法之类的。汇编也如此,我们先定义一个数据段:
写法就是:

;datas segment相当于定义了一个数据段,用于存储代码中的数据
;datas ends表示数据段的结束
;------------------------------------------

内部的DB不要当成变量了,它是寄存器!寄存器的类型是STRING的。1310分别代表回车和空格。

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相关推荐

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

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

  2. 最简单最详细的SpringBoot入门项目——HelloWorld

    最详细的SpringBoot入门项目--HelloWorld 关于SpringBoot的介绍以及优点这里就不说了,想了解的可以直接点击这里 Spring Boot百度百科 接下来我们直奔主题,开始用S ...

  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. docker入门之HelloWorld

    docker入门之HelloWorld 作者:雨水,日期:2016-04-01 CSDN博客:http://blog.csdn.net/gobitan 摘要:docker真的是个好东东,能够极大的简化 ...

  7. Flutter入门之——HelloWorld

    Flutter入门之--HelloWorld 安装Flutter开发环境 首先要准备好Flutter的开发环境和开发所使用的IDE,这里我们使用AndroidStudio作为开发工具. Flutter ...

  8. Netty框架之网络通信入门程序~helloWorld

    案例演示:创建客户端和服务端,实现客户端与服务端建立连接,并且发送消息给服务端 Netty框架之网络通信入门程序~helloWorld 1.服务端代码实现 2.客户端代码实现 请尝试阅读代码,并理解注 ...

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

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

最新文章

  1. makefile常用语法讲解(1)
  2. 第一节:复习委托,并且通过委托的异步调用开启一个新线程和异步回调、异步等待。
  3. 深度学习——在TensorFlow中查看和设定张量的形态
  4. 夏普 DN7C3A006 PM2.5 传感器测量步骤及存在问题
  5. 将时间戳转为中国标准时间
  6. 软件工程之软件工程管理
  7. 所有的I/O端口都是兼容CMOS和TTL 表示什么意思
  8. Quorum区块链原理及其概念
  9. 学习java框架-J2EE体系-Spring-IOC-AOP-Bean-事务-
  10. 【HIN】异质信息网络分析与应用综述
  11. 扬子晚报:杨百万 PK 巴菲特
  12. 【tio-websocket】5、tio-websocket-server统计在线人数
  13. 基于STM32智能手环心率计步器体温显示设计
  14. C语言 二级指针内存分配、初始化和释放
  15. 【第80期】浅谈如何成为技术一号位?
  16. Adobe Magento 2 认证证书的变化
  17. 合成迪丽热巴下海_F4同台是虚拟合成,只有吴建豪到了现场,F4其他三子呢?...
  18. 阿里2016实习offer五面经验与总结
  19. 吉林考生500分左右计算机类大学,吉林高考理科500分能上什么大学
  20. Active Spring transaction synchronization or active JTA transaction with specifi

热门文章

  1. 列支敦士登弗里克银行推出加密货币机构交易平台
  2. 大一计算机 应用大题,大一计算机试题及答案
  3. linux 备份手机照片,如何更安全有效的保存手机里的照片?
  4. qt5.9支持linux,Linux环境下搭建Qt5.9开发环境
  5. 如何将两个PDF合并成一个PDF,几个方法教会你简单操作!
  6. css 选择器和属性
  7. poj1013 假硬币
  8. 微博java实现原理_【转】URL短地址压缩算法 微博短地址原理解析 (Java实现)...
  9. 推荐一个快速证件照换底色的工具超级好用
  10. 技术服务于生活——羽毛球+程序员=?