1. ホーム
  2. assembly

[解決済み】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つの命令がどのようなものかを除けば、すべて理解できると思います。 andiori この場合、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