❶ 为什么说SDRAM加载模式寄存器是一个8位的操作
计算机当前主要有三种内存,它们分别是:SDRAM(Synchronous Dynamic RAM),DDR-SDRAM(Double Data Rate SDRAM)以及RDRAM(RAMBUS Dynamic RAM)。这篇文章将详细讨论这三种内存,注意当前市场的主流内存DDR-SDRAM已经又划分出若干版本(如DDR-II或GDDR3),这里只是统一介绍DDR-SDRAM的特点。 SDRAM(同步动态随机存取存储器) SDRAM是早期内存EDO(Extended Data Output)DRAM内存的改进版本。EDO常见于486或老奔系统上面,其主要缺点在于内存频率和系统频率不一致(不同步),这样将随机出现延迟和等待状态(处理器等待内存传输可用的数据),因此对系统的整体性能影响巨大。SDRAM初始频率为66MHz,这和当时的系统频率相一致。同步的好处显而易见,能够消除不必要的等待时间,尽量保证系统稳定高速的运行。除此之外SDRAM还能够在一个时钟周期之内完成数据存储请求和取回操作,并且能够在下一个时钟周期内准备好数据的传输和接收工作。 DDR-SDRAM(Double Data SDRAM)在SDRAM规格之后,DDR-SDRAM的出现又是一次技术的进步。随着处理器时钟频率和前端总线频率的飞速提升,处理器在一段时间内能够处理的数据总量变得越来越巨大。例如当前的INTEL和AMD的主力产品Pentium 4和Athlon XP的运算速度已经达到了每秒数十亿次的惊人程度。仅仅从芯片的时钟频率看,处理器的性能已经非常了不起了,但由于有限的内存带宽,系统整体性能仍然受到了局限,因此传统的SDRAM内存已经不能够满足新处理器对数据的需求。 DDR-SDRAM在原有的SDRAM基础上使每一个时钟周期输出的数据变为两倍,相当于达到了同频率的SDRAM的最大理论带宽的两倍,从而极大地提升了原本紧缺的内存带宽。DDR-SDRAM输送和接受的数据都明显要多于SDRAM。这对于当前的Athlon XP和Pentium4来说是最合适的搭配了,为了适应不同总线频率的处理器,DDR-SDRAM也衍生出多种不同速率的内存模块。 DDR-SDRAM采用184针DIMM模块,目前主要有以下几种速率:PC1600(200MHz),PC2100(266MHz),PC2700(333MHz),PC3200(400MHz),PC3500(433MHz),PC3700(466MHz),PC400(500MHz),PC4200(533MHz)和PC4400(566MHz)。名称中的第一个数字,如“PC2100”意为此内存模块的最大带宽,也就是每秒最大能够提供多少MB的数据。后面的MHz是此内存运行时的时钟速率。单根DDR-SDRAM的容量从64MB到2GB不等。 RDRAM(RAMBUS Dynamic RAM) RDRAM在现在的桌面PC市场上面已经基本绝迹。和DDR-SDRAM不同,RDRAM是一种专利内存标准,由RAMBUS开发研制成功。在1998年RDRAM第一次通过INTEL的鼎力协助进入桌面电脑市场,和高端的Pentium III以及早期的Pentium 4捆绑销售。不过遗憾的是,RAMBUS很快便因为内存技术专利费用的问题卷入了与英飞凌和现代等众多内存生产商的一系列官司纠纷中。由于RAMBUS对RDRAM技术收取专利费用,导致RDRAM价格昂贵,从而抑制了Pentium 4市场的销售,引发了INTEL的不满。再加上一系列的官司让众多内存生产商联合起来抵制RDRAM,转而生产DDR-SDRAM,让RDRAM失去了占领家庭用户和PC发烧友市场最好的机会。
❷ 学过编译原理的人看c\c++跟没学过的人比起来,有什么长处
一般来讲...没学过C\C++就跟编程文盲差不多...C\C++是基础,在这之上才能看很多.包括数据结构和算法(用汇编实在难以描述),或者学习其他编程语言.
让我难以理解的是,学习编译原理应该需要学习数据结构,但是楼主又没有学过C\C++,又是怎么学会数据结构进而理解编译原理??我很纳闷....楼主有无写过一个简单的编译器?纯汇编是很难写编译器的,在编译器的词法分析,语法分析,语义分析,中间代码等都基本用C\C++写,只有当要生成特定的CPU汇编指令的时候需要用汇编语言.
学习操作系统基本不需要过多编译原理的知识,只需要 汇编+C语言+数据结构和算法基础,基本就可以了.
附加一段:楼主好像对编译原理的理解有所偏差.编译原理主要是讲解编译器的构造,而汇编语言应该属于一种编程语言,和C\C++一样可以应用于很多场合.编译器原理就是如何把高级语言转换为低级语言的过程.
一般操作系统使用 汇编语言+C语言写成.(以下是Intel IA-32平台机器的一般开机过程)在计算机启动时,操作系统从汇编代码开始运行,因为这时处于实模式状态,也没有操作系统,因此首先启动BIOS程序,然后CPU通过编译好的汇编代码从实模式转入保护模式.接着逐步把PC的控制权交给操作系统内核,当内核启动后,由于有了操作系统的支持,此时的机器就可以通过高级语言编译好的代码(比如C语言)来管理PC的所有资源.因此,学习操作系统必须有汇编语言和C语言基础.不然例如进程调度和控制等这种核心问题是不可能看的懂的.
❸ 怎么理解汇编中SP寄存器的出栈压栈
类似于山洞探险,怎么进去,还要怎么出来。
脑子里面,就要记住走过的路。
退出时,后记忆的,应该先想起来。
程序,也是这样,子程序套子程序,子程序再套子程序,怎么才回到主程序?
就必须使用堆栈来保存历史信息。
❹ 有一个寄存器压栈是什么体验
子程序套子程序,子程序再套子程序,怎么才回到主程序?就必须使用堆栈来保存历史信息。很麻烦。
❺ 栈与寄存器的关系
ss:stack segment(段寄存器)
ESP:栈顶指针寄存器
EBP:栈底指针寄存器。
学过汇编语言就知道了,寄存器是CPU的组成部分。他们告诉CPU线程的栈在内存的什么地方,也就是地址。
❻ 汇编语言中在程序开头为什么要寄存器入栈,求详细解释一下,谢谢
如果程序要调用或者响应中断的话,要将寄存器,标志位等压栈,这是为了保护现场,方便调用或中断响应结束后继续执行原程序。你可以根据程序来具体分析。
❼ 16位CPU在进行堆栈操作时,分别用到的寄存器有哪些
了解CPU,是为了便于我们今后对单片机软件的编程有一个方向性的把握,我们可以更好的知道程序在执行过程中,它的每一段代码在干着一件什么样的事,它的时序是什么样的,从而提升我们对CPU更有效的利用。
对于stm8单片机的CPU,它有六个寄存器,我们需要了解里面有着重要功能的几个(直接和我们写代码相关联),知道它们的作用。
1.累加器:A。8位通用目的寄存器,用于算术运算、逻辑运算以及数据操作的操作数及结果。
2.索引寄存器(X和Y)。16位,用于寻址,也可用作数据操作的暂存器以及用于像乘除法这样的操作。
3.程序计数器(PC)。24位,用于存储CPU下一条要执行指令的地址。
图1 CPU的寄存器
4.堆栈指针(SP)。16位,用于在中断调用或子程序调用时存储CPU的上下文(程序计数器,关键寄存器,相关函数的参数及局部变量,等等)。下图显示了入栈出栈顺序。
图2 入栈出栈顺序
如果我们自己在相应软件下写代码进行debug模式时,可以看到CPU中各寄存器的运行状况,这是一个参考了。
最后,我们了解CPU的一个不常用的寄存器:CFG_GCR(是否我们想使用其SWIM功能)。通常我们使用SWIM功能用于下载程序使用。如果我们恰好想要使用其IO口模式,可以在此处配置。
❽ 汇编中,进栈出栈对栈指针寄存器值的影响,对出栈寄存器值的影响。
对于windows这种向下生长的堆栈
进栈
则ESP减
出栈则ESP加
向上生长的堆栈则反过来
❾ 堆栈寻址方式中,设A为通用寄存器,SP为堆栈指示器
选A,先把栈顶单元放入通用寄存器A,再增加堆栈指针。
❿ 关于编译原理,堆栈,变量存储相关的一个问题,请高手释疑
是这样的, scanf是一个函数(该函数已经定义了),而“scanf()”这就话就是如何使用该函数的。
到你知道什么是函数的时候你就懂了。
就像数学中y=f(x) 函数,例如:y=2*x 。
当你设置一个x的值后,你就可以通过该函数获取对应的y值。