首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

初学汇编,问个cpu与对外芯片的有关问题

2013-10-15 
初学汇编,问个cpu与对外芯片的问题初学汇编,看的是王爽的《汇编语言》刚开始看第一章,讲到总线有地址总线,数

初学汇编,问个cpu与对外芯片的问题
初学汇编,看的是王爽的《汇编语言》刚开始看第一章,讲到总线有地址总线,数据总线,控制总线,第一章讲的都是从内存中取数据,就是说只讲了从内存中取数据,因为计算机可能还有显卡的显存之类,
我想问的是用汇编语言来取数据时候,是不是要先指定从哪个芯片取?比如是内存还是显存。
然后 这三种总线都是针对内存来说的吗?还是说cpu对外的芯片都有这3种总线呢?
[解决办法]
是的,cs:eip就是间接的指定从哪个芯片读取,这三个总线是针对内存来说的(粗略理解),并且芯片都是与这三个总线连在一块儿的,地址总线是反应cpu的寻址能力,控制总线就是控制读写,数据总线传数据的,其中地址总线跟控制总线都是为数据总线服务的
[解决办法]

引用:
Quote: 引用:

是的,cs:eip就是间接的指定从哪个芯片读取,这三个总线是针对内存来说的(粗略理解),并且芯片都是与这三个总线连在一块儿的,地址总线是反应cpu的寻址能力,控制总线就是控制读写,数据总线传数据的,其中地址总线跟控制总线都是为数据总线服务的


有个新问题,如果地址总线的宽度是16,那么它的寻址能力是多少啊,这个寻址能力指的是啥?


以16位的CPU来说,地址总线长度为一共有20位,由0x00000-0xFFFFF,其中0x00000-0x9FFFF是分给RAM就是我们所说的内存,而高地址从0xA0000-0xFFFFF一般是分给外部操作的IO设备用的,为什么要这么用呢,是因为效率的问题,这样对IO的操作不用通过in和out命令来操控直接操控内存就可以把对应的数值读入或写出,例如显存B700:0000到B700:FFFF就是20位地址的B7000-C6FFF,这段地址是分配给显存的用来让CPU直接操作显卡就像读写内存一样,但是随着CPU的改变由16位到32位地址已经远远超过了1M所以我们现在使用的32位CPU内存地址虽然在0x0000 0000 - 0xFFFF FFFF 但是能使用的却不够4GByte,而且RAM地址不是连续的,就好像显存就给RAM地址应生生的分开了,内存地址并不都分给RAM(内存)有些也分给ROM(就是我们常说的外部设备)。
16位的地址总线寻址能力在0x0000-0xFFFF 就是64KByte,但是intel的16位cpu的寻址能力却是1MByte因为Intel使用的是20位地址总线。寻址能力就是指最多可以由多大的内存,16位地址总线=2^16=2^6*1026=64*1024。

热点排行