使用有限类型和数量的运算操作实现一组给定功能的函数
资源文件列表:

sy1/
sy1/1.docx 482.26KB
sy1/bits.c 11.87KB
资源介绍:
计算机组成原理实验要求 1、所有实验在IA-32+Linux+C+gcc 平台(开源项目平台)上进行; 2、所有实验要求在linux下创建与学号相关的用户,在此用户下编写调试代码; 例如:假设我的学号为1234567,则创建的用户名为sy1234567 3、请分别基于“计算机组成原理实验1.docx”和“实验1-数据表示实验要求”、“计算机组成原理实验2.docx”和“实验2-拆弹实验要求”、“计算机组成原理实验3.docx”和“实验3-缓冲区溢出攻击实验要求” 完成代码功能;
课 程 实 验 报 告
课程名称: 计算机组成原理
专业班级:
学 号:
姓 名:
指导教师:
报告日期:

1
实验 1: 数据表示
1.1 实验概述
实验目的:更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。
实验目标:加深对数据二进制编码表示的了解。
实验要求:使用有限类型和数量的运算操作实现一组给定功能的函数。
实验语言:c
实验环境:linux、gcc
实验资料:datalab-handout.tar.gz
实验中,你需要解开一系列编程“难题”——使用有限类型和数量的运算操
作实现一组给定功能的函数。
可用的运算符:“! ~ & ^ | + << >>”
运算符
描述
实例
!
逻辑非运算符。用来逆转操作数的逻辑状态。如
果条件为真则逻辑非运算符将使其为假。
A && B 为假,则
!(A && B) 为真。
~
按位取反运算符。是一元运算符,具有"翻转"位
效果,即 0 变成 1,1 变成 0。
~60 为 -61
&
按位与运算符。如果同时存在于两个操作数中,
二进制 AND 运算符复制一位到结果中。
60 & 13 为 12
^
按位异或运算符。如果存在于其中一个操作数中
但不同时存在于两个操作数中,二进制异或运算
符复制一位到结果中。
60 ^ 13 为 49
|
按位或运算符。如果存在于任一操作数中,二进
制 OR 运算符复制一位到结果中。
60 | 13 为 61
+
把两个操作数相加
<<
二进制左移运算符。左操作数的值向左移动右操
作数指定的位数。
60 << 2 为 240
>>
二进制右移运算符。左操作数的值向右移动右操
作数指定的位数。
60 >> 2 为 15

2
1.2 实验内容
需要完成实验资料 datalab-handout.tar.gz 中 bits.c 的函数功能,具体分
为三大类:位操作、补码运算和浮点数操作。
1)位操作
表 1 列出了 bits.c 中一组操作和测试位组的函数。其中,“级别”栏指出各函
数的难度等级(对应于该函数的实验分值),“功能”栏给出函数应实现的输出
(即功能),“约束条件”栏指出你的函数实现必须满足的编码规则(具体请查看
bits.c 中相应函数注释),“最多操作符数量”指出你的函数实现中允许使用的操
作符的最大数量。
表 1 位操作题目列表
级
别
函数名
功能
约束条件
最多操
作符数
1
lsbZero
将x的最低有效位(LSB)清零
仅能使用! ~ &
^ | + << >>
5
2
byteNot
将x的第n个字节取反(字节从LSB
开始到MSB依次编号为0-3)
仅能使用! ~ &
^ | + << >>
6
2
byteXor
比较x和y的第n个字节(字节从
LSB开始到MSB依次编号为0-3),
若不同,则返回1;若相同,则返
回0
仅能使用! ~ &
^ | + << >>
20
3
logicalAnd
x&& y
仅能使用! ~ &
^ | + << >>
20
3
logicalOr
x|| y
仅能使用! ~ &
^ | + << >>
20
3
rotateLeft
将x循环左移n位
仅能使用! ~ &
^ | + << >>
25
4
parityCheck
若x有奇数个1,则返回1;否则,
返回0
仅能使用! ~ &
^ | + << >>
20
2)补码运算
表 2 列出了 bits.c 中一组使用整数的补码表示的函数。可参考 bits.c 中注释说
明和 tests.c 中对应的测试函数了解其更多具体信息。

3
表 2 补码运算题目列表
级
别
函数名
功能
约束条件
最多操
作符数
2
mul2OK
计算2*x,如果不溢出,则
返回1,否则,返回0
仅能使用~ & ^ | +
<< >>
20
2
mult3div2
计算(x*3)/2,朝零方向取
整
仅能使用! ~ & ^ | +
<< >>
12
3
subOK
计算x –y,如果不溢出,则
返回1,否则,返回0
仅能使用! ~ & ^ | +
<< >>
20
4
absVal
求x的绝对值
仅能使用! ~ & ^ | +
<< >>
10
3)浮点数操作
表 3 列出了 bits.c 中一组浮点数二进制表示的操作函数。可参考 bits.c 中注释
说明和 tests.c 中对应的测试函数了解其更多具体信息。注意 float_abs 的输入参数
和返回结果(以及 float_f2i 函数的输入参数)均为 unsigned int 类型,但应作为单
精度浮点数解释其 32 bit 二进制表示对应的值。
表 3 浮点数操作题目列表
级
别
函数名
功能
约束条件
最多操
作符数
2
float_abs
返回浮点数‘|f|’的二进制
表示,当输入参数是
NaN时,返回NaN
仅能使用任何整型/无符
号整型操作,包括||,&&
以及if,while控制结构
10
4
float_f2i
返回浮点数‘f’的强制整
型转换“(int)f”表示
仅能使用任何整型/无符
号整型操作,包括||,&&
以及if,while控制结构
30
1.3 实验设计
根据题目要求,选择合适的操作符来编写代码。
注意事项:
1、实验资料包中包含以下文件:
Makefile - Makes btest, fshow, and ishow
README - This file