2014-10-20 113 views
-5

我想要得到的輸出: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

+0

應該是什麼?對不起,我是C新手(來自python背景) – Landon 2014-10-20 06:48:59

+0

從哪裏得到「0001001」等是二進制文字的想法?他們不是。它們是八進制的(正如在任何體面的初學者的C語言教程中寫下的那樣) – 2014-10-20 06:49:26

+0

0001000110100011是將十六進制值轉換爲二進制。 – Landon 2014-10-20 07:11:42

回答

0

不能初始化二進制值的變量設置。 從0開始表示值爲octal。 與0x開始意味着該值是hexademical 所以你的初始化可能這樣做:

int testBinary = 0x11A3; 

至於stncmp,你不能用它TI與int比較char*。我猜你可能會初始化testbinary像這樣爲你的情況:

char testbinary[17] = "0001000110100011"; 

然後你就可以用and進行比較。

+0

你能解釋一下我會怎麼做嗎? – Landon 2014-10-20 07:13:06

+0

你到底在做什麼? – Seprum 2014-10-20 14:41:50