この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 |