簡體   English   中英

andi和ori在這個項目中做了什么?

[英]What do andi and ori do in this program?

        .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

我想,除了兩個指令andiori在這種情況下如何工作之外,我能理解一切。 ori似乎使得ASCII 20位置向前打印,但為什么以及如何?

帶有0x7f的andi刪除最高有效位,ASCII不使用它(僅使用7位,或0-128來映射字符)。 0x7f是二進制的0111 1111。 由於任何AND與0(最高有效位為0,如您所見)為0,任何AND與1保持不變,操作將刪除最高有效位。

帶有0x20的ori只會設置第6位(2 5 )。 0x20是二進制的0010 0000。 因為任何OR與1(第6位,如你所見)是1,任何OR與0保持相同,它導致設置第6位。

正如評論所說,只是在r16最初小於32的情況下,或者在r16> = 128且<160的情況下,它將使數字> = 0x20。 但這並不意味着它總是會添加0x20(例如r16最初是32 --addi - > 33 --andi - > 33 --ori - > 33)。

作為旁注,與常量(也稱為掩碼 )的AND'通常用於從原始數據中提取某些位。 並且它將提取掩碼中相應位為1的任何位。

與常數進行“或”運算通常是將某些位設置為1.它將設置掩碼中相應位為1的位。

順便說一下,要將某個位設置為0,除了要設置的位之外,您可以使用常量除1之外的常量。 要切換某些位,可以使用相應位1和其余0的常量進行異或。

使用and組裝是一種確保關閉的方法。 考慮:

1101 and
0111
---------
0101

僅在第二列和最后一列中,1s存在於頂部AND底部,有效地確保第一位被關閉。

在匯編中使用'或'是確保某個位開啟的一種方法。 考慮:

1101 or
0111
----------
1111

底行的1s確保無論第一個數字是什么,最后三位都將打開。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM