Assembly MIPS返回的值不正确

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} 假

我有一个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}
假设变量的定义如下:

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。你的解决方案是正确的,所以要容易得多。非常感谢