在MIPS中将ASCII字符值的寄存器作为操作数的指令

在MIPS中将ASCII字符值的寄存器作为操作数的指令,mips,Mips,我在MIPS中学到了这一点, 对于无符号和有符号的数字有相同的操作(例如lbu与lb) 还了解了在使用ASCII字符进行操作时,无符号操作非常有用。 例如使用lbu而不是lb 但我不知道为什么。 如果$s0的值为'0'字符,则该字符的十六进制值为0x30, 那么下面的两个指令不是有相同的结果吗?如果不是,你能解释一下原因吗 lb $t1, $s0 lbu $t1, $s0 另外,将两个ASCII字符值寄存器作为操作数的加法或减法运算也需要是无符号运算吗?(add/subvs.addu/sub

我在MIPS中学到了这一点, 对于无符号和有符号的数字有相同的操作(例如
lbu
lb

还了解了在使用ASCII字符进行操作时,无符号操作非常有用。 例如使用
lbu
而不是
lb

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

lb $t1, $s0

lbu $t1, $s0
另外,将两个ASCII字符值寄存器作为操作数的加法或减法运算也需要是无符号运算吗?(
add
/
sub
vs.
addu
/
subu

谢谢

1)使用lb和lbu,当字节的MSB为0时,将得到相同的结果,但如果为1,则lb将用“1”填充其余3个字节,而lbu将用“0”填充它们

2) 除了溢出检测之外,在add/sub(u)中没有区别


不客气

对于值0x30,是的,它们几乎是等价的,但是对于,比如说0xab。。。此外,尽管我对MIPS不太了解,但不同的CPU标志(零、符号、溢出等)可能以不同的方式受到无符号加载和有符号加载的影响。您必须查阅指令集参考以确定…MIPS CPU没有标志。