ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

2章 Ex2.4 即値の減算の比較

Exercise 2.4の発展で、他のCPUも調べてみました。とは言っても各CPUのデータシートを追っていくのは大変ので、Cソースをコンパイルして必要なところを抜き出しています。やっていることは、a = b + 10, a = b - 50; で、10の加算と50の減算です。フラグ関係は大変そうなので追いません。

MIPS

   0:   2442000a        addiu   v0,v0,10
   4:   2442ffce        addiu   v0,v0,-50

Exercise 2.4のコメント欄に書いたようにadd命令になる。対応するsubi, subiuは存在しない。

SPARC

  0:   82 00 60 0a     add  %g1, 0xa, %g1
  4:   82 00 7f ce     add  %g1, -50, %g1

同じくadd命令に。Sun Microsystems Documentationを見ると、subに即値も使えそうだがgccはadd命令を使っている。

SH

   0:   71 0a           add     #10,r1
   2:   71 ce           add     #-50,r1

SHは即値のSUB命令は無いので、MIPSと同じ結果になりました。ROM効率が素晴らしい。

ARM

  0:   e284300a        add     r3, r4, #10     ; 0xa
  4:   e2443032        sub     r3, r4, #50     ; 0x32

ARMはSUB命令有り。

x86

 0:   83 c0 0a                add    $0xa,%eax
 3:   83 e8 32                sub    $0x32,%eax

x86は当たり前のようにsub命令あり。こうやって比べると、x86が一番自然に感じますね。CISCアセンブラを書く人に優しい。