嗨,我很感兴趣的是,gcc会从这段代码中生成什么汇编代码(这只是一个虚拟代码来说明我的观点):int foo(void) int result = a; return result;我很惊讶,gcc将变量a复制到堆栈,然后从堆栈复制到寄存器,这样它就可以返回它。当我将register添加到result的声明中时,它优化了代码,不使用堆栈,而是将变量直接复制
当然,MOV“移动”(实际上是复制的)某物,但如何?它是将源的实际值放入目的地,还是放置某种地址。当我在Jeff介绍的汇编书中看到他正在使用Linux的中断80h时,我就想到了这个问题:mov ebx,1 ; Specifyof the character to writeint 80h ; Call sys_write
在程序集中,可以将数据存储在寄存器或堆栈中。在任何给定的时刻,只能访问堆栈的顶部(对吗?)pushed by func())variable a (1 byte, pushed by func())
在C代码中,您可以从函数的任何位置访问局部变量,但在程序集中,只能访问堆栈的顶部。C代码被转换为程序集(在机器代码中,但程序集是程序集的可读形式)。那么,程序集如何支持不位于堆栈顶部的