计算机组成原理实验1
莎比机组,单片机不是不学了吗
计算机系统基础实验一
1.1 实验概述
实验目的:更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。
实验目标:加深对数据二进制编码表示的了解。
实验要求:使用有限类型和数量的运算操作实现一组给定功能的函数。
实验语言:c
实验环境:linux、gcc
实验资料:datalab-handout.tar.gz
1.2参考答案
原版参考:https://www.cnblogs.com/linlianghe/p/14269455.html
int lsbZero(int x) {
return x>>1<<1;
}
int byteNot(int x, int n) {
return (x ^ (0xff<<(n<<3)));
}
int byteXor(int x, int y, int n) {
n=n<<3;
x=x>>n;
y=y>>n;
x=x&0xff;
y=y&0xff;
return !!(x^y);
}
int logicalAnd(int x, int y) {
return (!(!x) & !(!y));
}
int logicalOr(int x, int y) {
return (!(!x) | !(!y));
}
int rotateLeft(int x, int n) {
return x<<n|(x>>(32+(~n+1))&(~(((1<<31)>>31)<<n)));
}
int parityCheck(int x) {
int y=x<<16;
y=y^x;
y=y^(y<<8);
y=y^(y<<4);
y=y^(y<<2);
y=y^(y<<1);
y=y>>31;
return !(!y);
}
int mul2OK(int x) {
return (((x>>30)&1)^((x>>31)&1))^1;
}
int mult3div2(int x) {
int y=(x<<1)+x;
return (y>>1)+(((y>>31)&1)&(((y<<31)>>31)&1));
}
int subOK(int x, int y) {
int m = (x>>31)&1;
int n = (y>>31)&1;
return !((m^n)&(m^(((x+(~y+1))>>31)&1)));
}
int absVal(int x) {
int n=x>>31;
return (n^x)+(n&1);
}
unsigned float_abs(unsigned uf) {
int exp=uf&0x7f800000;
int m=uf&0x007fffff;
if (exp==0x7f800000 && m!=0) return uf;
return (uf&0x7fffffff);
}
int float_f2i(unsigned uf) {
int abs=uf&0x7fffffff;
int sign=-1;
if((uf>>31)==0) sign=1;
int exp=(abs>>23)-127;
if (exp>=32) return 0x80000000; //小坑:float转int溢出也算"infinity"
int m=(uf&0x007fffff) | 0x00800000;
if (exp<=-1) exp=-1;
int res=m>>(23-exp);
return sign*res;
}
1.3 CentOS 7 Linux在VirtualBox虚拟机操作:
-
安装好CentOS7
-
安装增强功能,挂载其光盘:https://www.cnblogs.com/hdk1993/p/4800957.html
常用Linux指令:https://www.html.cn/system/unix/112676774124225.html -
共享文件夹设置:不要勾选只读
-
执行:
[root@localhost datalab]# ./dlc -e bits.c
[root@localhost datalab]# make btest //每次更新保存bits.c文件后都得执行一遍
[root@localhost datalab]# ./btest //运行测评程序