菜鸟的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. 猴子选大王【PHP】

    目录 猴子选大王 指针解决 数组压栈 猴子选大王 一群猴子排成一圈,按1,2,...,n依次编号.然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不 ...

  2. rsync- sersync -inotify

    Rsync简介 Rsync是一款优秀的.快速的.多功能的本地或远程数据镜像同步备份工具.适用于unix/linux/windows等多种平台 从软件的名称Rsync(Remote Rynhroniza ...

  3. 深入浅出SharePoint2013——使用沙箱解决方案

    启用“Microsoft SharePoint Foundation Sandboxed Code Service”后,我们就可以使用Sandboxed solution了.

  4. iOS自动化-- 常用iOS命令

    iOS命令: 获取设备的的UDID idevice_id --list # 显示当前所连接设备的 udid instruments -s devices # 列出所有设备,包括真机.模拟器.mac i ...

  5. 把bootstrap4 dropdown 的导航下拉菜单触发方式改为鼠标浮动触发

    方法1: 原文: https://zzll.org/article/bootstrap4-xialacaidan 很简单,css中加入如下代码 .dropdown:hover>.dropdown ...

  6. 关于eclipse没有js、xml代码提示的解决:下载一个插件

    1)eclipse打开帮助 2)Eclipse Marketplace,然后搜索AngularJS Eclipse 安装后重启就行了 xml的搜索Rinzo. 没有vpn,我的网络到达不了.

  7. shell编程技巧和陷阱

    先推荐两本经典书籍: 1.advanced bash scripting guide http://www.tldp.org/LDP/abs/abs-guide.pdf 2.Unix Power To ...

  8. Java虚拟机13:Java类加载机制

    前言 我们知道我们写的程序经过编译后成为了.class文件,.class文件中描述了类的各种信息,最终都需要加载到虚拟机之后才能运行和使用.而虚拟机如何加载这些.class文件?.class文件的信息 ...

  9. SOJ 1017 Power of Cryptography 库函数精度

    Background Current work in cryptography involves (among other things) large prime numbers and comput ...

  10. 报错 Filtered offsite request

    用scrapy框架迭代爬取时报错 scrapy日志: 在 setting.py 文件中 设置 日志 记录等级 LOG_LEVEL= 'DEBUG' LOG_FILE ='log.txt' 观察 scr ...