【发布时间】:2014-10-20 06:45:24
【问题描述】:
我想得到输出:
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
【问题讨论】:
-
应该是什么?抱歉,我是 C 新手(来自 python 背景)
-
您从哪里得知
0001001等是二进制文字?他们不是。它们是八进制的(可能写在任何体面的初学者的 C 语言教程中!) -
0001000110100011 是将十六进制值转换为二进制。
-
@Landon 在 C 和 C++ 中 - 在 Python 中 - 二进制文字以“0b”为前缀,以“0”开头的整数文字是八进制。另外,
and和add太小了,无法比较字符串和数字。