Assembly 如何对mips(汇编)中程序参数中给定的2的补码进行签名和扩展

Assembly 如何对mips(汇编)中程序参数中给定的2的补码进行签名和扩展,assembly,binary,mips,twos-complement,sign-extension,Assembly,Binary,Mips,Twos Complement,Sign Extension,我试图对从mips中的程序参数得到的2的补码进行签名扩展。如何执行此操作?一种方法是利用MIPS sra指令,此指令执行-它在符号位中右移寄存器。 通过使用sll将最左边读取的8位值置于最有效位置,我们使其符号位与寄存器符号位一致,然后使用sra: 对于内存中的值,将加载与lbu相反的扩展字节符号 由于,带符号的seb rt,rs指令扩展GP寄存器的最低有效字节 参数的大小和输出的大小是多少?参数是2的补码中的8位二进制数。符号扩展为32位,因为我最终会将其转换为十六进制形式。如何将其打印到控制

我试图对从mips中的程序参数得到的2的补码进行签名扩展。如何执行此操作?

一种方法是利用MIPS sra指令,此指令执行-它在符号位中右移寄存器。 通过使用sll将最左边读取的8位值置于最有效位置,我们使其符号位与寄存器符号位一致,然后使用sra:

对于内存中的值,将加载与lbu相反的扩展字节符号


由于,带符号的seb rt,rs指令扩展GP寄存器的最低有效字节

参数的大小和输出的大小是多少?参数是2的补码中的8位二进制数。符号扩展为32位,因为我最终会将其转换为十六进制形式。如何将其打印到控制台?@wolverinexci,这取决于您的执行环境。MARS和SPIM都有打印数字的系统调用。如果你在这方面有困难,可以在这个网站上搜索可能的问题,如果没有一个能让你满意,试着问一个新的问题。由于这不是一个论坛,我们并没有真正参与问答的乒乓球,每个问题都必须是独立的,因为它的答案必须是独立的。在这之后,我做了一个系统调用。我做了li$v0,4LA$a0,$a0我想这是地址系统调用的位置,但我确实有一个超出范围的错误。MIPS32r2添加了一个seb dst,src sign extend byte指令。看见gcc将其与-march=mips32r2一起使用,但在其他情况下使用左/右移位,如您所示。@PeterCordes非常感谢您!这是一个非常好的附加组件!
#Assume $a0 is a) 0x40 b) 0x80
sll $a0, $a0, 24      #a) $a0 = 0x40000000 b) $a0 = 0x80000000
sra $a0, $a0, 24      #a) $a0 = 0x00000040 b) $a0 = 0xffffff80