Re: [問題] 請問有人懂PowerPC ASM的嗎?

看板ASM (組合語言)作者 (蛍雪時代にの僕)時間17年前 (2007/07/14 15:37), 編輯推噓-1(120)
留言3則, 3人參與, 最新討論串3/4 (看更多)
: a' = a XOR b : b' = a' XOR b = b XOR a XOR b = a : // 所以你的 b 是沒問題的 : a'' = a' XOR b' = a XOR b XOR a = b : // 這是你預期的情況 : a'' = a XOR b' = a XOR a = 0 : // 這是實際發生的情況 : 最後的 a^= b 當中, a = a ^ b; : 右式中的 a 還是原本的 100, 而 b 則是交換完成的 100 : 所以答案是 0 : 問題在於 a^=b^=a^=b 這個式子中,a 做了兩次的給/變值動作 : 就像 i++ + ++i 這種寫法一樣,請避免 : 拆成兩行 : b^=a^=b; // a, b 各一次給值動作 : a^=b; : 或是乖乖拆成三行吧 : 另外,這種用法還要注意 a, b 不能是同樣的值,否則兩者會變 0 : 小小建議: 還是用一般有 tmp variable 的用法吧 對於此用法的邊際效用及實際機器碼轉譯我非常的清楚,我並不需要這種說明。 事實上,這種方式只要考慮^=的結合性,它是由右至左。考慮到較佳的作法,自然就要轉 譯為類似以下的x86機器碼(實際上也是),而非你講的另起變數: ... mov AX, varA mov BX, varB xor AX, BX xor BX, AX xor AX, BX mov varA, AX mov varB, BX ... 我今天的問題,是因為硬體特性造成的。我所需要的,是有人說明為何PowerPC會造成 這樣的問題,而不是討論這種方法與未定義行為的關係。(實際上PowerPC下對兩個普通 變數作如此操作也完全正常,沒有你所說的問題出現)今天這種問題只出現在PowerPC 下間接定址,這才是我想問的問題,請勿離題。 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.229.139.155

07/14 21:24, , 1F
................
07/14 21:24, 1F

07/19 16:32, , 2F
................
07/19 16:32, 2F

07/21 22:05, , 3F
...............
07/21 22:05, 3F
文章代碼(AID): #16c7r0xQ (ASM)
文章代碼(AID): #16c7r0xQ (ASM)