ぱたへね

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

Exercise 2.52 Instruction Set Styles

このCソースに対して等価なアセンブラを書き、4つのアーキテクチャを比較しなさい。
a = b + c;
b = a + c;
d = a - b;

Accumulator

Accumulatorの場合は8命令で実行できます。

load AddressB  
add AddressC   # b + c 
store AddressA 
add AddressC   # a + c 
store AddressB
load AddressA  
sub AddressB # a - b
store AddressD

Memory-memory

Memory-memoryの場合は3命令で実行できます。

add AddressA AddressB AddressC
add AddressB AddressA AddressC
sub AddressD AddressA AddressB

Stack

Stackの場合は12命令で実行できます。

push AddressB 
push AddressC
add           # b + c
pop AddressA
push AddressA 
push AddressC
add           # a + c
pop AddressB
push AddressA
push AddressB
sub           # a - b
pop AddressD

Load-store

Load-storeの場合は8命令で実行できます。

load $1, AddressC
load $2, ADddessB
add  $1, $2, $3    # $3 <- b + c
store $3, AddressA
add $3, $1, $4     # $4 <- a + b
store $4, AddressB
sub $3, $4, $5     # $4 <- a - b
store $5, AddressD

各スタイルの比較

この条件で比較してみます。

  • オペコードは1バイト
  • メモリアドレスは2バイト
  • データオペランドは4バイト
  • 全ての命令はバイトの長さの整数値
  • 最適化無し
style instructions code bytes data bytes
Accumulator 8 24 32
Memory-memory 3 21 32
Stack 12 30 32
Load-Store 8 25 32