参考答案和解析
正确答案: 堆栈的设立是为了中断操作和子程序的调用而用于保存数据的,即常说的断点保护和现场保护。微处理器无论是在转入子程序和中断服务程序的执行,执行完后,还是要回到主程序中来,在转入子程序和中断服务程序前,必须先将现场的数据进行保存起来,否则返回时,CPU并不知道原来的程序执行到哪一步,原来的中间结果如何?所以在转入执行其它子程序前,先将需要保存的数据压入堆栈中保存。以备返回时,再复原当时的数据。供主程序继续执行。 转入中断服务程序或子程序时,需要保存的数据可能有若干个,都需要一一地保留。如果微处理器进行多重子程序或中断服务程序嵌套,那么需保存的数据就更多,这要求堆栈还需要有相当的容量。否则会造成堆栈溢出,丢失应备份的数据。轻者使运算和执行结果错误,重则使整个程序紊乱。
M.CS-51的堆栈是在RAM中开辟的,即堆栈要占据一定的RAM存储单元。同时MCS-51的堆栈可以由用户设置,SP的初始值不同,堆栈的位置则不一定,不同的设计人员,使用的堆栈区则不同,不同的应用要求,堆栈要求的容量也有所不同。堆栈的操作只有两种,即进栈和出栈,但不管是向堆栈写入数据还是从堆栈中读出数据,都是对栈顶单元进行的,SP就是即时指示出栈顶的位置(即地址)。在子程序调用和中断服务程序响应的开始和结束期间,CPU都是根据SP指示的地址与相应的RAM存储单元交换数据。
堆栈的操作有两种方法:其一是自动方式,即在中断服务程序响应或子程序调用时,返回地址自动进栈。当需要返回执行主程序时,返回的地址自动交给PC,以保证程序从断点处继续执行,这种方式是不需要编程人员干预的。第二种方式是人工指令方式,使用专有的堆栈操作指令进行进出栈操作,也只有两条指令:进栈为PUSH指令,在中断服务程序或子程序调用时作为现场保护。出栈操作POP指令,用于子程序完成时,为主程序恢复现场。
在执行中断子程序或者调用别的子程序时,系统会自动把当前的断点地址压入堆栈进行保护,执行完子程序即遇到RET或者RETI时,把断点地址弹出装入PC中,从而返回原程序的断点处继续往下执行。当你的主程序和子程序都用到某些标志位时,需要把他们也进行堆栈保护。比如你的主程序有加减乘除法,中断子程序中也有,那么你就必须对ACC,PSW等标志寄存器进行保护,因为你在执行中断程序的加减法时可能已经有进位或者借位,已经改变了某些标志位,而回到主程序中时若主程序的加减法没有进位时,标志位在子程序中已被改变,现在就可能出错了。所以在进入中断子程序时要首先把这些标志位(即ACC和PSW)保存起来即PUSH ACC和PUSH PSW,子程序结束时释放:POP PSW和POP ACC,以便回到主程序时能正确的继续运行。
更多“请描述CPU发生中断时入栈和出栈的过程,并分析堆栈段中数据的存储”相关问题
  • 第1题:

    栈的特点是后进先出,若用单链表作为栈的存储结构,并用头指针作为栈顶指针,则( )。

    A.入栈和出栈操作都不需要遍历链表
    B.入栈和出栈操作都需要遍历链表
    C.入栈操作需要遍历链表而出栈操作不需要
    D.入栈操作不需要遍历链表而出栈操作需要

    答案:A
    解析:
    本题用单链表作为栈的存储结构,因为栈的操作是先进后出,因此无论是入栈还是出栈,都只对栈顶元素操作,而在单链表中用头指针作为栈顶指针,此时无论是出栈还是入栈,都只需要对头指针指向的栈顶指针操作即可,不需要遍历链表。

  • 第2题:

    当8086进行堆栈操作时,CPU会选择()段寄存器,再和()或者()形成20位堆栈地址。


    正确答案:堆栈;堆栈指针SP;基址指针BP

  • 第3题:

    堆栈具有这样的特性,即最后一个入栈的元素,将是()出栈的元素。新入栈的元素将总是放在当前的()。不管什么时候,需要出栈时,总是从当前的()取走一个元素。


    正确答案:最先;栈顶;栈顶

  • 第4题:

    堆栈是一个特殊的存储器区域,其操作是以2字节单元为单位按照先进后出原则来处理;采用SP指向栈顶地址,入栈时地址变化为()。


    正确答案:SP<=(SP)-2

  • 第5题:

    在堆栈中保持不变的是()

    • A、栈指针
    • B、栈底
    • C、栈顶
    • D、栈中数据

    正确答案:B

  • 第6题:

    下面关于S7-200系列PLC的LPP指令的叙述中正确的是()。

    • A、是出栈指令
    • B、使用一次该指令,便将此刻的中间运算结果送入堆栈的第一层,而将原来存在堆栈的第一层数据移往堆栈的下一层
    • C、读出栈存储器最上层的最新数据,此时堆栈内的数据不移动
    • D、读出栈存储器最上层的数据,其余数据顺次向上移动一层,出栈的数据从栈存储器中消失

    正确答案:A,C,D

  • 第7题:

    堆栈指针SP存放栈顶的地址,进栈时自动加1,出栈时自动减1,因此,SP总是指向栈顶


    正确答案:正确

  • 第8题:

    因为SP所指栈顶为“实”栈顶,所以在入栈和出栈操作时都要先修改堆栈指针SP,再执行入栈、出栈操作。


    正确答案:错误

  • 第9题:

    何谓堆栈?为什么要设置堆栈?栈区是怎样确定的?数据进栈、出栈按照何种规律?进栈用什么指令?出栈用什么指令?进栈、出栈时栈指针如何变化?通常栈底所指是什么内容?


    正确答案:微型计算机中的堆栈是读写存储器RAM中的一个特殊的区域,是一组按照“先进后出”的方式工作的、用于暂存信息的存储单元。
    设置堆栈的目的是便于保护断点地址与现场信息。
    用堆栈指针指示堆栈所在的位置。
    数据进栈、出栈“按先进后出”的原则工作。
    进栈用PUSH指令,出栈用POP指令。进栈时指针向地址增加的方向变化,出栈时指针向地址减小的方向变化。
    栈底是最先进栈的信息所在的单元。

  • 第10题:

    下面关于FX2N系列PLC的MRD指令的叙述中正确的是:()

    • A、是读栈指令
    • B、使用一次该指令,便将此刻的中间运算结果送入堆栈的第一层,而将原来存在堆栈的第一层数据移往堆栈的下一层
    • C、读出栈存储器最上层的最新数据,此时堆栈内的数据不移动
    • D、读出栈存储器最上层的数据,其余数据顺次向上移动一层,出栈的数据从栈存储器中消失

    正确答案:A,C

  • 第11题:

    单选题
    在堆栈中保持不变的是()
    A

    栈指针

    B

    栈底

    C

    栈顶

    D

    栈中数据


    正确答案: B
    解析: 暂无解析

  • 第12题:

    判断题
    因为SP所指栈顶为“实”栈顶,所以在入栈和出栈操作时都要先修改堆栈指针SP,再执行入栈、出栈操作。
    A

    B


    正确答案:
    解析: 暂无解析

  • 第13题:

    在存储器堆栈结构中,堆栈指针SP的内容是()。

    • A、栈顶单元地址
    • B、栈底单元地址
    • C、栈顶单元内容
    • D、栈底单元内容

    正确答案:A

  • 第14题:

    51单片机中,堆栈存放数据的原则是先进后出,后进先出,数据进栈后,栈顶向下移动,栈指针SP值随之减小。


    正确答案:错误

  • 第15题:

    在存储器堆栈中,保持不变的是()

    • A、 栈顶
    • B、 栈指针
    • C、 栈底
    • D、 栈中的数据

    正确答案:C

  • 第16题:

    堆栈的深度由哪个寄存器确定? 为什么说一个堆栈的深度最大为64KB? 在执行一条入栈或出栈指令时,栈顶地址将如何变化?


    正确答案:堆栈的深度由SP决定,由于16位的SP=FFFFH可最大寻址64KB,故深度最大为64KB。当字数据出栈时,高8位放入由SP-2寻址单元,然后SP-2;当字数据出栈时,低8位从SP寻址的单元弹出,高8位从SP+1寻址的单元弹出,然后SP+2。

  • 第17题:

    设将整数1,2,3,4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题: (1)若入、出栈次序为Push(1),Pop(),Push(2),Push(3),Pop(),Pop(),Push(4),Pop(),则出栈的数字序列为何?(这里Push(i)表示i进栈,Pop()表示出栈) (2)能否得到出栈序列1423和1432?并说明为什么不能得到或者如何得到。 (3)请分析1,2,3,4的24种排列中,哪些序列是可以通过相应的入出栈操作得到的。


    正确答案:(1)出栈序列为:1324
    (2)不能得到1423序列。因为要得到14的出栈序列,则应做
    Push(1),Pop(),Push(2),Push(3),Push(4),Pop()。这样,3在栈顶,2在栈底,所以不能得到23的出栈序列。能得到1432的出栈序列。具体操作为:Push(1),Pop(),Push(2),Push(3),Push(4),Pop(),Pop(),Pop()。
    (3)在1,2,3,4的24种排列中,可通过相应入出栈操作得到的序列是:1234,1243,1324,1342,1432,2134,2143,2314,2341,2431,3214,3241,3421,4321
    不能得到的序列是:
    1423,2413,3124,3142,3412,4123,4132,4213,4231,4312

  • 第18题:

    简述什么是堆栈?堆栈中入栈、出栈的过程?


    正确答案: 堆栈是在内部RAM中按“后进先出”的规则组织的一片存储区。
    入栈操作时,先将SP的内容加1,然后将指令指定的直接地址单元的内容存入SP指向的单元;出栈操作时,先将SP指向的单元内容传送到指令指定的直接地址单元,然后SP的内容减1

  • 第19题:

    MSC-51属向上增长型堆栈,这种堆栈的操作规则是进栈操作时,先()后写入数据;出栈时,先读出数据()。


    正确答案:SP加1;SP减1

  • 第20题:

    8051的堆栈是向地址的()端生成的。入栈时SP先(),再压入数据。


    正确答案:高;加1

  • 第21题:

    下面关于FX2N系列PLC的栈操作指令MPS、MRD、MPP的叙述中错误的是:()

    • A、这组指令用于多重分支输出的电路中将连接点数据先存储,便于连接后面的电路时读出或取出该数据
    • B、在FX2N系列可编程控制器中有11个用来存储运算中间结果的存储区域,称为栈存储器
    • C、使用一次MPS指令,便将此刻的中间运算结果送入堆栈的第一层,而将原来存在堆栈的第一层数据移往堆栈的下一层
    • D、MRD指令是读出栈存储器最上层的数据,其余数据顺次向上移动一层,出栈的数据从栈存储器中消失

    正确答案:D

  • 第22题:

    问答题
    堆栈的深度由哪个寄存器确定? 为什么说一个堆栈的深度最大为64KB? 在执行一条入栈或出栈指令时,栈顶地址将如何变化?

    正确答案: 堆栈的深度由SP决定,由于16位的SP=FFFFH可最大寻址64KB,故深度最大为64KB。当字数据出栈时,高8位放入由SP-2寻址单元,然后SP-2;当字数据出栈时,低8位从SP寻址的单元弹出,高8位从SP+1寻址的单元弹出,然后SP+2。
    解析: 暂无解析

  • 第23题:

    单选题
    在存储器堆栈中,保持不变的是()
    A

     栈顶

    B

     栈指针

    C

     栈底

    D

     栈中的数据


    正确答案: A
    解析: 暂无解析