[解決済み】andiとoriはこのプログラムで何をするのですか?
2022-02-04 23:16:24
質問内容
.global main # makes label "main" globally known
.text # Instructions follow
.align 2 # Align instructions to 4-byte words
main: movi r16,0x47 # Load the hexadecimal value 41
# to register r16
loop: mov r4,r16 # Copy to r4 from r16
nop # (later changed to call hexasc)
nop # (later changed to mov r4,r2)
movia r8,putchar # copy subroutine address to a register
callr r8 # call subroutine via register
addi r16, r16,1 # Add 1 to register r16
andi r16, r16, 0x7f # mask with 7 bits
ori r16, r16, 0x20 # set a bit to avoid control chars
br loop # Branch to loop
.end # The assembler will stop reading here
foo bar bletch # comes after .end - ignored
の2つの命令がどのようなものかを除けば、すべて理解できると思います。
andi
と
ori
この場合、oriはASCII 20ポジション前が印刷されるように作っているようですが、なぜ、どのようにしているのでしょうか?
解決方法は?
andi と ori はともにビット演算子です。
その違いを見るために、concider"を考えてみましょう。
and $rd, $rs, $rt
or $rd, $rs, $rt
対
andi $rt, $rs, immed
ori $rt, $rs, immed
http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Mips/bitwise.html
関連
-
[解決済み】MIPSで整数の絶対値?
-
[解決済み] cmplとcmpの違いについて
-
[解決済み] popまたはadd esp、4 ? その差は何ですか?
-
[解決済み] WAWハザードとは?
-
[解決済み] MIPS分岐実行順序(beqz)
-
[解決済み] アセンブリ命令のトラップは何をするのですか?
-
[解決済み] .quadディレクティブはアセンブリでどのように機能するのですか?
-
[解決済み] ARMはSDIVとUDIVを区別していますが、ADD、SUB、MULでは区別していないのはなぜですか?
-
[解決済み] LC3 LEA 命令と格納された値
-
[解決済み】レトポリンとはどのようなもので、どのように機能するのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】なぜMIPS用のsubiオペコードは存在しないのですか?
-
[解決済み] error A2022: 命令オペランドは同じサイズでなければなりません。
-
[解決済み] ミップスアセンブリの文字列の長さ
-
[解決済み] MIPSの左シフト
-
[解決済み] MIPSプログラムの中で`lw`と`sw`が実際にどのように機能するかを理解する
-
[解決済み] x86 8086 アセンブリで 0-9 の範囲の乱数を生成する。
-
[解決済み] ビットシフト演算子を使って10進数を2進数で表示するMIPS
-
[解決済み] cmp命令の理解
-
[解決済み] LC3 LEA 命令と格納された値
-
[解決済み] ST(0)をEAXに移動させる方法は?