CN100353335C - 增加处理器中存储器的方法 - Google Patents
增加处理器中存储器的方法 Download PDFInfo
- Publication number
- CN100353335C CN100353335C CNB031085229A CN03108522A CN100353335C CN 100353335 C CN100353335 C CN 100353335C CN B031085229 A CNB031085229 A CN B031085229A CN 03108522 A CN03108522 A CN 03108522A CN 100353335 C CN100353335 C CN 100353335C
- Authority
- CN
- China
- Prior art keywords
- storage
- address
- processor
- data
- read
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Executing Machine-Instructions (AREA)
Abstract
一种增加处理器上的存储器的方法,使得该处理器能存取大于其指令位数所能表达的存储器大小。该处理器上设有一中央处理单元及一固定存储器。该方法包含于该处理器上提供一扩充存储器,使用一地址延伸器以增加位的方式延伸数据地址以及寄存器地址,以及使用一堆栈指针产生器以增加位的方式延伸堆栈地址,在堆栈地址大于该固定存储器的范围时对增加的位产生进位,并将超出该固定存储器的范围的堆栈数据存取于该扩充存储器。
Description
技术领域
本发明涉及一种增加处理器中存储器的方法,特别涉及一种增加处理器中内部数据存储器的堆栈存储器的方法。
背景技术
MCS(Micro Computer System)是Intel公司对微处理器的总称,而其所开发的MCS-31/32及51/52系列的处理器更是普遍地应用在工业界中。一般而言,微处理器只含有少量的存储器以及输入输出点,以MCS-51系列的单芯片为例,它有4K字节的程序存储器、128字节的数据存储器以及32条输入输出点,MCS-52系列的处理器则是将程序存储器增加为8K字节,以及将数据存储器增加为256字节,而MCS-31/32及51/52系列的处理器同样使用一个8位的中央处理单元。程序存储器用来存放使用者所撰写的程序,属于只读存储器(ROM),数据存储器则是随机存取存储器(RAM),可供中央处理单元运作时读取或写入数据,通常是用来当程序执行时暂时存放数据的寄存器。
请参考图1,图1为已知MCS-51系列的处理器其内部数据存储器12的示意图。内部数据存储器12为堆栈存储器、数据存储器及寄存器存储器所共用,堆栈地址、数据地址及寄存器地址都是8位的地址,处理器的中央处理单元所执行的也是8位的指令集,在存取内部数据存储器12时,8位的指令及8位的地址输入一存储器地址产生器14后,输出存储器地址来存取内部数据存储器12。MCS-51系列的处理器其内部数据存储器的容量是128字节,MCS-52系列的处理器其内部数据存储器的容量则是256字节,而MCS-51/52系列的处理器其外部数据存储器同样最大可扩充至64K字节。一般来说,使用者可采用直接定址法或间接定址法来存取内部数据存储器12,直接定址法是将数据存储器其中一个地址的内容取出作运算,并放入寄存器中,而间接定址法是使用寄存器作为指针,再取得该指针内的值。内部数据存储器12可划分下列几个部分,第一,地址00H-1FH为寄存器库,此地址共32字节被分成4个工作寄存器库(Register Bank),每一个寄存器库内含有8个寄存器,寄存器库中的数据可采直接或间接定址法来存取。第二,地址20H-2FH为位定址区,地址20H-2FH共有16字节,也就是128个位,使用者可利用位运算的指令,直接对位定址区中的位做运算。第三,地址30H-7FH为一般用途区,此区域可供使用者规划,通常堆栈(stack)即设在此区域,只要将堆栈指针(stack pointer)指到此区即可。第四,地址80H-FFH亦为一般用途区,此区域只存在于MCS-52系列的处理器中,采用间接定址法来存取数据。
请参考图2,图2为已知内部数据存储器12使用两个堆栈的示意图。内部数据存储器12的使用配置如图所示,一部分作为寄存器及数据的储存,一部分提供堆栈使用。如上所述,通常堆栈会设在内部数据存储器12的一般用途区之中,将堆栈指针指向一般用途区的一个位置作为堆栈的起始位置,这个堆栈通常是用来存放呼叫子程序的程序计数,或者是使用者自定的数据。然而很多程序在呼叫子程序时,可能会需要传参数,这时必须使用另一个堆栈来储存参数,一般都是使用参数指针(parameter pointer)由内部数据存储器12的最高地址开始向下数,由于两个堆栈必须共用有限的存储器空间,所以使用者在设计程序时需注意两个堆栈的使用数量,否则很有可能造成数据的错误。
由上述可知,已知的MCS-51/52系列的处理器仅提供有限的内部数据存储器12,而且堆栈存储器、数据存储器及寄存器存储器必须共用这个内部数据存储器。然而由于系统的发展日益复杂,所需的堆栈存储器与数据存储器都大量的增加,虽然数据存储器12可以利用外部数据存储器来作扩充,但是堆栈存储器的大小却还是受限于处理器所提供的内部数据存储器。由于堆栈存储器的大小受到限制,如此一来,复杂的程序常会有堆栈存储器不够使用的情形发生,因为程序在呼叫子程序时,必须使用堆栈来记录,但是受限于堆栈存储器的大小,程序中便只能呼叫一定数量的子程序,再者,若是子程序中需要传参数,更是需要使用大量的堆栈。然而由于MCS-51/52的指令即为八位长度,在其指令集的限制下,仅使用一个字节(八位)来表示其内部存储器位置,故其内部存储器大小始终受限于256字节(二的八次方)。在堆栈存储器的大小无法扩充的情况下,程序设计者在撰写程序必须注意使用的堆栈数量,使得程序的开发更加困难。
发明内容
因此本发明的主要目的是提供一种增加处理器上的存储器的方法,以解决上述问题。
为实现上述目的,本发明提供一种增加处理器上的存储器的方法,该处理器上设有一中央处理单元及一固定存储器,该方法包含(a)在该处理器上提供一扩充存储器;(b)使用一地址延伸器以增加位的方式延伸数据地址以及寄存器地址;以及(c)使用一堆栈指针产生器以增加位的方式延伸堆栈地址,使该处理器可存取大于其指令集位限制的存储器,在堆栈地址大于该固定存储器的范围时对增加的位产生进位,并将超出该固定存储器的范围的堆栈数据存取于该扩充存储器。而在步骤(c)中,还包含提供一高位堆栈地址,在堆栈地址大于该固定存储器的范围时,使用该高位堆栈地址来储存该增加位产生的进位。
附图说明
图1为已知MCS-51系列的处理器其内部数据存储器的示意图。
图2为已知内部数据存储器使用两个堆栈的示意图。
图3为本发明处理器的内部数据存储器的示意图。
图4为本发明内部数据存储器配置的示意图。
图5为本发明内部数据存储器使用两个堆栈的示意图。
附图标号说明
12内部数据存储器 14存储器地址产生器
22内部数据存储器 24固定存储器
26扩充存储器 28地址延伸器
30堆栈指针产生器
具体实施方式
请参考图3,图3为本发明处理器的内部数据存储器22的示意图。内部数据存储器22包含一固定存储器24以及一扩充存储器26,在一块较大的存储器中,可分配一个区域作为固定存储器24(通常为256个字节),固定存储器24之外的其它区域则作为扩充存储器26。由于存储器的容量变大,需要较多的位来作定址,而处理器的中央处理单元仅能处理8位的指令集,在不改变指令集的情况下,中央处理单元所传出的原始地址先经由一地址延伸器28在原始地址之前增加适当的位来延伸地址数据,延伸后的地址再由存储器地址产生器14转换为存储器地址,如此,中央处理单元便可以存取较大的数据存储器。然而,受限于中央处理单元8位的指令集,最多只能表示到FFH,所以最多只能存取256字节的存储器大小,换句话说,中央处理单元还是只能在固定存储器24的范围内存取数据,而固定存储器24由堆栈、数据以及寄存器共同使用,但是由于堆栈特殊的处理方式,可以使用扩充存储器26。堆栈处理方式的特性就是先进后出,也就是存入堆栈中的数据必须等到下一笔存入堆栈中的数据被取出后才会被取出使用,而最后一笔存入堆栈中的数据则会最先被取出的数据,在此情况下,只要提供一块够大的存储器空间,则堆栈内就可以不断的存入数据。堆栈运作时是使用一堆栈指针来指向一个存储器地址作为堆栈的起始位置,已知的堆栈指针受限于8位的大小,最多只能表示到FFH,若此时再存入一笔数据至堆栈中,则堆栈指针变成0,则数据便会覆盖到堆栈起始地址的数据,所以本发明使用一堆栈指针产生器30来延伸堆栈指针的位,使堆栈指针储存的地址能够经由存储器地址产生器14转换为可以存取较大存储器的地址,最重要的是,当堆栈指针已经指到FFH而又有下一笔数据需存入堆栈时,堆栈指针产生器30会产生进位储存于一高位堆栈地址,再将高位堆栈地址合并于堆栈指针之中,经由存储器地址产生器14转换为存储器的地址后,堆栈便可以使用扩充存储器26来储存下一笔数据。由于一般存取堆栈数据,并不需要任意指定地址存取,而是由推入,推出(PUSH,POP)指令循序存取,故扩充的堆栈地址可以不表现在堆栈指位器(STACKPOINTER),也因此,不需修改现有的MCS指令集。
请参考图4,图4为本发明内部数据存储器22配置的示意图。内部数据存储器22在增加后可分成两个部分,第一个部分是原始大小的固定存储器24,第二个部分是增加后的扩充存储器26。数据存储器及寄存器存储器只使用固定存储器24的空间,而堆栈存储器通过堆栈指针产生器30及高位堆栈地址在固定存储器24空间不足时可以使用扩充存储器26的空间来储存数据。所以在配置存储器空间时,由于数据存储器及寄存器存储器只能共用固定存储器24的空间,若是需要较大的数据存储器及寄存器存储器空间,可将堆栈指针尽量设在高位,最高可设在FFH的地址,而不超过FFH的原因是为了不改变处理器的指令集。如此,数据存储器及寄存器存储器就几乎可以使用全部的固定存储器24空间,而堆栈存储器则因为堆栈指针产生器30及高位堆栈地址可以使用扩充存储器26来储存数据。
请参考图5,图5为本发明内部数据存储器22使用两个堆栈的示意图。使用者在撰写程序时常会使用到两个堆栈,堆栈指针所指的这个堆栈通常是用来存放呼叫子程序的程序计数,或者是使用者自定的数据,而参数指针所指的这个堆栈则是用来存放程序在呼叫子程序时所需要传的参数。若使用者需要两个较大容量的堆栈,但是又不希望改变处理器的指令集,可将堆栈指针设定在一个不超过FFH的地址(这是为了不影响原有的指令与架构),而将参数指针设在堆栈指针相邻低位的地址。堆栈指针由设定的地址向上递增,因为有堆栈指针产生器30及高位堆栈地址,这个堆栈容量的限制为扩充存储器26的大小,参数指针由设定的地址向下递减,直到数据存储器及寄存器存储器使用的区域为止。
由上述可知,本发明增加处理器的内部数据存储器22,使得内部数据存储器22的可用空间除了原有的固定存储器24之外,多出了一块扩充存储器26,加上使用地址延伸器28在原始地址之前增加适当的位数,经过存储器地址产生器14转换后,处理器的中央处理单元便可存取较大的数据存储器,但受限于中央处理单元仅能处理8位的指令集,所以数据存储器及寄存器存储器仍然只能使用固定存储器24的空间,而由于堆栈运作的特性,在存入堆栈数据超出固定存储器24范围时,使用堆栈指针产生器30对增加的位产生进位,并将进位数据储存于高位堆栈地址,再合并于堆栈指针之中,如此堆栈就可以使用扩充存储器26来储存数据。而上述实施例中亦提供较佳的存储器配置方式,在不改变处理器的指令集的情况下,最高可将堆栈指针设定在FFH的地址,如此数据存储器及寄存器存储器可使用几乎全部的固定存储器24空间,而堆栈存储器的空间则视扩充存储器26的大小而定。若使用者需用到第二个堆栈来储存程序所传的参数,可将参数指针设定在堆栈指针相邻低位的地址,参数指针会由设定的地址向下递减,使用固定存储器24中剩余的空间。
相较于已知技术,本发明提供一种增加处理器的内部数据存储器的方法,已知的处理器仅提供有限的内部数据存储器,而且堆栈存储器、数据存储器及寄存器存储器必须共用这个内部数据存储器。虽然数据存储器可以利用外部数据存储器来作扩充,但是堆栈存储器的大小却还是受限于处理器所提供的内部数据存储器,而有堆栈存储器不够使用的情形发生,更何况很多复杂的程序常需要使用到两个堆栈存储器。本发明增加处理器的内部存储器,并使用堆栈指针产生器及高位堆栈地址来处理增加的堆栈数据,使得堆栈可以存取扩充存储器,以解决堆栈存储器不够使用的情形。
以上所述仅为本发明的较佳实施例,凡依本发明权利要求所做的均等变化与修饰,均应属本发明专利的涵盖范围。
Claims (8)
1.一种增加一处理器上的存储器的方法,该处理器上设有一中央处理单元及一固定存储器,该方法包含:
(a)在该处理器上提供一扩充存储器;
(b)使用一地址延伸器以增加位的方式延伸数据地址以及寄存器地址;以及
(c)使用一堆栈指针产生器以增加位的方式延伸堆栈地址,使该处理器可存取大于其指令集位限制的存储器,于堆栈地址大于该固定存储器的范围时对增加的位产生进位,并将超出该固定存储器的范围的堆栈数据存取于该扩充存储器。
2.如权利要求1所述的方法,其在步骤(c)中,还包含提供一高位堆栈地址,在堆栈地址大于该固定存储器的范围时,使用该高位堆栈地址来储存该增加位产生的进位。
3.如权利要求1所述的方法,其中该处理器为MCS系列的处理器。
4.如权利要求1所述的方法,其中该中央处理单元处理8位的指令集。
5.如权利要求1所述的方法,其中该固定存储器以及该扩充存储器存在于同一块存储器之中。
6.如权利要求5所述的方法,其中该固定存储器的大小为256字节。
7.如权利要求1所述的方法,其中数据、寄存器以及堆栈共用该固定存储器。
8.如权利要求1所述的方法,其中该扩充存储器仅供堆栈使用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB031085229A CN100353335C (zh) | 2003-03-28 | 2003-03-28 | 增加处理器中存储器的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB031085229A CN100353335C (zh) | 2003-03-28 | 2003-03-28 | 增加处理器中存储器的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1534484A CN1534484A (zh) | 2004-10-06 |
CN100353335C true CN100353335C (zh) | 2007-12-05 |
Family
ID=34283129
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB031085229A Expired - Fee Related CN100353335C (zh) | 2003-03-28 | 2003-03-28 | 增加处理器中存储器的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100353335C (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1300676C (zh) * | 2004-10-27 | 2007-02-14 | 上海大学 | 堆栈区域扩充方法 |
CN106469118B (zh) * | 2015-08-19 | 2019-08-13 | 深圳市博巨兴实业发展有限公司 | 一种存储器内存分配访问方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998014876A1 (de) * | 1996-09-30 | 1998-04-09 | Siemens Aktiengesellschaft | Schaltungsanordnung mit einem mikroprozessor und einem stapelspeicher |
CN1295279A (zh) * | 1999-11-09 | 2001-05-16 | 摩托罗拉公司 | 在处理系统中用于执行堆栈弹出与压入操作的装置和方法 |
-
2003
- 2003-03-28 CN CNB031085229A patent/CN100353335C/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998014876A1 (de) * | 1996-09-30 | 1998-04-09 | Siemens Aktiengesellschaft | Schaltungsanordnung mit einem mikroprozessor und einem stapelspeicher |
CN1295279A (zh) * | 1999-11-09 | 2001-05-16 | 摩托罗拉公司 | 在处理系统中用于执行堆栈弹出与压入操作的装置和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1534484A (zh) | 2004-10-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9542307B2 (en) | Shiftable memory defragmentation | |
JP4965009B2 (ja) | オフセット表を使用する完全ハッシュの生成 | |
US6381668B1 (en) | Address mapping for system memory | |
JP5489991B2 (ja) | メモリ割り当ての機構 | |
CN100541665C (zh) | 可编程并行查找存储器 | |
CN101162441B (zh) | 数据的存取装置和方法 | |
CN107016100A (zh) | 一种基于非易失性内存文件系统的元数据管理方法 | |
CN101673246A (zh) | 一种高效的先进先出数据池读写方法 | |
CN115168259A (zh) | 一种数据存取方法、装置、设备和计算机可读存储介质 | |
KR100474357B1 (ko) | 다단계 분할을 이용한 기억소자 할당방법 | |
CN100353335C (zh) | 增加处理器中存储器的方法 | |
CN101084484B (zh) | 用于快速存取堆栈存储器的方法和系统 | |
TWI234109B (en) | Variable-instruction-length processing | |
Joannou et al. | An empirical evaluation of extendible arrays | |
CN106168883A (zh) | 一种高效的数据组织与访问方法 | |
US20100122039A1 (en) | Memory Systems and Accessing Methods | |
US7124261B2 (en) | Access to bit values within data words stored in a memory | |
CN105518790B (zh) | 数据写入的方法及装置 | |
CN109871355B (zh) | 一种快照元数据存储方法、装置及设备、介质 | |
TWI289751B (en) | Method for increasing memory in a processor | |
CN113111013A (zh) | 一种闪存数据块绑定方法、装置及介质 | |
KR101555545B1 (ko) | 메모리 제어장치 및 정보처리장치 | |
CN108874468A (zh) | 应用程序的加载方法、装置、计算机设备及存储介质 | |
US11960402B2 (en) | Integrated circuit and configuration method thereof | |
CN113721839B (zh) | 用于处理图数据的计算系统和存储分层方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20071205 Termination date: 20200328 |