26日目
[1]
なっるほどなぁ。たしかこういうテクニックって前にもどこかでやったよね?。
一見、コードが長くなるように見えなくもないけど、無駄なif(しかもforのせいで数万回分の)がなくなるので相当変化があると思われる。
[2]〜[3]
ふむ。これはつまり、こういうことだよね??
普通に8バイト書き込む
┌──────┐
MOV [0x00001000],0x11 →│ 0x11 │0x00001000
├──────┤
MOV [0x00001001],0x12 →│ 0x12 │
├──────┤
MOV [0x00001002],0x13 →│ 0x13 │
├──────┤
MOV [0x00001003],0x14 →│ 0x14 │ :
├──────┤ :
MOV [0x00001004],0x15 →│ 0x15 │ :
├──────┤
MOV [0x00001005],0x16 →│ 0x16 │
├──────┤
MOV [0x00001006],0x17 →│ 0x17 │
├──────┤
MOV [0x00001007],0x18 →│ 0x18 │0x00001007
└──────┘
※ 合計8回もMOV命令を実行しないといけない。
=================================================================
32bit命令で8バイト書き込む
┌──────┐
MOV [0x00001000],0x14131211 →│ 0x11 │0x00001000
├──────┤
→│ 0x12 │
├──────┤
→│ 0x13 │
├──────┤
│ 0x14 │ :
├──────┤ :
MOV [0x00001004],0x1817161515 →│ 0x15 │ :
├──────┤
→│ 0x16 │
├──────┤
→│ 0x17 │
├──────┤
→│ 0x18 │0x00001007
└──────┘
※ たった二回のMOV命令の実行で同じ結果になる。
むむむ・・・こりゃややこしいな。でもやっていることはわかるな。