汇编网首页登录博客注册
byzero的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
好友圈
文章收藏
友情链接

[2010-07-06 23:26] 汇编语言——第二天

1.寄存器
    一个典型的CPU由运算器(信息处理)、控制器(控制各种期间进行工作)、寄存器(信息处理)等器

件构成,这些器件靠内部总线相连,在它们之间进行数据的传送。
    对于汇编程序员,CPU的主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。通过改变

各种寄存器中的内容来实现对CPU的控制。
    不同的CPU,寄存器的个数、结构是不相同的。
2.通用寄存器。
    AX(Accumulator)、BX(Base)、CX(Count)、DX(Data)被成为通用寄存器,用来存放一般行的数据。
    AX、BX、CX、DX都可分为两个独立使用的8位寄存器 如果AX可分为AH(High)、AL(low)其他相似。。
想一想,一个16位寄存器可所能存储的数据的最大值为多少? (2^16-1=65535 或者1111 1111 1111 

1111B=65535D)
想一想,一个8位寄存器所能存储的数据的最大值为多少?(与上面相同,2^8-1=255 或1111 1111B=255D



3.字在寄存器中的存储
一个字节(Byte)我由8bit组成,可以存在8位寄存器中。两个字节可以组成一个字(word),这两个字节

分别为这个字的高位字节和地位字节。
4.几条汇编指令
MOV、ADD。。
al作为独立的8位寄存器来使用时,和ah没有关系,CPU在执行如add al,58H命令时,认为ah和al是两个不

相关的寄存器。
在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的。 如 mov al,20000 (8位寄

存器最大可存放值为255的数据)
[在这里本来是有点疑惑,上面不是说超出的最高位会丢失么?为什么这个不行?后来再重新理解了下,如

文中ax本来数据为00C5H,再下一个命令add al,93H执行后,ax中的数据是:0058H而不是0158H(在这条指

令中al作为独立寄存器,与ah没有关系,最高位的1丢失,但不是真的丢弃这个值),原来是因为add指令

的操作对象al和93H的位数是对应的,而al与20000的位数不对应,故不行。]
5.物理地址
所有的内存单元构的存储空间是一个一位的线性空间,每一个内存单元在这个空间中都有唯一的地址,我

们将这个唯一的地址称为物理地址。CPU通过地址总线送入存储器的,必须是一个内存单元的物理地址。在

CPU相地址总线上发出物理地址之前,必须要在内部先形成这个物理地址。不同的CPU可以有不同的形成物

理地址的方式。
6.16位结构的CPU
16位机构描述了CPU具有一下几方面的结构特性。
(1)运算器一次最多可以处理16位的数据;
(2)寄存器的最大宽度为16位;
(3)寄存器和运算器之间的通路为16位。
内存单元的地址再送上地址总线之前,必须在CPU中处理、传输、暂时存放,对于16位CPU,能一次性处理

、传输、暂时存储16位的地址。
7.8086CPU给出物理地址的方法
8086CPU有20位地址总线,可以传送20位地址,达到1MB寻址能力。但8086CPU又是16位结构,从其内部结构

上看,如果将地址从内部简单地发出,那么它只能送出16位地址,表现出的寻址能力为64KB。所以,

8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。
7.8086CPU给出物理地址的方法
当8086CPU要读写内存时,CPU的相关组件提供两个16为地址,即段地址和偏移地址,再通过内部总线送入

地址加法器,由地址加法器将两个16位地址合为20位的物理地址,并通过输入输出控制电路将物理地址送

上地址总线,再由地址总线传入存储器。
地址加法器采用 [物理地址=段地址*16+偏移地址] 的方法合成物理地址
关于段地址*16:常用说法为“左移4位”,其中的位,指的是二进制位;一个X进制的数据左移1位,相当

于乘于X。
8.“段地址*16+偏移地址=物理地址”的本质含义
本质含义:CPU在访问内存是,用一个基础地址(段地址*16)和一个相对于基础地质的偏移地址相加,给

出内存单元的物理地址。
一般的说,8086CPU的这种寻址功能是“基础地址+偏移地址=物理地址”寻址模式的一种具体实现方案。

8086CPU中,段地址*16可看作是基础地址。
9.段的概念
内存并没有分段,段的划分来自于CPU,由于8086CPU用“基础地址(段地址*16)+偏移地址=物理地址”的

方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。
用段地址*16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。有亮点需要注意:段地址

*16必然是16的倍数,所以一个短的起始地址也一定是16的倍数;偏移地址为16位,16位地址的寻址能力为

64KB,所以一个段的长度最大为64KB.

CPU可以用不同的段地址和便宜地址形成同一个物理地址。
评论次数(1)  |  浏览次数(1384)  |  类型(汇编笔记) |  收藏此文  | 

[  jiyang   发表于  2010-11-13 23:32  ]

打基础,继续努力!

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码