Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architecture 使用堆栈的子例程调用_Architecture_Stack_Subroutine - Fatal编程技术网

Architecture 使用堆栈的子例程调用

Architecture 使用堆栈的子例程调用,architecture,stack,subroutine,Architecture,Stack,Subroutine,我不明白这个问题 “内存堆栈顶部的内容是5320。堆栈指针(SP)的内容是3560。两个字的调用子例程指令位于内存中地址1120处,后面是地址字段6720(位置1121)。PC、SP和堆栈顶部的内容是什么: 从内存中提取调用指令之前 在执行call指令之后 从子程序返回后“ 1.在提取调用指令之前,PC将调用指令的地址保存在内存中,即1120。当时,SP=3560,M[SP]=5320 2.解码并执行call指令后,PC递增(PC=PC+1),等于1121,即返回地址,并存储在堆栈顶部。假设

我不明白这个问题

“内存堆栈顶部的内容是5320。堆栈指针(SP)的内容是3560。两个字的调用子例程指令位于内存中地址1120处,后面是地址字段6720(位置1121)。PC、SP和堆栈顶部的内容是什么:

  • 从内存中提取调用指令之前
  • 在执行call指令之后
  • 从子程序返回后“
1.在提取调用指令之前,PC将调用指令的地址保存在内存中,即1120。当时,SP=3560,M[SP]=5320

2.解码并执行call指令后,PC递增(PC=PC+1),等于1121,即返回地址,并存储在堆栈顶部。假设堆栈指针每按一次(SP=SP-1)就会减少1,每按一次(SP=SP+1)就会增加1。 因此,SP值将是3560-1=3559,M[3559]=1121(返回地址)

3.子程序执行完毕后,返回地址被传输到PC(PC=M[SP]),SP递增(pop)(SP=SP+1) 现在PC=1121,SP=3559+1=3560,M[SP]=M[3560]=5320

作为一个初学者,到目前为止,我只知道这些

我的问题是:

1。我做的对吗?

2。如果没有,请解释原因。

3。如果是,那么在计算中不起任何作用的其他值的意义是什么?

1)本子部分的答案是正确的

2) 执行call指令后,PC中的当前值将被推送到堆栈上,因为这是一个推操作,堆栈指针将递减1,新的PC值将成为子程序的起始地址。 个人电脑:6720 Sp=Sp-1;3560-1=3559 TOS 1122:这有点棘手,在这种情况下,我们无法确定我们必须跳转到哪里,除非我们在1121获取并解码指令,该指令将告诉我们跳转到哪里。由于地址(6270)是从1121获得的,因此在将其值推送到堆栈上之前,PC必须指向1122。因此,1122被推到堆栈上

3) TOS将会流行,那将是我们的新电脑。 TOS是1122所以PC:1122 新TOS将是1122之前的值,即初始值:5320。 Pop操作增加SP的值,SP=SP+1=3560(本子部分的答案是正确的

2) 执行call指令后,PC中的当前值将被推送到堆栈上,因为这是一个推操作,堆栈指针将递减1,新的PC值将成为子程序的起始地址。 个人电脑:6720 Sp=Sp-1;3560-1=3559 TOS 1122:这有点棘手,在这种情况下,我们无法确定我们必须跳转到哪里,除非我们在1121获取并解码指令,该指令将告诉我们跳转到哪里。由于地址(6270)是从1121获得的,因此在将其值推送到堆栈上之前,PC必须指向1122。因此,1122被推到堆栈上

3) TOS将会流行,那将是我们的新电脑。 TOS是1122所以PC:1122 新TOS将是1122之前的值,即初始值:5320。 Pop操作使SP的值递增,SP=SP+1=3560