2014-04-04 48 views
1

我知道在MIPS中, 对于无符号和有符号数(例如lbulb)有相同的操作。以ASCII码字符值为寄存器的指令作为MIPS中的操作数

而且还了解到,使用ASCII字符操作时,无符号操作很有用。 如使用lbu而不是lb

但我不知道为什么。 如果$s0的值为'0'字符,则该字符的十六进制值为0x30, 那么是不是以下两条指令具有相同的结果?如果不是,你能解释我为什么吗?

lb $t1, $s0 

lbu $t1, $s0 

另外,作为操作数还需要无符号操作的是带有两个ASCII字符值的寄存器的加减操作吗? (add/subaddu/subu

谢谢!

+0

对于值0x30,是的,这些几乎是等价的,但不适用于,比如说0xab ...另外,尽管我根本不了解MIPS,但可能有不同的CPU标志(零,符号,溢出等)受到无符号负载与有符号负载的不同影响。您必须查阅指令集参考才能知道...... – twalberg

+0

MIPS CPU没有标志。 – markgz

回答

2

1)使用lb和lbu,当字节的MSB为0时,你将得到相同的结果,但如果它是1,那么lb将用'1's填充剩余的3个字节,而lbu将填充'0'

2)添加/子(u)没有区别,除了溢出检测

不客气!