菜鸟的8086汇编入门之旅,偶有错处恭请大佬们指正。

Ⅰ· 闲说一下

我为什么学汇编?相对于晦涩难懂的01010101011010机器语言(高低电平变化驱动机器做出不同反应),汇编语言用更便于记忆和使用(更接近自然语言),而相较于高级语言,汇编的执行效率更
高,这些是书上讲的。于我而言,是为了反汇编和逆向编程做准备,当走进汇编的世界,能把别人的软件“拆的更碎”。能从更深的角度去解读别人的编程思路,无论是对自己的语言、编程学习,抑
或是做好安全编程,研究CTF的reverse方向都益处良多。

Ⅱ · 基础知识

①冯诺依曼体系结构
1946年美籍匈牙利科学家冯·诺依曼提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式存储,并确定了存储程序计算机的五大组成部分(运算器、控制器、存
储器、输入设备和输出设备)和基本工作方法(把要执行的程序和处理的数据首先存入主存储器(内存),计算机执行程序时,将自动地并按顺序从主存储器中取出指令一条一条地执行)。
②PC机的心脏、血液、大脑
对于PC机而言,CPU(控制器与运算器)就像是大脑,处理信息并告诉机器各“肢体”如何协调工作,而存储器(内存/磁盘)则就是存储提供信息(指令及数据)的源头,就像PC机的心脏,供给大脑赖
以活跃及工作的血液(指令/程序)。
存储器以8bit'位'(即1byte'字节')为一个存储单元划分,正常微机中常用计量单位换算如下:1024B=1KB、1024KB=1MB、1024MB=1G、1024G=T,而硬盘生产厂商通常采用"10^3=1"方式
换算(所以电脑上查看到的实际容量偏小)。
正如冯诺依曼体系所言,在存储器中,指令和数据均以二进制形式无差别地存储,而两者的区分则取决于CPU中两个特殊的寄存器:存放代码段段地址的CS和指向下一条指令地址(偏移量)的IP(详
细内容在寄存器部分补充)。
那么机器的大脑如何向心脏汲取这些血液进行工作呢?自然也是需要一条条的“血管”来传输,在微机中就指的是“地址线、数据线、控制线”,这些导线用不同的电信号来传输不同的信息。

如图,CPU先要告诉内存,我要对你哪块儿地方动手(用地址总线传地址),然后专门有个路子(控制总线)来告诉内存“我要从这里拿东西还是往这里放东西”(内存读写),最后就是在这数据总线上
存/取数据了。
那么这些线究竟是如何实现这些的呢?我们知道机器里只认高低电平(1/0),那么一条总线有具体几根导线组成,这根导线就能传递2的几次方种状态(即数据)。我们把这个称作是这个总线的能力
那么对应地址总线就是他的寻址能力,对应数据总线,就是他的一次数据传送量,对应控制总线就叫做控制能力。
③内存地址空间
内存地址空间是对CPU而言的一个概念,并非我们常说的内存条容量,CPU的地址总线有多强,他的内存地址空间就多大。比如8086处理器有20跟地址线,则他的寻址能力则为2^20bit(128KB),即该
CPU能找到131072个存储单元,那么这就是8086的内存地址空间即128KB大小。
而实际一台PC机不可能只有一个主存储设备(内存),他的CPU还会连着各种各样的器件,这些器件上也有存储的地方,那么CPU就会讲所有的这些物理上分隔的存储器共同
编制成“连续”的逻辑存储器,每个物理存储器在这个逻辑存储器中都有他的映射。然后CPU会依据不同的用途将内存地址空间分成不同的块。下图是8086PC机内地址空间分
配。

Ⅲ·总结

以上内容琐碎切显冗杂,但理解好这些基础知识,对汇编语言的继续学习有一定意义,帮助我们深入的理解及其工作的重要基本原理。

