0

MARS (私の MIPS シミュレーター) 疑似乱数ジェネレーターを使用して文字列内のランダムな文字を選択し、それをメモリからレジスタに取り出し、メモリ内のその文字をアスタリスク '*' に置き換えるコードを作成しようとしています。 .

これまでのところ、それは単語の一部をごちゃ混ぜにするだけで、私は正気ではありません。このコードで何が機能していないのかわかりません。直接的な答えは必要ありません。ヒント/ヒントだけでもとても役に立ちます。

コードは次のとおりです。

#this loop extracts a char at random from a string in memory, stores it in a register, and replaces the char in the string with an asterisk '*'

.data

.align 2
string0: .ascii "Tyler\n"

.align 2
endString: .asciiz "Loop completed!\n"
.align 2
scrambleString: .asciiz


.text

#counter
li $t0, 5

#pointer to string0
la $s0, string0




loop2:

#is counter = 0? go to loop3 if so
beq $t0, $0, loop3

#seed & prepare randomized number generator
li $v0, 30 
syscall

li $v0, 40 #sets seed
syscall

#generates random number in $a0, with the coUnter $t0 being the upper bound
addi $a1, $t0, 1
li $v0, 42
syscall


#add STRING POINTER by random number in $a0, store this new address in $t1
#addi $a0, $a0, 1
add $t1, $s0, $a0
#srlv $t1, $s0, $a0

#isolates that bytesized char, puts it into $t2
lbu $t2, ($t1)
#beq $t2, 0x5c, loop2

#replaces char in original string with "*"
li $t3, 0x2a
sb $t3, ($t1)

beq $t1, $t3, loop2
#decrement counter
addi $t0, $t0, -1

#loop return
j loop2


loop3:
la $a0, string0
li $v0, 4
syscall

li $v0, 10
syscall
4

1 に答える 1

0
  1. ループ (loop2:) の反復ごとに乱数シードをリセットしています。
  2. システムコール 40 と 42 はそれぞれ、 と にある 2 つのパラメータを取り$a0ます $a1ここを参照してください。
  3. 一時レジスタ$t0,...,$t9は、それぞれによって変更されます syscall。代わりに、呼び出し先の保存されたレジスタを使用する必要があります $s0,...$s8
于 2012-10-15T22:09:11.573 に答える