计算机组成学习记录-体系结构-逻辑指令

本文详细介绍了MIPS汇编语言中的逻辑指令,如and、or和xor等,它们用于位操作,包括屏蔽位、组合位以及利用immediate指令进行位赋值。文章还提到如何通过其他指令实现not操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

汇编语言中的逻辑指令具有强大的功能,它们可以实现的不只是逻辑计算,也常常用于屏蔽位,组合位等功能。

逻辑指令中的R-指令

MIPS中的逻辑操作包括and,or,xor,nor,都是按位操作。这些逻辑操作都有相应的指令,也有各自不同的用法功能。

and

and可以用于屏蔽位,即将不用的位清零。

and $s1, $s2, $s3
# $s2 = 0xFFFF0000
# $s3 = 0x8A4C5321
# add指令执行后,$s1 = 0x8A4C0000

从例中可见,add屏蔽了$s3的低16位。
通过改变$s2中为0的位,可以屏蔽$s3中任何一个子集,对于以其他寄存器为操作数的and指令也是如此。

看到这个,我不禁联想到C语言中数组的清零,感觉如果数组中每个元素都与$0进行and操作,就可以实现清零,不知道实际操作是什么样的

or

or可以用于组合位,将不同寄存器中的内容组合在一起。

or $s1, $s2, $s3
# $s2 = 0xFFFF0000
# $s3 = 0x00005321
# add指令执行后,$s1 = 0xFFFF5321

这里可以见到$s2的高十六位与$s3的低十六位组合在了一起,其他实现组合作用的or指令也都像这样。

nor

注意到,MIPS逻辑操作中并没有not指令。其实not指令可以由nor轻松实现。
将需要取否的寄存器作为操作数与$0进行nor操作,该寄存器中为1的位由于与0不同,故成为0,为0的位与0相同,故为1。
如此就实现了not操作。

逻辑操作中的I-指令

MIPS中逻辑的立即数操作有andi,ori,xori。

ori

把一个立即数与$0一同进行ori操作,则可以将该立即数载入目的寄存器,实现赋值作用,但这里只能赋值目的寄存器的低十六位。
对寄存器的高十六位进行赋值时,常常采用lui指令。方便记忆,我把它看作load upper immediate。
这两个方式结合在一起,就可以对一个字赋值。

低十六位赋值还有其他的赋值方式,用addi指令,将$0与立即数相加即可。

nori

注意到所给出的逻辑操作中并没有nori,这是因为nori也可以由其他指令实现。
先进行赋值操作,再用nor即可实现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lcandlyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值