我一直在研究一個非常基本的MIPS程序,它計算門票銷售的一些東西。我已經實現了所有的功能,但是當我執行IF語句時(blt - >如果小於),我遇到了一些錯誤。我已存儲以下數據到臨時寄存器:MIPS彙編分支如果不到
- $t0 = # of VIP tickets.
- $t1 = # of General Admission tickets.
- $t2 = # of Box Office tickets.
- $t4 = Average ticket sales.
我已經檢查了值將相應地存儲,如果條件爲假,代碼的工作,但如果條件滿足,將分支,仍然打印代碼在分支之前。這裏是我的代碼的一部分:
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
您只需要一些額外的無條件分支(和標籤),以便您不會同時執行「大於或等於」和「小於」代碼路徑。 –
嗨保羅,感謝您的快速回答!你是否在意詳細一點?我不明白你的意思。 –
好的 - 我在下面的答案中進一步解釋了。 –