菜鸟的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. Linux命令--文件处理

    touch命令 Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间.若文件不存在,系统会建立一个新的文件. ls -l 可以显示档案的时间记录. 语法 touch [-a ...

  2. jquery.form.js(ajax表单提交)

    Form插件地址: 官方网站:http://malsup.com/jQuery/form/ 翻译地址:http://www.aqee.net/docs/jquery.form.plugin/jquer ...

  3. maven相关基础

    0. 本文主要参考一下良心maven原创文摘: 0.0 maven官网传送门 http://maven.apache.org/ 0.1 maven日常 http://www.cnblogs.com/x ...

  4. P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat…

    题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of cours ...

  5. vue项目 webpack打包后,图片路径是绝对路径

    vue项目,使用webpack打包,虽然在全局把路径改成了相对的路径,但是图片引用的路径还是异常的,解决办法如下: 1.config文件夹下index.js中: assetsPublicPath:&q ...

  6. Segmentation fault (core dumped) 错误的一种解决场景

    错误类型 Segmentation fault (core dumped) 产生原因 Segmentation fault 段错误. Core Dump 核心转储(是操作系统在进程收到某些信号而终止运 ...

  7. Xcode 5.1安装插件:规范凝视生成器VVDocumenter

    类似java的多行凝视! 安装过程: 1.前往GitHub下载project文件:VVDocumenter-Xcode 2.用Xcode打开project,Command + B Build成功后,能 ...

  8. ubuntu snmp Error: unknown payload OID

    ubuntu snmp Error: unknown payload OID 2013-11-12 15:51:48 标签:ubuntu Error snmp unknown payload OID ...

  9. 深入理解计算机系统——系统级I/O

    一.UNIX I/O     在UNIX系统中有一个说法,一切皆文件.所有的I/O设备,如网络.磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行.这种将设备映射为文件的方式,允 ...

  10. Mysql-常用数据的基本操作和基本形式

    一 .介绍 二 .插入数据INSERT 三 .更新数据UPDATE 四 .删除数据DELETE 五 .查询数据SELECT 六 .权限管理 一. 介绍 MySQL数据操作: DML ========= ...