其實要真的看ASM Code你才可以知道編譯器如何產出ASM Code,上面回答的是非常粗略的估計值,只是剛好而已
我們就列上來看一下兩邊到底編譯出什麼東東,5行的程式碼部分ASM Code
這樣共20行Instruction
再來看for loop寫法
這樣共26行
您一定會覺得很奇怪,為什麼行數多反而較少,但我測試結果寫成for loop是比較少的,主要原因您是把這些assign放在else區塊裡面會有所不同
所以我的Code占用3244是一個一個assign,3242是for loop寫法
雖然51是8 Bit的,但這裡更正應該是CISC架構,所以Instruction有長有短,雖然多半是8 Bit
您可以觀察到E4,FF這些是8Bit長度,但74AD是16Bit長度
這些加總起來以後for loop還是比較省空間(0x918-0x8F3=37 Byte vs 0x8F2-0x8CB=39 Byte)
另外兩者寫法未必for loop比較慢,還要端看一個Instruction需要幾個cycle,這裡再講下去就很多東西了...,若兩者空間都是足夠的,優先以易讀好維護的寫法(for loop),以上供參考