Преобразование LC-3 в C

Я хочу получить вывод:

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-преобразование]

А также

Предупреждение: неявное объявление функции ‘stncmp’ недопустимо в C99 [-Wimplicit-function-объявление] if (stncmp (add, binary, 4) == 1)

Может кто-нибудь, пожалуйста, помогите?

Вот копия набора команд lc3 для справки http://ece224web.groups.et.byu.net/reference/LC3_Instructions.gif

-5

Решение

Вы не можете инициализировать переменные двоичными значениями.
Начиная с 0 означает, что значение octal,
Начиная с 0x означает, что значение hexademical
Так что ваша инициализация может быть сделана так:

int testBinary = 0x11A3;

Что касается stncmpВы не можете использовать это, чтобы сравнить char* с int, Я думаю, вы можете инициализировать ваш testbinary как это для вашего случая:

char testbinary[17] = "0001000110100011";

И тогда вы можете сравнить это с and,

0

Другие решения


По вопросам рекламы [email protected]