私は、チケット販売に関するいくつかのものを計算する非常に基本的な MIPS プログラムに取り組んできました。すべての機能を実装しましたが、IF ステートメント (blt --> 未満の場合は分岐) を実行すると、いくつかのエラーが発生します。次のデータを一時レジスタに保存しています。
- $t0 = # of VIP tickets.
- $t1 = # of General Admission tickets.
- $t2 = # of Box Office tickets.
- $t4 = Average ticket sales.
値がそれに応じて保存され、条件がFALSEの場合はコードが機能することを確認しましたが、条件が満たされた場合は分岐し、分岐前にコードを出力します。ここに私のコードの一部があります:
blt $t0, $t4, VIP_LESS # if $t0 < $t4 then VIP
b VIP_GREAT
VIP_LESS:
li $v0, 4
la $a0, less_avg_vip
syscall
VIP_GREAT:
li $v0, 4
la $a0, great_avg_vip
syscall
blt $t1, $t4, GEN_LESS # if $t1 < $t4 then GEN
b GEN_GREAT
GEN_LESS:
li $v0, 4
la $a0, less_avg_general
syscall
GEN_GREAT:
li $v0, 4
la $a0, great_avg_general
syscall
blt $t2, $t4, BOX_LESS # if $t2 < $t4 then BOX_LESS
b BOX_GREAT
BOX_LESS:
li $v0, 4
la $a0, less_avg_box
syscall
BOX_GREAT:
li $v0, 4
la $a0, great_avg_box
syscall
li $v0, 4
la $a0, endl
syscall
なぜこれで問題が発生するのか、誰にもわかりますか? 私のプログラムの出力は次のようになります。
VIP: 1349 tickets
General: 5278 tickets
Box: 4367 tickets
Average: 3215 tickets
VIP: Less than average.
General: Greater than average.
General: Less than average.
Box: Greater than average.
Box: Less than average.
編集:作業コード。
blt $t0, $t4, VIP_LESS # if $t0 < $t4 then VIP
li $v0, 4
la $a0, great_avg_vip
syscall
j GENERAL_IF
VIP_LESS:
li $v0, 4
la $a0, less_avg_vip
syscall
GENERAL_IF:
blt $t1, $t4, GEN_LESS # if $t1 < $t4 then GEN
li $v0, 4
la $a0, great_avg_general
syscall
j BOX_IF
GEN_LESS:
li $v0, 4
la $a0, less_avg_general
syscall
BOX_IF:
blt $t2, $t4, BOX_LESS # if $t2 < $t4 then BOX_LESS
li $v0, 4
la $a0, great_avg_box
syscall
j END_IF
BOX_LESS:
li $v0, 4
la $a0, less_avg_box
syscall
END_IF:
li $v0, 4
la $a0, endl
syscall