Assembly MIPS返回的值不正确
我有一个C函数:Assembly MIPS返回的值不正确,assembly,mips,Assembly,Mips,我有一个C函数: int bin_img(unsigned char *ptr, int w, int h, unsigned char limiar); 在我的代码中,我使用的函数如下: printf("The value is %d\n",bin_img(dp, width, height, LIMIAR)); #define LIMIAR 128 unsigned char *dp; int w = 5; int h = 0; dp[] = {74,250,153,28,26} 假
int bin_img(unsigned char *ptr, int w, int h, unsigned char limiar);
在我的代码中,我使用的函数如下:
printf("The value is %d\n",bin_img(dp, width, height, LIMIAR));
#define LIMIAR 128
unsigned char *dp;
int w = 5;
int h = 0;
dp[] = {74,250,153,28,26}
假设变量的定义如下:
printf("The value is %d\n",bin_img(dp, width, height, LIMIAR));
#define LIMIAR 128
unsigned char *dp;
int w = 5;
int h = 0;
dp[] = {74,250,153,28,26}
我必须在MIPS中编程我的bin_img函数
假设我有以下代码:
bin_img:
lb $15,0($4)
move $2,$15
jr $31
它将打印我数组中的第一个元素。
如果我这样做
或者这个:
bin_img:
lb $15,2($4)
move $2,$15
jr $31
它将打印一些负数,如果我这样做:
bin_img:
lb $15,3($4)
move $2,$15
jr $31
还是这个
bin_img:
lb $15,4($4)
move $2,$15
jr $31
它将分别打印28和26。为什么要打印负数
它是否应该打印250和153?它打印的是负数,因为您使用的是LoadByte
lb
的有符号版本,而不是无符号版本lbu
lb
指令从内存中读取一个字节,并将其存储在目标寄存器的8个最低有效位中,并用读取的字节最高有效位的值设置剩余的24位。lbu
指令将这24位设置为零
因此,当您的输入字节>=128时,您为打印数字而发出的系统调用将寄存器内容视为一个补码,从而打印负数。要修复您的程序,您应该使用
lbu
说明。谢谢。已解决验证读取数是否大于0的问题。如果没有,则添加255。你的解决方案是正确的,所以要容易得多。非常感谢