《汇编语言》– 基础知识和寄存器

好久没用在博客写笔记了,从今天开始我打算从新在博客把自己学习的一些东西重新温习一遍,如有不对的地方还请大家指出!

先从王爽的《汇编语言》开始吧。

基础知识

 

①:在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。总线从屋里上来讲,就是一根根导线的集合。根据传送信息的不同,总线从逻辑上又分为3类:地址总线、控制总线和数据总线。

CPU从3号单元中读取数据的过程如下:

image

 

②:一个CPU有N根地址线,则可以说这个CPU的总线宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。

 

③:数据总线的宽度决定了CPU和外界的数据传送速度。8088CPU的数据总线宽度为8,,8086CPU的数据总线宽度为16.

image

 

④:内存地址空间:一个CPU的地址总线宽度为10,那么可以寻址1024个内存单元,这1024个可寻到的内存单元就构成这个CPU的内存地址空间。

 

⑤:存储器从读写属性上看分为2类:随机存储器(RAM)和只读存储器(ROM)。随机存储器可读可写,但必须带电存储,关机后存储的内容丢失;只读存储器只能读取不能写入,关机后其中的内容不丢失。

 

⑥:CPU将系统中各类存储器其看做一个逻辑存储器 ,也就是说CPU在操控他们的时候,把它们都当做内存来对待,把它们总的看做一个由若干存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间。所有的屋里存储器被看作一个由若干存储单元组成的逻辑存储器,每个物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间。CPU在这段地址空间中读写数据,实际上就是在相对应的屋里存储器中读写数据。

image

 

⑦:内存地址空间大小受CPU地址总线宽度限制。80386CPU的地址总线宽度为32,则内存地址空间最大为2的32次方即4GB。

 

寄存器

 

①:不同的CPU,寄存器的个数、结构是不同的。8086CPU所有的寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX这四个寄存器通常用来存放一般性的数据,被称为通用寄存器。为了保证兼容性,8086CPU的AX、BX、CX、DX这个四个寄存器都可以分为两个可独立使用的8位寄存器来使用。

AX可分为AH和AL,而AH和AL这个两个寄存器是互不相关的。

 

②:字节:记为byte,一个字节由8个bit组成,可以存在8位寄存器中。

            字:记为word,一个字由两个字节组成,这两个字节分别称为这个字的高位字节和低位字节。

 

③:在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的。

 

④:8086CPU有20位地址总线,可以传送20位地址,达到1 MB的寻址能力。8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。

image

如图2.6所示,当8086CPU要读写内存时:
(1) CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;

(2) 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;

(3) 地址加法器将两个16位地址合成为一个20位的物理地址;
(4) 地址加法器通过内部总线将20位物理地址送入输入输出控制电路;

(5) 输入输出控制电路将20位物理地址送上地址总线;

(6) 20位物理地址被地址总线传送到存储器。

地址加法器采用物理地址=段地址×16+偏移地址的方法用段地址和偏移地址合成物理地址。

 

⑤:8086CPU有4个段寄存器:CS、DS、SS、ES。

CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器,也可以这样表述:8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。

8086CPU的工作过程可以简要描述如下: 
(1) 从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;

(2) IP=IP+所读取指令的长度,从而指向下一条指令;

(3) 执行指令。转到步骤(1),重复这个过程。

 

⑥:8086CPU大部分寄存器的值,都可以用mov指令来改变,mov指令被称为传送指令。但是,mov指令不能用于设置CS、IP的值,原因很简单,因为8086CPU没有提供这样的功能。8086CPU为CS、IP提供了另外的指令来改变它们的值。能够改变CS、IP的内容的指令被统称为转移指令(我们以后会深入介绍)。我们现在介绍一个最简单的可以修改CS、IP的指令:jmp指令。 
若想同时修改CS、IP的内容,可用指令“jmp 段地址:偏移地址”完成,如: 
jmp 2AE3:3,执行后:CS=2AE3H,IP=0003H,CPU将从2AE33H处读取指令。
jmp 3:0B16,执行后:CS=0003H,IP=0B16H,CPU将从00B46H处读取指令。
jmp 段地址:偏移地址  指令的功能为:用指令中给出的段地址修改CS,偏移地址修改IP。 
若想仅修改IP的内容,可用指令“jmp 某一合法寄存器”完成,如: 
jmp ax,指令执行前:ax=1000H,CS=2000H,IP=0003H
jmp ax,指令执行后:ax=1000H,CS=2000H,IP=1000H 
jmp bx,指令执行前:bx=0B16H,CS=2000H,IP=0003H jmp ax,指令执行后:ax=0B16H,CS=2000H,IP=0B16H
指令“jmp 某一合法寄存器”的功能为:用寄存器中的值修改IP。

 

⑦:Debug的使用:

查看、修改CPU中寄存器的内容:R命令  R+寄存器名

查看内存中的内容:D命令  D 段地址:偏移地址 或 D 段地址:起始偏移地址 结束偏移地址
修改内存中的内容:E命令(可以写入数据、指令,在内存中,它们实际上没有区别)  E 起始地址 + 数据

将内存中的内容解释为机器指令和对应的汇编指令:U命令  U段地址:偏移地址

执行CS:IP指向的内存单元处的指令:T命令

以汇编指令的形式向内存中写入指令:A命令 A 段地址:偏移地址

本文链接:http://www.alonemonkey.com/masm-chapter12.html

一条评论

  1. 郑堉钦

    总结得不错

Comments are closed.