0
我是新裝配。最近我需要Visual Studio 2013中的內聯程序集來提高性能。內聯裝配分支目標超出範圍
但是我來到了分支目標範圍問題:
_asm
{
mov ecx, cnt;
jecxz AZERO:
AL1:
/*Some operation codes here, but may be exceed 128 byte*/
loop AL1;
AZERO:
}
我知道原因是,「操作規範」大小超過128個字節。
我簡單的解決方法是:
for (int i = 0; i < cnt; i++) {
_asm
{
/*Some operation codes here, but may be exceed 128 byte*/
}
}
這似乎是工作。
但我不知道這種方法是否夠好?
是否有任何好的方法來處理循環部分而不會導致分支範圍問題?
'jecxz'也有一個簡短的操作數。 – gsg
@gsg技術上'jecxz'不是'jcc'指令(它不在''jcc'指令的操作碼範圍之外,它沒有看標誌,也沒有'setcc'形式),但是因爲由於某些原因,它已列在英特爾手冊的'jcc'部分,我會更新我的答案以解決該問題。謝謝! –