Assembly andi和ori在这个项目中做什么?
我想,除了这两条指令Assembly andi和ori在这个项目中做什么?,assembly,mips,Assembly,Mips,我想,除了这两条指令andi和ori在这种情况下的工作方式,我什么都能理解。ori似乎使ASCII 20位置向前打印,但为什么和如何打印?andi和ori都是位运算符: 要看到区别,concider“ 对 and $rd, $rs, $rt or $rd, $rs, $rt andi使用0x7f将删除ASCII未使用的最高有效位(仅使用7位或0-128来映射字符)。0x7f是二进制的0111111。因为任何内容和0(如您所见,最高有效位为0)如果为0,则任何值和1保持不变,则该操作将删除最
andi
和ori
在这种情况下的工作方式,我什么都能理解。ori似乎使ASCII 20位置向前打印,但为什么和如何打印?andi和ori都是位运算符:
要看到区别,concider“
对
and $rd, $rs, $rt
or $rd, $rs, $rt
andi
使用0x7f将删除ASCII未使用的最高有效位(仅使用7位或0-128来映射字符)。0x7f是二进制的0111111。因为任何内容和0(如您所见,最高有效位为0)如果为0,则任何值和1保持不变,则该操作将删除最高有效位
ori
with 0x20将只设置第6位(25)。0x20在二进制中为0010 0000。由于anything或with 1(如您所见,第6位)为1,且anything或with 0保持不变,因此会设置第6位
如注释所述,如果r16最初小于32,或者r16>=128且小于160,则该数字将>=0x20。但这并不意味着它将始终添加0x20(例如,r16最初为32--addi-->33--andi-->33--ori-->33)
作为旁注,带常数的AND’ing(也称为掩码)通常用于从原始数据中提取某些位。它将在掩码中对应位为1的任意位提取
带常数的OR’ing通常用于将某些位设置为1。它将设置掩码中对应位为1的位
顺便说一下,要将某些位设置为0,您可以使用除要设置的位之外的全部为1的常数和。要切换某些位,您可以使用相应位1的常数和其余0进行异或。在汇编中使用
和
是确保位关闭的一种方法。请考虑:
andi $rt, $rs, immed
ori $rt, $rs, immed
只有在第二列和最后一列中,1才存在于顶部的和底部的中,从而有效地确保第一位被关闭
在汇编中使用“或”是确保位开启的一种方法。请考虑:
1101 and
0111
---------
0101
最下面一行的1确保无论第一个数字是什么,最后三位都将打开。但是为什么带有0x7f的andi
会删除最重要的位?为什么带有0x20的ori
只设置第六位?如果使用其他参数,结果将是另一种方式?感谢您的澄清。
1101 and
0111
---------
0101
1101 or
0111
----------
1111