• 汇编语言——王爽版 总结


    汇编语言-王爽summary《考试复习版》

    摆烂一学期,期末抱佛脚


    只针对必要内容总结,并非按目录总结


    前言

    根据章节进行总结,有可能会考的知识点,针对知识点进行总结。速成了解语法和大致原理。这本书十分注重实践,当然知识点也很多,讲的通俗易懂,基本看一遍就知道基本原理,小白也可以很好的去读懂。强烈推荐、


    一、基础知识

    学习之前必要的知识,讲述一些原理,在计算机组成中也有涉及,要融会贯通。

    汇编语言的组成

    • 汇编指令:机器码的助记符。有对应的机器码
    • 伪指令:没有机器码,由编译器执行。计算机并不执行。
    • 其他符号:如+、-、*、等,编译器执行,没有对应的机器码、

    存储器

    • 指令和数据在存储器中存放,也就是内存。

    指令和数据

    CUP在工作时把有的信息当做指令,有的信息当做数据。为同样的信息赋予了不同的意义。
    也可以说成,意义的二进制字符串。对于cpu来说,可能会有不用的意义。

    存储单元

    存储单元从0 开始进行编号。
    八个bit组成一个Byte ,也就是说八二进制位构成一个字节。
    微型存储去机中 字节 是最小的单位,拥有128个存储单元的存储器,可以说是容量有128个字节。

    CPU对于存储器的读写

    存储器被划分为多个存储单元,从零开始进行编号。
    CPU在内存中读取数据,要指定存储单元的地址,CPU想要进行数据的读写,是和外部器件进行信息的交互、

    • 存储单元的地址。(地址信息)
    • 器件的选择。读写的命令,(控制信息)
    • 读或写的数据(数据信息)
      在计算机中有专门链接CPU和其他芯片的导线,通常称为总线,总线在逻辑上分为三类
    • 地址总线
    • 控制总线
    • 数据总线
      在这里插入图片描述

    数据总线

    在这里插入图片描述

    • 地址总线的位数访问存储的大小有关。
    • 访问2的n次方的存储单元,有n根地址总线。
      在这里插入图片描述

    数据总线

    在这里插入图片描述

    • 数据总线的位数,与传输速度有关。
      在这里插入图片描述在这里插入图片描述

    控制总线

    • 有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制,所以,控制总线的宽度决定了CPU对于外部器件的控制能力
      ![在这里插入图片描述](https://img-blog.csdnimg.cn/857663699a2a499a89cc32a0711e1211.![在这里入图片描述](https://img-blog.csdnimg.cn/247324c3c5a54e9fb54af250ee88f95d.pn在这里插入图片描述
      在这里插入图片描述

    主板

    在这里插入图片描述

    接口卡

    在这里插入图片描述

    各类存储器芯片

    在这里插入图片描述

    内存地址空间

    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    二、寄存器

    • CPU 是由 运算器 ,控制器, 和寄存器构成,内部总线连接。内部总线实现CPU内部的各个部件的联系,外部总线实现CPU和主板上的其他器件的联系。
    • 运算器进行信息处理
    • 寄存器进行信息存储
    • 控制器控制各种器件进行工作、
    • 内部总线连接各自器件,在他们之间进行数据的传送。

    在这里插入图片描述

    2.1通用寄存器

    在这里插入图片描述* 16位寄存器可以分为两个独立的8位寄存器来用。
    在这里插入图片描述

    • 字节:记为 Byte 一个字节有8个bit组成。可以存在8位寄存器中。
    • 字: 记为word ,一个字由 两个字节组成 ,两个字节分别称为高字节和低字节。
      在这里插入图片描述

    16位结构的CPU

    8086cpu 是16位机。

    • 运算器一次最多可以处理16位的数据、
    • 寄存器的最大宽度位16位
    • 寄存器和运算器之间的通路位16位
    • 8086内部,能够一次性处理,传输,暂时存储的信息的最大长度是16位。

    8086给出物理地址的方法

    8086内部有20根地址线,可以传送20位地址,有1MB的寻址能力。
    但是8086在内部暂存的地址有16位,只能表现出64kB的寻址能力。
    在8086内部采用一种在内部用两个16位地址合成的防风来形成一个20位的物理地址。
    在这里插入图片描述

    • 物理地址 = 段地址*16 + 偏移地址。
      在这里插入图片描述
      8086的寻址方式是 基础地址 + 偏移地址 = 物理地址

    段地址

    段地址并不是指 内存被划分为一段一段的,内存并没有分段,段的划分来自于CPU
    对于8086来说,CPU 的寻址方式是 段地址*16 + 偏移地址 = 物理地址、
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    CPU 可以用不同的段地址和偏移地址形成同一个物理地址。

    段寄存器

    • 段地址在8086 上的段寄存器存放,8086有四个段寄存器。 CS,DS, SS, ES,
    • CS 为代码段寄存器,IP 为指令指针寄存器。设CS 中的内容为M,IP中的内容为N ,8086 从 M*16+N 的单元开始,读取一条指令并且执行。CS 也叫做代码基址寄存器。
      8086 工作时的过程如下:
      在这里插入图片描述
    • 代码段:CPU 认为CS:IP 指向内存单元中的内容为指令,所以要想叫CPU执行指令的,必须要CS:IP 指向指令的第一条地址。

    三、寄存器(内存访问)

    在这里插入图片描述
    字单元 :存放一个字型数据16位的内存单元,由两个地址存放的内存单元组成,高地址的内存单元中存放高位字节,低地址的内存单元存放低位字节。
    任何两个连续地址的内存单元。N号单元和N+1号单元,可以看成两个内存单元,也可以看成一个地址位N的字单元中的高位字节和低位字节。

    • DS 段寄存器 存放数据的段地址。
      在这里插入图片描述
      8086 自动 将 ds 中的数据为内存单元的段地址、
      8086 不支持将数据直接送入段寄存器中,只好用一个寄存器来进行中转。

    mov add sub 指令

    mov:
    在这里插入图片描述
    在这里插入图片描述

    • 小结
      在这里插入图片描述
      在这里插入图片描述

    栈段

    • 栈是一种具有特殊的访问方式的存储空间,特殊性在于 最后进入空间的数据,最先出去。
    • 栈有两个操作,出栈 POP 和入栈PUSH 。
    • PUSH ax 是将ax 中的数据送入栈中, POP ax 是将栈中的数据取出,放到ax 中。
    • 8086 中的入栈和出栈是以 为单位的。 字单位是用两个单元存放,高地址存高八位,低地址存低八位。
    • 对于栈的使用,CPU中有两个寄存器, 一个是段寄存器SS, 和寄存器SP ,栈顶的段地址存放在SS 中。偏移地址存在SP 中,任意时刻, SS:SP 指向 栈顶元素。 PUSH 和POP执行时,CPU从SS 和SP 中得到栈顶的地址。
    • 在这里插入图片描述
    • 入栈时 ,栈顶从高地址向低地址方向增长
    • 即为SP 指针减小。
      在这里插入图片描述
      在这里插入图片描述
    • 入栈时 ,栈顶从低地址向高地址方向变化
    • 即为 SP 指针增加
    • 8086CPU机器不考虑 栈顶超界 的为题,只考虑当前的情况,当前的栈顶在何处,当前要执行的指令是哪一条。
    • 可以自己定义堆栈段。 在任意时刻,SS:SP 指向栈顶元素,当栈为空的时候,栈中没有元素,也就不存在栈顶元素,所以SS:SP 只能指向栈的最底部单元的下面的单元,该单元的地址为栈的最下面的单元。该单元的地址为栈的最底部的字单元的地址+2 , 栈的最底部单元的地址为1000:FFFE
      所以栈为空 SP = 0000H

    五、BX 和LOOP

    • bx和ax 作用类似。都是寄存器。
    • loop 是循环的意思,cx 用来表示循环的次数,每次调用loop,cx = cx -1
    • 调用loop的代码
    • 在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    段前缀

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    六、包含多个段的程序

    • 程序缺德所需空间的方法有两种,一是在加载诚信的时候为程序分配,再就是在执行的过程中向系统申请。
    • 定义数据段时, 使用dw 即为define word 即为定义数据。

    在这里插入图片描述
    在这里插入图片描述

    七、更灵活的定位内存地址的方法

    • [bx + idata ]
      在这里插入图片描述在这里插入图片描述
    • SI 和 DI
    • 在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在需要暂存数据的时候,都要应该使用栈,

    数据处理的两个基本问题

    寻址方式

    在这里插入图片描述

    div 指令

    在这里插入图片描述

    dup

    在这里插入图片描述

    九、转移指令的原理

    在这里插入图片描述

    • offset 取得标号的偏移地址
      在这里插入图片描述

    jmp 指令

    在这里插入图片描述

    jcxz 指令

    在这里插入图片描述

    loop 指令

    在这里插入图片描述

    十、call 和ret 指令

    在这里插入图片描述

    • call 用于跳转,修改IP ,
    • **ret ** 用于返回,修改IP。

    ret and retf

    在这里插入图片描述
    在这里插入图片描述

    call

    在这里插入图片描述

    call 和 ret 配合使用

    在这里插入图片描述

    mul 指令

    • 乘法指令
      在这里插入图片描述

    参数和结果传递的问题

    在这里插入图片描述

    • 在调用子程序的时候,如果在子程序中使用的寄存器和在主程序中的寄存器相同,就会在调用子程序的对寄存器中的内容进行更改,所以在有寄存器冲突的时候要使用栈来临时保存寄存器中的数据,然后在子程序使用完成后,弹出保存。

    十一、标志寄存器

    在这里插入图片描述

    • ZF 标志,0标志位,记录执行相关指令后,结果是否位0 ,如果为0,那么zf = 1;如果不为0 ,zf = 0;
    • PF 标志, 偶标志位,执行相关指令后,如果结果中的bit 位1 的个数是否位偶数,如果1 个数位偶数,PF 位1 ,如果为奇数。PF = 0 ;
    • SF标志 符号标志位,执行指令后,如果结果符号位负数,那么SF = 1 ,如果为整数,SF = 0 ;
    • CF标志 进位标志,如果结果向高位进位, CF 为1 反之为 0
    • OF 溢出标志位,如果符号数运算出现溢出,那么为1 ,反之为 0;

    abc 指令

    在这里插入图片描述

    sbb指令

    在这里插入图片描述

    CMP 指令

    在这里插入图片描述

    检测比较结果的条件转移指令

    在这里插入图片描述

    十二、内中断

    在这里插入图片描述

    • 内中断,是当CPU 内部出现某些事情的时候,需要先去处理中断事件,产生相应的中断信息。
    • 当程序出现中断时,会调用中断处理程序。相当于去调用一种特殊的子程序、

    中断过程

    在这里插入图片描述

    十三、由int 指令引发的中断

    在这里插入图片描述

    十四、端口

    在这里插入图片描述

    • 端口的读写指令有两条
    • in 和 out
    • 在这里插入图片描述

    总结

    字数太多了,敲一半就不想巧了,自己过一遍吧,有能力还是好好看原书,很好理解原理

  • 相关阅读:
    ArcGIS矢量化并进行拓扑检查
    springboot环境下Shiro+Token+Redis安全认证方案
    金山云回港上市:中国TO B云厂商的港股奔袭
    <Rust><iced>基于rust使用iced库构建GUI实例:图片的格式转换程序
    记录一下nginx配置文件grpc负载均衡
    蓝桥杯的一些技巧
    C# XML基础入门(XML文件内容增删改查清)
    【Rust】4 一文讲解重点 pattern matching | trait | 生命周期 | 闭包 | 迭代器 | 智能指针 | 并发与并行
    Golang标准库限流器rate使用
    df -h 没有反应的原因
  • 原文地址:https://blog.csdn.net/qq_52582190/article/details/128111359