LC-3 to C conversion

LC-3 to C conversion

本文关键字:conversion to LC-3      更新时间:2023-10-16

我想得到输出:

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

但我在type和stncmp中遇到了各种各样的错误。错误:警告:从"long"到"int"的隐式转换将值从68738383881更改为18907145[-Wconstant conversion]

警告:函数"stncmp"的隐式声明在C99中无效[-Wimplicit函数声明]如果(stncmp(加法,二进制,4)==1)

有人能帮忙吗?

以下是lc3指令集的副本供参考http://ece224web.groups.et.byu.net/reference/LC3_Instructions.gif

不能用二进制值初始化变量。以0开头表示该值为octal。以0x开头表示该值为hexademical所以你的初始化可以这样做:

int testBinary = 0x11A3;

至于stncmp,你不能用它来比较char*int。我想你可以为你的案例初始化testbinary

char testbinary[17] = "0001000110100011";

然后可以将其与and进行比较。