我被要求用mips彙編語言編寫程序來執行一些基本的算術運算,例如將攝氏溫度轉換爲華氏溫度。因爲我使用了僞指令,所以我最終在這個任務上收到了差評。我不知道我甚至使用僞指令,因爲它看起來很多教程在線使用,沒有太多的澄清。如何轉換Mips僞指令?
出於好奇,我想知道如果有人能解釋如何將僞指令轉換爲非僞指令?下面
是僞指令我的工作程序:
## convert temperature from celsius to fahrenheit
## F = (9*C/5)+32
.text
.globl main
main: # execution starts here
la $a0,getCelsius # ask user for temperature in celcius
li $v0,4 # print message to console
syscall
li $v0,5 # read integer from console
syscall
mul $t0,$v0,9 # compute ($v0 * 9)
div $t0,$t0,5 # compute ($v0 * 9)/5
addi $t0,$t0,32 # compute (($v0 * 9)/5) + 32
la $a0,tempF # print message to console
li $v0,4
syscall
move $a0,$t0 # print result of (($v0 * 9)/5) + 32
li $v0,1
syscall
li $v0,10 # Done
syscall
.data
getCelsius: .asciiz "Enter celsius temperature: "
tempF: .asciiz "Fahrenheit temperature = "
我的一個朋友告訴我,垃圾消息模擬器實際上會自動轉換pseuo的指令並進行顯示。他說要複製並粘貼到記事本中並做一些小改動。我仍然困惑。
這是我結束了複製和修改:
.text
.globl main
main:
lui $11, 0x1001 [getCelsius] # la $a0,getCelsius ask user for temperature
in celcius#
ori $4, $11, 0 [getCelsius]
ori $2, $0, 4 # li $v0,4 print message to console#
syscall # syscall
ori $2, $0, 5 # li $v0,5 read integer from console#
syscall # syscall
ori $11, $0, 9 # mul $t0,$v0,9 compute ($v0 * 9)#
mul $8, $2, $11
ori $11, $0, 5 # div $t0,$t0,5 compute ($v0 * 9)/5#
div $8, $11
mflo $8
addi $8, $8, 32 # addi $t0,$t0,32 compute (($v0 * 9)/5) + 32#
lui $11, 0x1001 [tempF] # la $a0,tempF print message to console#
ori $4, $11, 28 [tempF]
ori $2, $0, 4 # li $v0,4
syscall # syscall
addu $4, $0, $8 # move $a0,$t0 print result of (($v0 * 9)/5) + 32#
ori $2, $0, 1 # li $v0,1
syscall # syscall
ori $2, $0, 10 # li $v0,10 Done#