0

宛先レジスタを s レジスタの内容に設定するために「不正に」ロード アドレスを使用したため、宿題の採点を 8/10 ポイントに戻しました。問題の操作を以下に示します。

la  $t1, ($t0)  

$t0 は 10 進数に変換する 16 進数の単語を保持していましたが、それは重要ではありません。MARS (アセンブリ言語クラスで使用する MIPS シミュレーター) は、la と入力すると次のように提案します。

"la $t1, ($t2) ロード アドレス: $t1 を $t2 の内容に設定"

彼女はクラス全体 (全員が同じことをした) にそれは違法であると言い終えたところだったので、私は MARS がどのようにその指示を提案したかを彼女に示しました。プログラムは正常に実行され、ここに含まれています。

それで、私の長々とした質問: それは本当に違法なのですか、それとも彼女は自分が何について話しているのかを知らないだけですか?

# Project/Class Description:
# Formats an IP address from a value in memory 
# using shifts and AND operations.
#
.data
inHex:  .asciiz "IP Address in Hex: "
header: .asciiz "\nFormatted IP Address: "

IPinHex: .word 0x58dc45c3
dot:    .asciiz "."

.text globl

main:
li  $v0, 4      # print hex header
la  $a0, inHex
syscall

la  $t0, IPinHex
li  $v0, 34     # print hex number
lw  $a0, ($t0)
syscall

li  $v0, 4      # print int header
la  $a0, header
syscall

la  $t0, IPinHex    
lw  $t0, ($t0)  # IP address in hex

li  $t5, 0xff000000 # AND value
li  $t6, 24     # shiftAmt
li  $t7, 3      # loop count

loop:               
addi    $t7, $t7, -1    # count--
la  $t1, ($t0)  
and $t1, $t1, $t5   # isolate chunk of hex number
srlv    $t1, $t1, $t6   # shift down to the right

li  $v0, 1      # print int
la  $a0, ($t1)
syscall

li  $v0, 4      # print a "."
la  $a0, dot
syscall

srl $t5, $t5, 8 # shift AND value for next iteration
addi    $t6, $t6, -8    # shiftAmt-= 8

bnez    $t7, loop   # while (loop!=0)


la  $t1, ($t0)  # print last int
and $t1, $t1, $t5   # isolate chunk of hex number

li  $v0, 1      # print int
la  $a0, ($t1)
syscall         

exit:               # exit()
li  $v0, 10     
syscall
4

1 に答える 1