內(nèi)聯(lián)匯編的技巧
void CAlcmemDlg::OnButton4()
{
float f_t=.132;
float f_s=0;
__asm{
fld f_s
fld f_s
fld f_s
fld f_t
fadd f_t
fst f_t
// fadd fs
}
}
可以利用設(shè)置斷點(diǎn)的方法來(lái)觀察FPU寄存器的情況,通常你用VC寫的代碼,不會(huì)被編譯為引用特殊指令集的代碼,雖然微軟號(hào)稱編譯器支持這些指令。所以你必須用內(nèi)聯(lián)匯編方法來(lái)調(diào)用這些指令以優(yōu)化程序,充分利用資源。示例中的代碼調(diào)用了FPU處理器的指令,使操作浮點(diǎn)數(shù)的能力被充分發(fā)揮。但當(dāng)然你還可以調(diào)用3DNOW!指令,SSE,SSE2等指令,但筆者沒(méi)有試過(guò),如果你有什么新的發(fā)現(xiàn),還望賜教,再此先謝了!
總的來(lái)說(shuō)內(nèi)聯(lián)匯編提高了速度,尤其是游戲編程,更應(yīng)該努力使用內(nèi)聯(lián)匯編,把CPU充分榨干,但壞處就是有些低端的機(jī)器無(wú)法運(yùn)行,兼容性差。同時(shí)微軟又號(hào)稱,編譯器不會(huì)去優(yōu)化你寫的匯編碼,他只是簡(jiǎn)單的翻譯為等價(jià)的機(jī)器碼,優(yōu)化的事情交給你自己來(lái)完成,所以你不但得是C++高手,同時(shí)還得是匯編高手。
評(píng)論