zoukankan      html  css  js  c++  java
  • 《汇编语言》-王爽 阅读笔记 一个让你快速了解每一节在讲什么的笔记

    《汇编语言》王爽

    第一章 阅读笔记

    章节基本介绍

    汇编语言是在硬件上工作的编程语言,本章对硬件系统结构进行一些介绍,但是不对硬件系统进行全面和深入的研究。汇编的课程重点在 利用硬件系统的编程结构和指令集 有效灵活控制系统进行工作。

    关于PC机和CPU物理结构和编程结构的全面研究,在《微机原理与接口》中;关于计算机一般的结构、功能、性能的研究,放在《组成原理》中。

    1.1 机器语言

    一系列二进制数字,计算机可以直接执行,用高低电平来驱动电子元件进行计算。

    1.2 汇编语言的产生

    汇编语言是机器指令便于记忆的书写格式。

    1.3 汇编语言的组成

    汇编语言由3类指令组成:汇编指令、伪指令、其他符号。

    汇编指令是核心。

    1.4 存储器

    存储器,此处主要指的是内存。磁盘中的数据只有读到内存中,才能被CPU使用。

    1.5 指令和数据

    在内存上,指令和数据看起来是没有任何区别的,都是二进制信息。

    1.6 存储单元

    存储器由多个存储单元组成,一个存储单元可以存储一个字节,一个字节有8bits.

    1.8 地址总线

    CPU是通过地址总线来指定存储器单元的。总线的宽度决定了CPU能够访问的存储单元的数量。

    1.9 数据总线

    CPU与内存、其他器件间的数据传输是通过数据总线来进行的。数据总线的宽度决定了CPU和外界的数据传送速度。例如,16根数据总线一次可以传送2个字节。

    1.10 控制总线

    控制总线的宽度决定了CPU对外部期间的控制能力。

    1.15 内存地址空间

    就是所有物理存储器都被看做一个由若干存储单元组成的逻辑存储器,比如07FFFH是主存的空间,8000H9FFFH是显存的空间。

    第二章 寄存器(CPU工作原理)

    2.1 通用寄存器

    8086CPU的所有寄存器都是16位的,可以存放两个字节。AX, BX, CX, DX四个寄存器用于存放一般性数据,是通用寄存器。

    它们又可以分为两个独立的8位寄存器使用。例如AX可以分为AH和AL。

    2.2 字在寄存器中的存储

    字节<字<双字,字是两个字节,双字是四个字节

    2.3 几条汇编指令

    这本书的源地址和目的地址和CSAPP是反的!

    这本书:mov D S

    CSAPP:mov S D

    2.4 物理地址

    之前说过,所有物理存储器都被看成一个逻辑存储器,它们构成一个一维的线性空间,每个存储单元都有唯一的地址,这个地址就是物理地址。

    CPU向地址总线传输的必须是一个物理地址,这个物理地址要先在CPU内部形成。接下来讨论CPU是如何在内部形成物理地址的。

    2.5 16位结构的CPU

    16位结构=16位机=字长为16位

    意思是:

    • 运算器一次最多可以处理16位数据

    • 寄存器的最大宽度为16位

    • 寄存器和运算器之间的通路为16位

    2.6 8086CPU给出物理地址的方法

    8086CPU有20位地址总线,且是16位结构。它采用在内部用两个16位地址合成的方法来形成一个20位的物理地址。

    CPU中会提供两个16位的地址,一个是段地址,一个是偏移地址。合成方法是:物理地址=段地址*16+偏移地址

    2.8 段的概念

    上面提到”段地址“,其实内存并没有段,段的划分来自CPU,所以可以用分段的方法来管理内存。因此一个段的起始地址一定是16的倍数。

    CPU可以用不同的段地址和偏移地址形成同一个物理地址。

    偏移地址是16位,仅用偏移地址寻址可以寻64KB个存储单元。

    2.9 段寄存器

    之前提到段地址,现在说一下什么部件提供段地址。段地址存放在段地址寄存器中,8086CPU有4个段地址寄存器:CS, DS, SS, ES。本课本只介绍CS。

    2.10 CS 和 IP

    CS为段地址寄存器,IP为指令指针寄存器(内容作为偏移地址),任意时刻,CPU将CS:IP指向的内容当作指令执行。

    执行顺序:

    1. CS, IP的值送入地址加法器
    2. CS:IP的值进入输入输出控制电路,然后进入 20位地址总线
    3. 内存中的数据从数据总线进入CPU,然后再指令缓冲器中暂存
    4. IP的值+所读取指令的长度,以使CPU可以读取下一条指令
    5. 执行控制器执行指令缓冲器中的指令

    之前说过,数据和指令没有区别,都是二进制信息。CPU是将CS:IP指向的内存单元的内容看成指令。

    2.11 修改CS, IP的指令

    一个最简单的可以修改CS, IP的指令:jmp指令。

    jmp 段地址:偏移地址jmp 2AE3:3

    若想仅修改IP的内容,可以用指令 jmp 某一合法寄存器完成:jmp ax

    ax=1000H, CS=2000H, IP=0003H -> CS=2000H, IP=1000H
    

    2.12 代码段

    编程时,将一段代码当成代码段,那么如何使代码段中的指令被执行呢?只需要使CS:IP指向代码段的首地址。

    实验1

    Debug的使用

    【直接看书吧,这一节搭配图片看很容易看懂,对于后面的实验也很重要】

    使用Debug,可以查看CPU中各种寄存器的内容、内存的情况和再机器码级跟踪程序的运行。

    Debug的R命令:查看、改变CPU寄存器的内容

    -r 可以查看所有寄存器的内容
    -r ax要改变ax中的值,enter后会出现冒号,在后面输入要写入的数据再enter即可完成寄存器ax寄存器中值的修改。
    

    Debug的D命令:查看内存中的内容

    Debug的E命令:改写内存中的内容

    Debug的T命令:执行一条机器指令

    Debug是DOS方式下的程序,在windows中进入的是虚拟8086模式的DOS。

  • 相关阅读:
    ES自身支持容灾异地容灾么?生产环境如何实施?
    Redis集群详解
    原生js实现jquery的ajax
    用原生js实现jquery的一些方法
    原生javascript的一些常用方法
    原生javascript
    理解和熟练运用call和apply
    做项目过程中的css reset
    深入理解javascript编程中的同步和异步
    history.back(-1)和history.go(-1)的区别
  • 原文地址:https://www.cnblogs.com/peekapoooo/p/14166058.html
Copyright © 2011-2022 走看看