在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/C  HTML/ 這個(gè)匯編代碼怎么理解?

這個(gè)匯編代碼怎么理解?

按書上寫的c代碼 是

int exchange(int *xp,int y)
{
    int x=*xp;
    *xp=y;
    return x;
}

轉(zhuǎn)換成匯編代碼后 書上的是

//xp在ebp+8  y在ebp+12
movl    8(%ebp),%edx    //將地址ebp+8指向的內(nèi)容傳向寄存器edx    對(duì)應(yīng)形參xp
movl   (%edx),%eax      //將寄存器edx指向的內(nèi)容傳向寄存器eax    對(duì)應(yīng)int x=*xp
                        //并且返回的時(shí)候也從eax返回
movl   12(%ebp),%ecx    //將地址ebp+12指向的內(nèi)容傳向寄存器ecx   對(duì)應(yīng)形參y
movl   %ecx,(%edx)      //將寄存器ecx指向的內(nèi)容傳向寄存器edx指向的空間  對(duì)應(yīng)*xp=y

然而我的電腦上運(yùn)行的匯編代碼很簡(jiǎn)潔 是

movl    (%rcx), %eax
movl    %edx, (%rcx)
ret

完全不知道是怎么實(shí)現(xiàn)的?

回答
編輯回答
命于你

這是優(yōu)化了的結(jié)果,你可以把優(yōu)化關(guān)掉(如果你知道如何關(guān)的話)

movl    (%rcx), %eax // 將 *xp 作為返回值
movl    %edx, (%rcx) // 將 y 的值放到 *xp
ret

按部就班來(lái)的話,就是你書上的代碼。。

2018年9月14日 14:02