我想要得到的輸出: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。錯誤:警告:從「長」到「廉政」隱式轉換改變從68738383881到18907145 [-Wconstant轉換]
而且
警告值:函數「stncmp」是C99 [無效隱式聲明 - Wimplicit-function-declaration] if(stncmp(add,binary,4)== 1)
有人可以幫忙嗎?
繼承人LC3指令的副本以供參考http://ece224web.groups.et.byu.net/reference/LC3_Instructions.gif
應該是什麼?對不起,我是C新手(來自python背景) – Landon 2014-10-20 06:48:59
從哪裏得到「0001001」等是二進制文字的想法?他們不是。它們是八進制的(正如在任何體面的初學者的C語言教程中寫下的那樣) – 2014-10-20 06:49:26
0001000110100011是將十六進制值轉換爲二進制。 – Landon 2014-10-20 07:11:42