-5

出力を取得したい:

add reg1,reg2,reg3

私のコード:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void instruction(int binary);
int binaryToDecimal(int n);

int main()
{
    int testBinary = 0001000110100011;
    instruction(testBinary);
}

void instruction(long binary)
{
    char add[4]  = "0001";
    char and[4]  = "0101";
    int binaryRep;

    if(stncmp(add, binary, 4) == 1)
    {
        int reg1;
        int reg2;
        int reg3;
        int temp3;

        binary = binary << 4 ;

        binary = binary << 3 ;
        memcpy(reg1, binary, 3);

        binary = binary << 3 ;
        memcpy(reg2, binary, 3);

        binary = binary <<6;
        memcpy(reg3, binary, 3);

        reg1 = binaryToDecimal(reg1);
        reg2 = binaryToDecimal(reg2);
        reg3 = binaryToDecimal(reg3);

        printf("add r%d, r%d, r%d", reg1,reg2,reg3);
    }

    if(stncmp(and, binary, 4) == 1)
    {
        int reg1;
        int reg2;
        int reg3;
        int temp3;

        binary = binary << 4 ;
        binary = binary << 3 ;
        memcpy(reg1, binary, 3);

        binary = binary << 3 ;
        memcpy(reg2, binary, 3);

        binary = binary <<6;
        memcpy(reg3, binary, 3);

        reg1 = binaryToDecimal(reg1);
        reg2 = binaryToDecimal(reg2);
        reg3 = binaryToDecimal(reg3);

        printf("and r%d, r%d, r%d", reg1,reg2,reg3);


    }

}

int binaryToDecimal(int n) /* Function to convert binary to decimal.*/
{
    int decimal=0, i=0, rem;
    while (n!=0)
    {
        rem = n%10;
        n/=10;
        decimal += rem*pow(2,i);
        ++i;
    }
    return decimal;
}

しかし、タイプとstncmpであらゆる種類のエラーが発生しています。エラー: 警告: 'long' から 'int' への暗黙的な変換により、値が 68738383881 から 18907145 に変更されます [-Wconstant-conversion]

警告: 関数 'stncmp' の暗黙の宣言は C99 では無効です [-Wimplicit-function-declaration] if(stncmp(add, binary, 4) == 1)

誰か助けてくれませんか?

参照用の lc3 命令セットのコピーを次に示しますhttp://ece224web.groups.et.byu.net/reference/LC3_Instructions.gif

4

1 に答える 1

0

バイナリ値で変数を初期化することはできません。で始まる0ということは、値が であることを意味しますoctal。で始まるという こと0xは、値がhexademical

int testBinary = 0x11A3;

に関しては、 と比べてstncmp使えません。あなたのケースでは、このように初期化できると思います:char*inttestbinary

char testbinary[17] = "0001000110100011";

そして、あなたはそれを比較することができます and.

于 2014-10-20T07:06:21.507 に答える