【8086汇编-Day1】预备知识的更多相关文章

  1. C++ day01 预备知识、C++综述、教材、推荐阅读。

    C++ day01: 1.预备知识? 1)什么是编程 编程,即编订程序. 程序 = 数据 + 算法(蛋糕 = 糖.鸡蛋.奶油 + 打鸡蛋.加糖.烤) 2)编程语言 最初的编程是用二进制代码(即“机器码 ...

  2. 8086汇编语言学习(二) 8086汇编开发环境搭建和Debug模式介绍

    1. 8086汇编开发环境搭建 在上篇博客中简单的介绍了8086汇编语言.工欲善其事,必先利其器,在8086汇编语言正式开始学习之前,先介绍一下如何搭建8086汇编的开发环境. 汇编语言设计之初是用于 ...

  3. 【协作式原创】查漏补缺之Golang中mutex源码实现(预备知识)

    预备知识 CAS机制 1. 是什么 参考附录3 CAS 是项乐观锁技术,当多个线程尝试使用 CAS 同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是 ...

  4. 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识

    驱动开发读书笔记. 0.06  嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...

  5. 受限玻尔兹曼机(RBM)学习笔记(一)预备知识

    去年 6 月份写的博文<Yusuke Sugomori 的 C 语言 Deep Learning 程序解读>是囫囵吞枣地读完一个关于 DBN 算法的开源代码后的笔记,当时对其中涉及的算法原 ...

  6. 学习Identity Server 4的预备知识

    我要使用asp.net core 2.0 web api 搭建一个基础框架并立即应用于一个实际的项目中去. 这里需要使用identity server 4 做单点登陆. 下面就简单学习一下相关的预备知 ...

  7. JAVA面向对象-----面向对象(基础预备知识汇总)

    终于整理好了面向对象基础预备知识,但是有点多,所以你们懂的,贴图,较长的代码我还是会排版出来的,我不想把时间浪费在排版上在word里排版一次已经很浪费时间了,所以请谅解. public class C ...

  8. 用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 (2) + 准备项目

    上一部分预备知识在这 http://www.cnblogs.com/cgzl/p/9010978.html 如果您对ASP.NET Core很了解的话,可以不看本文, 本文基本都是官方文档的内容. A ...

  9. ASP.NET Core的实时库: SignalR -- 预备知识

    大纲 本系列会分为2-3篇文章. 第一篇介绍SignalR的预备知识和原理 然后会介绍SignalR和如何在ASP.NET Core里使用SignalR. 本文的目录如下: 实时Web简述 Long ...

随机推荐

  1. windows10 彻底卸载 Docker 和 DockerNAT

    删除docker程序 记事本新建脚本文件 a.ps1,内容如下: $ErrorActionPreference = "SilentlyContinue" kill -force - ...

  2. c/c++ 中#ifndef和#endif的作用及使用

    有时候我们在编程的时候,希望有些代码在我们需要时编译,不需要时不编译,也就是让它快速注释,这时候即可以考虑#ifdef和#endif,它们会使我们的编译器进行选择性编译.使用方法如下: #includ ...

  3. android--eclipse闪退,无法启动

    解决方法: 删除文件:[workspace]/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi

  4. SVG中的元素属性

    SVG attributes by category Animation event attributes onbegin, onend, onload, onrepeat Animation att ...

  5. Python的getattr(),setattr(),delattr(),hasattr()及类内建__getattr__应用

    @Python的getattr(),setattr(),delattr(),hasattr() 先转一篇博文,参考.最后再给出一个例子 getattr()函数是Python自省的核心函数,具体使用大体 ...

  6. 渲染、render与绘制

    渲染是抽象到具体的过程: 抽象:图片信息的描述(比如一条线:两个端点的位置.线粗.颜色等特征): 具体:依据抽象信息得到的可视图片(绘制过程). 渲染是中文翻译的问题,有种添油加醋的感觉.直意就是交与 ...

  7. 【LGP5108】仰望半月的夜空

    题目 我还会写\(SA\)和 \(ST\)表真是令人感动 发现这是一个思博题 我们开一个指针,标记一下当前合法的字典序最小的后缀排名在哪里,刚开始自然是\(1\) 我们发现这个后缀不能为我们提供\(i ...

  8. 【[HEOI2016/TJOI2016]序列】

    压行真漂亮 首先这肯定是一个\(dp\)了 设\(dp_i\)表示\(i\)结尾的最长不下降子序列的长度 显然我们要找一个\(j\)来转移 也就是\(dp_i=max(dp_j+1)\) 那么什么样的 ...

  9. 俄罗斯方块 UWP 版

    UWP跟 WPF编程模型一致,不过UWP做了精简,而且不同的系统的API还略有不同.不同的地方有以下几点: 1.动画.动画除了故事版,还有其它的实现方式. 2.异步方法.UWP中的方法调用,大部分都是 ...

  10. PHP扩展功能----cURL

    一.入门三部曲 1.cURL是什么? wikipedia介绍: * cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行.它支持文件上传和下载,所以是综合传输工具,但按传统,习 ...