Function 填补我理解上的空白

Function 填补我理解上的空白,function,Function,我正在阅读以下一系列关于操作系统的课堂讲稿: 在这里,当试图解释线程程序可以产生的不同结果时,它分解了函数的执行,并说了以下几行: sum首先将a的值读入寄存器。然后递增寄存器,然后将寄存器的内容存储回a。然后,sum将控制字符串p和a的值读入寄存器,用以向printf例程传递参数。然后,它调用printf,后者输出数据 我完全不知道一个函数是如何在寄存器级别执行的,同时也不知道我应该学习哪个主题来了解它 那么,哪个主题包含寄存器和电子电路级别的功能执行? 请详细说明在函数执行期间读取值时堆栈

我正在阅读以下一系列关于操作系统的课堂讲稿:

在这里,当试图解释线程程序可以产生的不同结果时,它分解了函数的执行,并说了以下几行:

sum首先将a的值读入寄存器。然后递增寄存器,然后将寄存器的内容存储回a。然后,sum将控制字符串p和a的值读入寄存器,用以向printf例程传递参数。然后,它调用printf,后者输出数据

我完全不知道一个函数是如何在寄存器级别执行的,同时也不知道我应该学习哪个主题来了解它

那么,哪个主题包含寄存器和电子电路级别的功能执行? 请详细说明在函数执行期间读取值时堆栈是如何递增的。
提前感谢。

查看攻击者代码的建议已经很好了。您可以查找汇编程序指令,并思考如果在任何指令中线程执行更改为另一个线程,会发生什么情况

看看这个代码

la      a, %r0
ld      [%r0],%r1
add     %r1,1,%r1
st      %r1,[%r0]

ld      [%r0], %o3 ! parameters are passed starting with %o0
mov     %o0, %o1
la      .L17, %o0
call    printf
在前四行(a++)中,有不同的执行方式。您不知道是先调用sum(1)还是sum(0)


为了更深入地了解正在进行的工作,我建议您查阅“计算机组织”。例如,请参阅此链接。

Fox:非常感谢。我看不出在执行过程中会有什么不同的可能性。福克斯:使用了哪个处理器,我的意思是不同处理器的助记符是不同的,对吗?代码中似乎sum(1)是不是先被调用的?问题是它是由线程执行的。因此,您不知道调度程序是立即切换到新线程,还是在调度程序切换之前执行了程序的主线程。无法确定是先执行线程t还是先执行主线程,每次执行程序时可能会有所不同。可能是gcc汇编程序。您可以尝试在Unix/Linux系统上生成带有“gcc file.c-S-o file.S”的汇编程序,该汇编程序应生成一个以.S结尾的汇编文件,就像链接中的作者所说的“它将把生成的汇编程序放在与.c或.cc文件相同的文件名中,但后缀为.S”。