汇编_寄存器

#【p26-39】
#寄存器
###一个CPU的器件构成

  • 运算器
    • 运算器进行信息处理
  • 控制器
    • 控制器控制各种器件进行工作
  • 寄存器
    • 寄存器进行信息存储
  • 内部总线(上一讲说的总线是外部总线)
    • 内部总线连接各种器件,在它们之间进行数据的传送
      对一个汇编程序员来说,CPU中的主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。程序员通过改变各种寄存器中的内容来实现对CPU的控制。
      不同的CPU,寄存器的个数,结构是不相同的。

#字:记为word, 一个字通常由一个或多个(一般是字节的整数位)字节构成。

  • 1word = N Btye = 2Nbit
  • 在计算机中,一串数码作为一个整体来处理或运算的,称为一个计算机字,简称字。字通常分为若干个字节(每个字节一般是8位)。在存储器中,通常每个单元存储一个字,因此每个字都是可以寻址的。字的长度用位数来表示。
  • 个字由若干个字节组成,不同的计算机系统的字长是不同的,常见的有8位、16位、32位、64位等,字长越长,计算机一次处理的信息位就越多,精度就越高,字长是计算机性能的一个重要指标。例如286微机的字由2个字节组成,它的字长为16;486微机的字由4个字节组成,它的字长为32位机。
  • 内存存储的最小单元是一个字节。比如在32位系统中一个Int认为它是4个字节,我们在进行传输和内存存取时,如果一个字节一个字节的存很容易把它给存散了,所以我们有的时候会把它四个字节四个字节的来存,把他作为一个为最小整体单元。称为一个字

#物理地址

  • CPU访问内存单元时,要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地址称为物理地址
  • CPU通过地址总线送入存储器的,必须是一个内存单元的物理地址。在CPU向地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。
  • 不同的CPU可以有不同的形成物理地址的方式

#段地址*16+偏移地址=物理地址

  • 段地址*16 = 基础地址
  • 偏移 = 相对于基础地址的偏移地址
  • “段地址*16+偏移地址=物理地址”思想的比喻:
    • 比如,只能通过纸条来互相通信。你问我图书馆离我多少米(2826M),显然,我必须有一张可以容纳4位数据的纸条,才能写下结果。可不巧合的是,我没有能容纳4位数据的纸条,仅两张可以容纳3位数据的纸条。这样我能以这种方式告诉你2826这个数据
    • 200
    • 826
    • 你得到纸条后做这样的运算 200(段地址)+826(偏移地址)=2826(物理地址)
      #段的概念
  • “段地址”这个名称中包含着段的概念。这种说法可能对一些学习者产生了误导,让人误认为内存被划分成了一个一个的段,每一个段有一个段地址。如果我们在一开始形成了这种认识,将影响对汇编语言的深入理解和灵活应用
  • 其实,内存并没有分段,段的划分来自于CPU。可以用"段地址*16+偏移地址=物理地址"的方式给出内存单元的物理地址。
  • 以后,在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址*16定位段的起始地址(基地址),用偏移地址定位段中的内存单元。
  • CPU可以用不同的段地址和偏移地址形成同一个物理地址

#内存单元和内存地址的关系

  • 内存地址就是内存单元的编号,方便访问读写用的。
  • 每个内存单元的地址编号,简称为内存单元地址。

#内存单元是字节单元,则一个字要用两个地址边续的内存单元来存放

  • 0xAA 相当于一个字节 8位,一个内存单元
  • 一个字节是一个内存单元 同时一个字节是8位 也就是一个内存单元既是一个字节也是8个二进制位,1G=1024M 1M=1024K 1K=1024字节 1字节=8位 一位是最基本单位 是一个二进制位 要么是0要么是1
    #字单元
  • 即存放一个字型数据(16位)的内存单元
  • 由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节
  • 任何两个地址连续的内存单元,N号单元和N+1号单元,可以将它们看成两个内存单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元
  • CPU要读写一个内存单元时,必须先给出这个内存单元的地址

#栈

  • 栈是一种具有特殊的访问方式的存储空间。它的特殊性就在于,最后进入这个空间的数据,最先出去 LIFO(Last In First Out)
  • 栈有两个基本操作:入栈和出栈