美文网首页
【8086汇编】--入门知识

【8086汇编】--入门知识

作者: fanglaoda | 来源:发表于2018-10-04 12:22 被阅读0次

为什么要学习汇编


我们平时写的高级语言经过编译后都会到汇编最终到机器语言,它可以直接操作硬件,对性能高的一些程序采用汇编的方式,比如逆向工程,破解软件的时候都会和汇编打交道,当然对我来说是因为在看runtime源码的过程中,关于_objc_msgSend等等一些代码的时候也是汇编实现的,都告诉我是时候学习汇编了,这里并没有直接从arm汇编而是从8086汇编入门,理由很简单,简单,本系列文章是帮助大家汇编入门,更多的细节靠我几篇博客岂能说的清楚,还需要自己大量补课。

基础知识


先搞清楚下面几个概念

  • 【1】cpu

cpu是个调度中心,它协调电脑的各个部件合作,就是是人类的大脑,大概分为寄存器运算器控制器

15386220855323.jpg
  • 【2】存储器

cpu所需要执行的指令和数据都存在存储器中,也就是平时所说的内存。内存的作用仅次于CPU磁盘不同于内存。刚刚说到指令数据这个对于内存和磁盘在本质上没有区别,都是二进制的01,只是不同的时候对于数据的不同响应而已。内存被划分为一个个的单元,每个单元是一个字节,而一个字节是有8个二进制位构成的。磁盘中的数据以及程序如果读取不到内存就无法被cpu使用,所以知道CPU如何和内存沟通的非常重要。

  • 【3】总线

CPU内存是通过总线来联系的,CPU有很多管脚,每根管脚都和线相连。

15386229447178.jpg

总线在逻辑上被分为地址总线数据总线控制总线

下图展示了一个具有10根地址总线的cpu向内存发送地址为11时的10根总线的二进制数据情况其实就是00000 01011,这些01就是对于的线的低电平和高电平

15386230896643.jpg

线的根数成为线的宽度,比如上图有10根地址总线,那么地址总线的宽度为10

地址总线的宽度决定了CPU的寻址能力,这个很好理解,比如8086CPU地址总线的宽度为20那么它的寻址范围为0~ 2^20 - 1,我们称它的寻址能力为,1M

同理,8086的数据总线的宽度为16

  • 它的宽度决定了CPU的单次数据传送量,也就是数据传送速度
  • 8086的数据总线宽度是16,所以单次最大传递2个字节的数据

下面两个图分别展示了816位数据总线的传输次数和速度

15386244678975.jpg 15386244927357.jpg
  • 【4】8086CPU的寻址方式->段地址:偏移地址

大家不要被这个吓到,这个只是8086CPU用来解决CPU的位数和地址总线的不同的一种手段,8086CPU位数是16位的,而地址总线的宽度是20位的,如果CPU直接通过16位寻址,那么就会造成4位的内存浪费,也就是2^20 = 1M的内存实际使用的是2^16 = 64KB,8086为了能够充分利用这个内存采用的方式是通过两个16位的地址来合成20位的地址,物理地址 = 段地址 X 16 + 偏移地址

例如:8086CPU要访问地址为123C8H的内存单元,此时,CPU内部的加法器工作过程如下

15386251514713.jpg

我们更应该关注是解决该问题的手段,以便以后碰到类似的情况能够举一反三。

  • 【5】寄存器

寄存器是CPU的组成结构,为什么要单独说呢,是因为学习汇编它太重要了,感觉学习汇编就是学习寄存器

15386255686134.jpg

不同的CPU寄存器是不一样的,8086CPU的寄存器都是16位的(2个字节),主寄存器一般存放一些基本数据,成为通用寄存器,以ax为例,16位又分为高8位和的8位分别为ahal

15386258897451.jpg

下篇将带来寄存器专题,这里不做过多介绍

  • 【6】常用的单位

由于8086CPU是16位的,对于它只是2个单位,分别为字节(byte)和 字(word)

15386264449948.jpg

练习工具


15386265388880.jpg

这里是采用的Windows下的emu8086,后面大部分的demo都是通过这个来实现的

声明:

本文很多的图片来自王爽的《汇编语言》

相关文章

  • 【8086汇编】--入门知识

    为什么要学习汇编 我们平时写的高级语言经过编译后都会到汇编最终到机器语言,它可以直接操作硬件,对性能高的一些程序采...

  • 汇编分析&编译器优化

    汇编的种类 8086汇编(8086处理器是16bit的CPU) Win32汇编 Win64汇编 ARM汇编(嵌入式...

  • 逆向 - arm64汇编 - 第一天

    1. 汇编语言种类 8086汇编(8086处理器是16bit的CPU)Win32汇编Win64汇编ARM汇编(嵌入...

  • 1.汇编初识

    汇编语言常见种类: 8086汇编 (8086处理器是16bit的CPU) Win32汇编 Win64汇编 AT&T...

  • 从零入门8086汇编

    为什么要了解汇编? 了解汇编语言能够更加深入的理解高级语言的本质,彻底理解之前只是知道却又不清楚为什么的知识,比如...

  • iOS逆向之初识别汇编

    汇编语言是使用助记符代替机器语言。 汇编语言的种类,目前讨论比较多的汇编语言有 • 8086汇编(8086处理器是...

  • 汇编入门(长文多图,流量慎入!!!)

    8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...

  • 8086汇编-基础知识

    概述 本文来介绍最基础的8086汇编,将通过关键点的突出以及个人理解,而不会将原理做重点介绍,争取最快的速度来学会...

  • ARM64汇编学习笔记一(初始汇编)

    汇编语言的种类 目前讨论比较多的汇编语言有:8086 汇编(8086处理器是16bit 的 CPU)Win32 汇...

  • 汇编语言知多少(二): 指令使用

    在上篇文章中我们具体介绍了汇编语言的一些背景, 以及 8086汇编 工作原理, 在这篇文章中具体讲解8086汇编指...

网友评论

      本文标题:【8086汇编】--入门知识

      本文链接:https://www.haomeiwen.com/subject/bqdxaftx.html