zoukankan      html  css  js  c++  java
  • 汇编语言学习 基础知识

           汇编语言是除了机器语言我们能操纵的最底层的语言了,汇编语言是所有语言中效率最高的一种语言,很多的驱动,很多的嵌入式的都是用汇编语言写的,当然也有用C语言那写的,C语言是比汇编语言高级,学会了汇编语言,对底层有一个大概的了解,知道CPU和内存和各种各样的硬件他是如何的配合的,如何地读取信息的,在学习高级语言的话会更加的得心应手,用机器的思维去操作计算机,这是编程里面一个非常高的进阶,反编译破解一下,在破解的过程中涉及的就是汇编语言,他把C语音变成汇编语言,再变成机器语言,在把他的机器语言发布出来,然后机器与语言和机器语言是一一对应的,直接通过机器语言把他翻译成它对应的机器语言

            汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程,CPU 和 内存  显卡 声卡 都是有内存的。

           1.1机器语言

    机器语言是机器指令的集合,CPU 电脑大脑唯一认可,就是0和1的集合,机器指令展开来讲就是一台机器可以正确执行的命令。

    指令:01010000 (PUSH AH)

    电平脉冲

    早期程序员们将0,1数字编程的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。后来逐渐使用高科技..........但打洞洞是始祖    用了继电器,电子管,晶体管    进制转换  补码

           1.2汇编语言的产生

    汇编语言的主体是汇编指令
    汇编指令和机器指令的差别在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式(因为他便于记忆所以产生了汇编语言)
    汇编指令是机器指令的助记符

    机器指令:1000100111011000
    操作:寄存器BX的内容送到AX中
    汇编指令:MOV AX,BX 汇编语言移动方法
    这样的写法与人类语言接近,便于阅读和记忆

    寄存器:简单的讲是CPU中可以存储数据的器件,一个CPU中有多个寄存器。
    AX是其中一个寄存器的代号
    BX是另一个寄存器的代号

    计算机能读懂的只有机器指令,那么如何让计算机执行程序员用汇编指令编写的程序呢

    1.程序     

    2.汇编指令
    mov ax ,bx

    3.编译器

    4.机器码
    100001000111011000

    5.计算机

              1.3汇编语言的组成

    1.汇编指令(机器码的助记符)

    mov ax,bx   

    2.伪指令(由编译器执行)

    3.其它符号(由编译器识别)

    汇编语言的核心是汇编指令,它决定了汇编语言的特性

    计算机CPU连加减乘除都不会, 只认识1和0,认识的运算符就是逻辑运算符(推荐一本书编码的奥秘)就是CUP是怎么样实现的,继电器的逻辑线路

             1.4存储器

    CPU是计算机的核心部件,他控制整个计算机的运作并进行运算,要想让一个CPU工作,就必须向他提供指令和数据

    CPU是计算机的大脑,核心,心脏
    指令是告诉CPU要怎么做
    数据告诉CPU哪些是被做的,那些是做别人的

    指令和数据在存储器中存放,也就是平时所说的内存

    任何部件都有他的存储器,包括显卡,网卡

    在一台PC机中内存的作用仅次于于CPU

    离开了内存,性能再好的CPU也无法工作 通篇讲CPU怎么样跟内存打交道,怎么样控制内存 CUP读内存比较快,内存读数据比较慢

    磁盘不同于内存,磁盘上的数据或程序,如果不读到内存中,就无法被CPU使用

              1.5指令和数据

    指令和数据是应用上的概念  在内存或磁盘上,指令和数据没有任何区别,都是二进制信息  

    二进制信息:
    1000100111011000
    ——》89D8H(数据)
    1000100111011000
    ——》MOV AX,BX(程序)

    CPU处理的是二进制代码,这些也是指令,也是数据,就是根据我们程序员怎么样对他进行运用的

                1.6存储单元

    存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号  

    例如:
    一个存储器有128个存储单元
    编号从0~127
    如右图示:

    其实GPU的速度笔CPU快多了,三D游戏的要求都很高了

    *不管是什么编程,只要是编号一定是从0开始

    对于大容量的存储器一般还用以下单位来计量容器(以下用B来代表byte)
    1kb=1024b
    1mb=1024kb
    1gb=1024mb
    1tb=1024gb
    磁盘的容量单位同内存的一样,实际上以上单位是微机中常用的计量单位

                    1.7CPU对存储器的读和写

    CPU要想进行数据的读写,必须和外部器件(标准的说法是芯片)进行三类信息交互,

    1.存储单元的地址(地址信息)

    2.器件的选择,读或写命令(控制信息)

    3.读或写的数据(数据信息)

    那CPU是通过什么将地址、数据和控制信息传到存储芯片中的呢

    电子计算机能处理、传输信息都是电信号,电信号当然用导线传送

    在计算机中专门有连接CPU和其它芯片的导线,通常为总线

    物理上:一根根导线的集合;
    逻辑上划分为:
    地址总线
    数据中线
    控制总线

                  1.8地址总线
    CPU通过地址总线来指定存储单元的
    地址总线上能传送多少个不同的信息,CPU就可以对多少个存储单元进行寻址
    达到64位:你需要64位的CPU, 也需要64位的操作系统,要有64位的操作软件,缺一不可
    一个CPU有N根地址总线,则可以说这个CPU的地址总线的宽度为N。
    这样的CPU最多可以寻找2的N次方个存单元。
    64位CUP一次可以走八个字节
    一个字节可以存放多少个位,也就是2的8次方

                   1.9数据总线
    CPU与内存或其它器件之间的数据传输是通过数据总线来进行
    数据总线额宽度决定了CUP和外界的数据传送速度
    数据总线就是一头高速公路,高速公路越大,每次来来回回的车辆越多,你运送的货物越快,这不决定于车的速度,而决定于车的大小
    它们向内存中写入数据89D8H时,是如何通过数据总线传送数据的:
    8088CPU数据总线上的数据传送情况
    每次是传送8位的
    8086CPU数据总线上的数据传送情况
    16位数据总线上传送信息

                  

                    1.10控制总线
    CPU对外部器件的控制是通过控制总线来进行的。在这里控制总线是一个总称,控制总线是一些不同控制线的集合
    宏观上来讲:有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制
    所以控制总线的宽度决定了CPU对外部器件的控制能力,宽度越大越多条控制线,就对越多的端口进行控制
    控制总线发送的控制信息
    前面所讲的内存读或写命令是由几根控制线综合发出来的:
    其中有一根名为读信号输出控制线负责由CPU向外传送读信号,CPU向该控制线上输入低电平表示将要读取数据
    有一根名为写信号输出控制线负责由CPU向外传送写信号

      

     小结
    1.汇编指令是机器指令的助记符,同机器指令一一对应
    用底层的思维来指导自己写出高级优秀的程序
    2.每一种CPU都有自己的汇编指令集
    酷睿 帮助处理图像 处理
    3.CPU可以直接使用的信息在存储器中存放
    CPU要运行必须要有数据交换的场所,就是存储器
    CPU的缓存
    4.在存储器中指令和数据没有任何区别,都是二进制信息
    自由主题
    5.存储单元从0开始顺序编号
    6.一个存储单元可以存储8个bit(用作单位写成“b”),即8位二进制数
    7.1B=8bit 1KB=1024B 1MB=1024KB 1GB=1024MB
    8.每一个CPU芯片都有许多管脚,这些管脚和总线相连。也可以说,这些管脚引出总线。一个CP可以引出三种总线的宽度标志了这个CPU不同的性能
    地址总线的宽度决定了CPU的寻址能力
    数据总线的宽度决定了CPU与其它器件进行数据传送时的一次数据传送量
    控制总线宽度决定了CPU对系统中其它器件的控制能力
    在汇编过程中,我们从功能的角度介绍了这三类总线,对实际连接情况不做讨论

    CPU在内存中读和写的过程


    我们知道CPU是如何进行数据读写的。可是我们如何命令计算机进行数据的读写呢?

    对于8086CPU,下面的机器码能够完成从3号单元读数据
    机器码
    好像在分析老爷车
    含义:从3号单元读取数据送入寄存器AX
    CPU接受这条机器码后将完成上面所述的读写工作

                          1.11内存地址空间(概述)

    什么是内存地址空间呢?
    一个CPU的地址宽度为10,那么可以寻址1024个内存单元,这1024个可寻到的内存单元就构成这个CPU的内存地址空间。下面深入讨论

      

    首先需要介绍两部分基础知识,主板和接口卡
    1.12主板
    在每一台PC机中,都有一个主板,主板上有核心器件和一些主要器件
    这些器件通过总线(地址总线,数据总线,控制总线)相连
    1.13接口卡
    计算机系统中,所有可用程序控制其工作的设备,必须受到CPU的控制
    CPU对外部设备不能直接控制,如显示器,音响,打印机等。直接控制这些设备进行工作的是插在控制槽上的接口卡
    网卡
    接口与网络连接
    显卡
    进口有显示器连接

    1.14各类存储器芯片
    从读写属性上看分为两类
    随机存储器RAM
    只读存储器ROM
    永远只能读,但是数据中
    装有BIOS的ROM
    BIOS:Basic Input/Output System,基本输入输出系统 主板的BIOS
    BIOS是由主板和各类接口卡(如:显卡、网卡等)厂商提供的软件系统,可以通过它利用该硬件设备进行最基本的输入输出。在主板和某些接口卡上插有存储相应BIOS的ROM。
    一个病毒能够杀入BIOS里面去,杀毒软件杀不了了
    从功能和连接上分类
    随机存储器RAM
    装有BIOS的ROM
    接口卡上的RAM
    PC机中各类存储器的逻辑连接情况

    CPU是大脑,存储器是轮子

    上述的那些存储器在物理上是独立的器件
    但是它们在以下两点上相同
    1.都和CPU的总线相连
    2.CPU对它们进行读和写的时候都通过控制线发出内存读写命令

    CUP只能看到主存储器地址空间
    将各类存储器看做一个逻辑存储器

    假设内存地址分配如下
    地址0~7FFFHd的32kb空间为主随机存储器的地址空间;
    地址8000H~9FFFH的8kb空间为显存地址空间
    地址A000H~FFFFH的24kb空间位各个ROM的地址空间
    不同的计算机系统的内存地址空间分配情况是不同的
    8086PC机内存地址空间分配的基本情况
    英特尔 CPU IBM pore CPU 中国 龙 芯的CUP
    8086PC机的内存地址空间分配

    内存地址空间
    最终运行程序的是CPU,我们用汇编编程的时候,必须要从CPU角度考虑清楚
    我们学习这门课程的核心思维

    C++的一个问题
    q=(++j)(++j)(++j);
    先优化一下
    把前面两个当成系数
    先放到DS寄存器,再把它递增一,再把他放回去,递增了两次之后他才来进行相加
    7+7+8
    对于CUP来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,他的容量受CPU寻址能力的限制。这个逻辑存储器即是我们所说的内存地址空间
    目标

  • 相关阅读:
    Logstash配置文件介绍
    ElasticSearch搜索介绍四
    ElasticSearch文档操作介绍三
    ElasticSearch集群介绍二
    ElasticSearch入门介绍一
    Curl中的参数知多少
    sed命令使用介绍(转载)
    实例方法、类方法、静态方法
    函数概述,参数,可变参数,关键字参数,组合参数,递归函数
    startswith()函数与endswith()函数判断文件的开头和结尾
  • 原文地址:https://www.cnblogs.com/mike-mei/p/8622768.html
Copyright © 2011-2022 走看看