Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly andi和ori在这个项目中做什么?_Assembly_Mips - Fatal编程技术网

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