1. ホーム
  2. string

[解決済み] MIPSでの文字列の反復処理と修正

2022-02-17 04:19:20

質問

MIPSアセンブリ言語で文字列のシーサーシフトを行うメソッドを書こうとしています。私の暗号化方法は次のとおりです。

encryptMessage:
    la $s0, message     #s0 will hold message that will be iterated through
    lw $t1, key     #s1 will hold the key to shift by
    li $t0, 0       #t0 will be iterator, starting at 0

encryptionLoop:
    add $s1, $s0, $t0   #$s1 = message[i]
    lb $s2, 0($s1)      #Loading char to shift into $s2
    beq $s2, $zero, exit    #Breaking the loop if we've reached the end: http://stackoverflow.com/questions/12739463/how-to-iterate-a-string-in-mips-assembly
    add $s2, $s2, $t1   #Shifting the character by the key amount
    la $s1, ($s2)       #Changing the character in message to the shifted character
    addi $t0, $t0, 1    #i++
    j encryptionLoop    #Going back to the beginning of the loop

しかし、暗号化されたはずのメッセージを出力するexitメソッドでは、元々入力されていたメッセージをそのまま出力してしまいます。私のコードは、私が文字を変更したことを記憶しておらず、どうすれば記憶させることができるのかがわかりません。私はこの行を疑っています。

la $s1, ($s2)       #Changing the character in message to the shifted character

が関係しているようですが、どう直せばいいのかわかりません。

どのように解決するのですか?

わかりました。私が疑っていたその行は、本来なら

sb $s2 ($s1)