2014-07-14 67 views
0

我正在考慮一些帶有char數組的IA-32 ASM示例。字符數組的ESI和EBX的主要區別是什麼?

我想了解ESI/EDI和EBX之間的主要區別,當你需要閱讀的數組。在我的例子中,有符號或無符號的char數組。 看來,當你不需要目的地(EDI)時,你可以同時使用ESI和EBX來讀取一個數組。

我的問題來自這些寄存器的「標準」定義:ESI/EDI用於字符串操作,而EBX用於內存指向。好的,數組在內存中,但是:在這種情況下使用ESI或EBX有真正的區別嗎?

我知道,這是一個愚蠢的問題,但我無法找到任何東西在網絡上非常有用。

+3

這些區別對於8086處理器非常重要。現在不再是1979年了。 –

回答

2

便利和可用的寄存器是關於它。有一些需要特定寄存器的指令,還有一些指令會給出一個特定寄存器(使用AX的16位代碼)時的較短指令。但是,對於標準尋址,我不能想到芯片本身帶來的任何有價值的差異。您可以簡單地選擇其中一個或另一個,因爲哪些寄存器是免費的(或避免保存/恢復操作)。

1

有一小部分「字符串」指令使用E/RSIE/RDI作爲隱式源指針和目標指針,而E/RCX作爲這些指令的計數器。參見CMPS,MOVS,STOS,INSOUTSREP, REPE等前綴。

儘管這些都是非常古老的說明,但我相信它們仍然有效,性能明智......英特爾文檔指出,特別是,STOS是清除內存塊的最快方式。

相關問題