[解決済み] MIPSで文字列の最初の文字だけを置換するにはどうすればよいですか?
2022-02-17 05:58:55
質問内容
MIPSのアセンブリ言語コードは
sw
という命令で、文字列の1文字目だけを好きな文字に置き換えることができます。
しかし、何が起こるかというと、その代わりに のみ は1文字を変更し、コードは1文字目を変更し、次の3バイトの文字を破壊します。
どうしたらうまくいくのでしょうか?
以下のようなコードを書きました。
# replace 1st character of a string
.data
string: .asciiz "ABCDEFGH"
.text
main:
# load string's 1st address into the memory
la $a0, string
li $t0, 'X'
#addi $t0,$t0, 48
sw $t0, ($a0)
# print string
la $a0, string # load 1st address of the string
li $v0, 4 # syscall for string print
syscall
# exit program
li $v0, 10
syscall
入力します。
ABCDEFGH
期待される結果
XBCDEFGH
実際の結果
X
解決方法は?
を誤って使用した場合
sw
は、ワード、つまり4バイトのデータを格納するものです。
あなたのアルゴリズムでは、命令の後に
li $t0, 'X'
を書くと、'X'
32ビットのワードとして
をt0レジスタに登録してください。おそらく、あなたのマシンは次のように構成されています。
リトルエンディアン
と
$t0
これは32ビットのレジスタで、0x00000058(0x58はXのアスキーコード)の値を保持します。
でメモリに書き込むと
sw $t0, ($a0)
32ビットが全て書き込まれ、元々 "ABCDEFGH" であったメモリの内容が "X0GH" になるのです。
印刷を依頼すると、' \0' の位置が
string+1
が文字列の終端とみなされ、'X'だけが表示されます。
修正方法は、その行を
sw $t0, ($a0)
と
sb $t0, ($a0)
で、レジスタの最下位バイト(つまり'X')だけがメモリに書き込まれます。
関連
-
[解決済み] Go StartsWith(str 文字列)
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] ある文字列が特定の単語を含んでいるかどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Go StartsWith(str 文字列)
-
[解決済み] Luaで文字列がnilまたは空でないかをチェックする
-
[解決済み] LC-3アセンブリ言語で文字列を印刷する (super noob)
-
[解決済み] OCAML - 文字列と部分文字列
-
[解決済み] Goで複数行の文字列はどのように書くのですか?
-
[解決済み] OCamlでcharから文字列に変換する
-
[解決済み] 動的構造体参照の引数は、有効なフィールド名として評価する必要があります。
-
[解決済み] PowerShell の " (" - 中括弧 ) の分割について
-
[解決済み】Goで空の文字列をテストする最良の方法は何ですか?
-
[解決済み] 複数行の文字列をカンマで区切られた1つの文字列に変換する