计算机组成原理实验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虚拟机操作:

  1. 安装好CentOS7

  2. 安装增强功能,挂载其光盘:https://www.cnblogs.com/hdk1993/p/4800957.html
    常用Linux指令:https://www.html.cn/system/unix/112676774124225.html

  3. 共享文件夹设置:不要勾选只读
    共享文件夹设置截图

  4. 执行:

[root@localhost datalab]# ./dlc -e bits.c
[root@localhost datalab]# make btest	//每次更新保存bits.c文件后都得执行一遍
[root@localhost datalab]# ./btest	//运行测评程序

作业完成截图

posted @ 2022-10-04 21:48  Nolca  阅读(65)  评论(0编辑  收藏  举报