湖南大学CS-2023期末考试解析

news2024/11/16 3:46:01

前言

有幸作为助教参与信息院“周末夜校”讲解2023年试卷第2-3题(汇编),借这个契机重新温习了一下这份试卷。

以下各部分的PPT由讲评助教分别完成并讲解。

  • 1,6题 @计科21杨助教
  • 2,3题 @计科21甘晴void
  • 4,5题 @智能21姚助教

由于2,3题过程较为繁杂而长,我将重新开一个页面专门讲解这两道题,这里只放答案。

> 甘晴void:由2023年CS两道汇编题看汇编题解法,争取满分-CSDN博客

.简答题(10 分)

小明仿照 IEEE 754 标准,对其进行了微调,形成了 HNU 2023 标准。
微调的地方为: IEEE 754 标准中,对于 k 位阶码,其偏移值为 2^( k-1)  -1 ,而 HNU 2023 标准中,规定偏移值为 2^ k -1
10bit 数字(其中 1bit 为符号位, 4bit 为阶码位, 5bit 为尾数位)为例,仅讨论 正数的情况。
请回答:
1 HNU 2023 标准与 IEEE754 标准相比,其表示的数字范围有何区别?
2 )对于 HNU 2023 标准与 IEEE754 标准,其不能表示的最小整数分别是多少?请写出其十进制值与二进制值表示。

【解答】(@计科21杨助教): 

(1)

(2)

.程序填空题(10 分,每空 2 分)

如下是一个 c 语言程序及其对应的汇编代码( 32 位机,小端环境下编译),请参照汇编代码,完成 c 程序的空缺部分。
c 语言程序:
int main()
{
    int i,j,flag;
    int sum= (1) 
    for( (2) ; (3) ;i++,j+=2)
    {
        flag= (4) ;
        sum+= (5) ;
    }
    return sum;
}
汇编代码如下:
main:
pushl %ebp
movl %esp, %ebp
subl $16, %esp
movl $17, -8(%ebp)
movl $5, -16(%ebp)
movl $1, -12(%ebp)
jmp .L2
.L5:
movl -16(%ebp), %eax
andl $1, %eax
testl %eax, %eax
jne .L3
movl -12(%ebp), %eax
addl $3, %eax
jmp .L4
.L3:
movl -16(%ebp), %eax
subl $2, %eax
.L4:
movl %eax, -4(%ebp)
subl $1, -16(%ebp)
movl -12(%ebp), %eax
imull -16(%ebp), %eax
addl -4(%ebp), %eax
addl %eax, -8(%ebp)
addl $1, -12(%ebp)
addl $1, -16(%ebp)
addl $2, -12(%ebp)
.L2:
movl -12(%ebp), %eax
movl -16(%ebp), %edx
addl %edx, %eax
cmpl $98, %eax
jle .L5
movl -8(%ebp), %eax
leave
ret

【答案】

.程序填空题(第一空 3 分,后面三空每空 4 分,共 15 分)

如下是一个 c 语言程序及其对应的汇编代码( 32 位机,小端环境下编译),请参照汇编代码, 完成 c 程序的空缺部分。
c 语言程序:
int f(int a,int b)
{
    if(0==a) return (1) ;
    return (2) ;
}

int g(int x)
{
    if(x<=0) return 0;
    if(x==1||x==2) return 1;
    return (3) ;
}

int main()
{
    int x=3,y=5;
    return f( (4) );
    return 0;
}
汇编代码如下:
f:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
cmpl $0, 8(%ebp)
jne .L2
movl 12(%ebp), %eax
imull 12(%ebp), %eax
jmp .L3
.L2:
movl 12(%ebp), %eax
movl 8(%ebp), %edx
addl %edx, %eax
movl %eax, (%esp)
call g
.L3:
leave
ret

g:
pushl %ebp
movl %esp, %ebp
pushl %ebx
subl $20, %esp
cmpl $0, 8(%ebp)
jg .L5
movl $0, %eax
jmp .L6
.L5:
cmpl $1, 8(%ebp)
je .L7
cmpl $2, 8(%ebp)
jne .L8
.L7:
movl $1, %eax
jmp .L6
.L8:
movl 8(%ebp), %eax
subl $2, %eax
movl %eax, (%esp)
call g
leal (%eax,%eax), %ebx
movl 8(%ebp), %eax
addl $3, %eax
movl %eax, (%esp)
call g
movl %eax, %edx
movl %edx, %eax
addl %eax, %eax
addl %edx, %eax
addl %ebx, %eax
.L6:
addl $20, %esp
popl %ebx
popl %ebp
ret

main:
pushl %ebp
movl %esp, %ebp
pushl %ebx
andl $-16, %esp
subl $32, %esp
movl $3, 24(%esp)
movl $5, 28(%esp)
movl 28(%esp), %eax
movl 24(%esp), %edx
movl %edx, %ecx
subl %eax, %ecx
movl %ecx, %eax
movl %eax, (%esp)
call g
movl %eax, %ebx
movl 28(%esp), %eax
movl %eax, 4(%esp)
movl 24(%esp), %eax
movl %eax, (%esp)
call f
imull %ebx, %eax
movl 28(%esp), %edx
movl 24(%esp), %ecx
addl %ecx, %edx
movl %eax, 4(%esp)
movl %edx, (%esp)
call f
movl -4(%ebp), %ebx
leave
ret

【答案】

.综合应用题(20 分)

一个函数调用的 C 代码如下:
#include "stdio.h"
void test(int *xp,int *yp,int i,int j)
{
 int size=sizeof(int), step=(i*(3*size)+j*size)/4;
 
 int *addr1=(int*)(xp+step);
 int *addr2=(int*)(yp+step); 
 int m=*addr1, n=*addr2;
 
 *addr1=n;
 *addr2=m;
}
int main()
{
 int A[3][3]={{1,4,7},{2,5,8},{3,6,9}};
 int B[3][3]={{10,20,30},{40,50,60},{70,80,90}};
 int *PA=*A;
 int *PB=*B;
 test(PA,PB,1,2);
 printf("A[1][2]=%d\n B[1][2]=%d\n", A[1][2],B[1][2]);
 return 0;
}
1. 该程序运行后,打印在屏幕上的结果是 _______________________(5 )
2. 将返回地址“ Rtn Addr” ,填入栈帧图中准确位置( 3 分);
3. 在主函数栈帧中的正确位置,填写 4 个传递参数( 12 分);
* 说明:当前 ESP EBP 指向子函数栈帧,图中每一格为 4 字节。
【答案】暂无

.综合应用题(20 分)

给定一个 32 Linux 系统,其高速缓存的大小为 64 字节, 2 路组相联,每个块 16 字节。 高速缓存采用的写策略是直写,替换策略为 LRU( 最近最少使用 )
A )( 2 分) 基础知识
A1) 高速缓存中有多少个组 ?
A2) 每个组中有多少缓存行 ?
B (10 ) 假设如下 :
  • 访问一次内存消耗 100 ns
  • 访问一次 cache 的开销是 1 ns
  • 忽略可能发生的其他时间开销(回收、存储到高速缓存等)
  • 如果使用高速缓存,我们总是会先访问高速缓存(因此,在这种情况下,高速缓存未命中的开销为 101 ns)
给定一个整数数组 :
int Arr[6][4];
Arr 数组从地址 0x00000000 开始。
如果我们要逐一访问数组中的以下元素 :
B1) “H” “M” 填空,分别表示高速缓存命中和高速缓存未命中。
B2 )如果不使用高速缓存,时间开销是多少 ?
B3 )如果使用高速缓存,时间开销是多少 ?
C) 8 分) 如果我们使用以下程序访问数组 :
int i, j;
for ( i = 0; i < 4; i++) {
    for ( j = 0; j < 6; j++) {
        Arr[j][i]++;
    }
}
C1) 如果不使用高速缓存,时间开销是多少 ?
C2) 如果使用高速缓存,时间开销是多少 ?
【答案】暂无

.综合分析题(25 分)

现有如下 C 代码片断:
……
extern int number=2
int sharedV(){ return number };
int main ()
{
 int i,child_status;
 pid_t pid[sharedV];
 void myHandler(int sig) {
 printf("Process received signal\n");
exit(0); }
 signal(SIGINT, myHandler);
 
 for(i=0;i< sharedV(); i++) {
 if ((pid[i]=fork())==0) { while(1);} }
 for (i=0; i<sharedV(); i++) {
 kill(pid[i],SIGINT);}
 
 for (i=0;i<sharedV(); i++) {
 
 pid_t wpid=wait(&child_status);
if (WIFEXITED(child_status))
 printf("Process %d: Hello,World!%d\n",wpid,WEXITSTATUS(child_status));
}
请阅读分析上述 C 代码后,尝试解答下列问题:
1 )这段代码的输出结果可能是什么?为什么会有这样的输出?
2 )在这段代码中 wait 函数的作用是什么?如果改用 waitpid 函数可能会产生什么影响?
3 )当观察该代码对应的可重定位目标文件时,发现如下信息:
请问这两行是什么意思?作用是什么?在可执行文件里面这两行会产生什么变化?
4 )对可执行文件进行反汇编观察时,发现在 <main> 部分对应 printf 函数调用的地方出现了如下汇编代码:
call 80483e0 <printf@plt>
继而查看 0X80483e0 地址处的内容,发现出现如下语句:
jmp *0x804a00c
push $0x0
jmp 80483d0 <_init+0x24>
请结合你学习的 PIC 的相关知识尝试解答这几条语句是干什么用的,以及后续对printf 的重定位过程。
5 )对于题干中的代码,不考虑数据结构和算法的变更,做什么修订可能能改善该代码的执行性能?
【解答】(@计科21杨助教)
(1)
(2)
(3)
(4)
(5)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1812850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HJS-DE1/3断电延时时间继电器 导轨安装 约瑟JOSEF

​HJS-DE断电延时时间继电器 HJS-DE1/3断电延时时间继电器 HJS-DE1/2断电延时时间继电器 HJS-DE断电延时时间继电器 用途 时间继电器HJS-DE1/3作为通电立即动作断电延时返回的元件&#xff0c;用于交流或直流保护和自动控制装置中&#xff0c;使被控元件得到所需延时。本继电…

10_Transformer预热---注意力机制(Attention)

1.1 什么是注意力机制(attention) 注意力机制&#xff08;Attention Mechanism&#xff09;是一种在神经网络中用于增强模型处理特定输入特征的能力的技术。它最早被应用于自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;特别是在机器翻译中&#xff0c;如Google的…

如何在Java中使用pdfbox,进行生成pdf操作,如文本居中,数据二列显示及图片显示?

pdfbox的基本使用 1. 添加 PDFBox 依赖 首先&#xff0c;确保你的项目中已经添加了 PDFBox 的 Maven 依赖。你可以使用类似以下的 Maven 依赖配置&#xff1a; <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId&g…

【第1章】Vue环境搭建

文章目录 前言一、安装Node1. 下载2. 安装3. 验证3.1 npm版本与Node.js版本3.2 验证环境 4. npm4.1 安装npm4.2 安装包4.3 全局安装包4.4 更新包4.5 删除包4.6 查看已安装的包4.7 初始化package.json 5. 国内源 二、安装Visual Studio Code1.下载2.安装3.安装Vue - Official 三…

Nuxt3 实战 (八):优雅的实现暗黑主题模式

前言 在 Nuxt3 中要实现暗黑模式&#xff0c;需要用到一个库&#xff1a;color-mode&#xff0c;它可以帮助我们很轻易地实现暗黑模式切换。 具体使用 安装 nuxtjs/color-mode 依赖&#xff1a; pnpm add nuxtjs/color-mode -D打开 nuxt.config.ts 配置文件注入依赖&#x…

【Linux】shell脚本变量——系统变量、环境变量和用户自定义变量

系统变量 系统变量是由系统预设的&#xff0c;它们通常在系统启动时被加载&#xff0c;并对所有用户和所有shell实例都有效。这些变量通常控制着系统的行为和配置&#xff0c;例如PATH&#xff08;命令搜索路径&#xff09;、HOME&#xff08;用户主目录&#xff09;等。系统变…

美团强势领涨恒指,港股即将迎来触底反弹?

恒指早间低开低走&#xff0c;持续低位徘徊&#xff0c;一度试探万八关口&#xff0c;最低见17994点&#xff0c;市场情绪表现疲弱&#xff0c;大型科技股普遍走低&#xff0c;但主要指数午后回升&#xff0c;恒生科技指数率先转涨&#xff0c;美团(3690.HK)涨超4%领涨成分股&a…

Java毕业设计 基于springboot vue大学生助学贷款管理系统

Java毕业设计 基于springboot vue大学生助学贷款管理系统 SpringBoot 大学生助学贷款管理系统 功能介绍 学生 登录 注册 个人中心 修改密码 个人信息 助学贷款 申请贷款 放贷信息 还贷信息 公告资讯 学校 登录 注册 个人中心 修改密码 个人信息 助学贷款管理 申请贷款管理 公…

TCP四次挥手全过程详解

TCP四次挥手全过程 有几点需要澄清&#xff1a; 1.首先&#xff0c;tcp四次挥手只有主动和被动方之分&#xff0c;没有客户端和服务端的概念 2.其次&#xff0c;发送报文段是tcp协议栈的行为&#xff0c;用户态调用close会陷入到内核态 3.再者&#xff0c;图中的情况前提是双…

LeetCode:419. 甲板上的战舰(遍历 Java)

目录 419. 甲板上的战舰 题目描述&#xff1a; 实现代码与解析&#xff1a; 遍历 原理思路&#xff1a; 419. 甲板上的战舰 题目描述&#xff1a; 给你一个大小为 m x n 的矩阵 board 表示甲板&#xff0c;其中&#xff0c;每个单元格可以是一艘战舰 X 或者是一个空位 . &…

【机器学习300问】111、解释目标检测的基本概念?

一、目标检测基本概念 &#xff08;1&#xff09;目标检测的定义 目标检测是计算机视觉领域的一项关键任务&#xff0c;它旨在识别图像或视频帧中出现的所有感兴趣目标&#xff08;物体&#xff09;的位置和类别。简而言之&#xff0c;目标检测不仅需要判断图像中存在哪些类型…

LVS – NAT 模式集群构建

目录 1 环境准备 1.1 准备四台服务器 1.2 IP与网关均按照下图配置 1.3 网卡配置 1.4 real server 安装 web服务 1.5 安装ipvsadm 管理工具 2 使用ipvsadm管理LVS 2.1 创建集群指定使用的算法 2.2 添加真实服务器指定工作原理 2.3 查看是否正确创建集群 3 测试 3.1 使用tcpdump…

6.Hugging Face Transformers 快速入门

Hugging Face Transformers 库独特价值 丰富的预训练模型:提供广泛的预训练模型,如BERT、GPT、T5等,适用于各种NLP任务。易于使用:设计注重易用性,使得即使没有深厚机器学习背景的开发者也能快速上手。最新研究成果的快速集成:经常更新,包含最新的研究成果和模型。强大的…

SQL进阶day12——高级条件语句

1筛选限定昵称成就值活跃日期的用户 我的代码&#xff1a;答案不对 select uid,u.nick_name,u.achievement from exam_record er join practice_record pr using(uid) join user_info u using(uid) where u.nick_name like "牛客%号" and u.achievement between …

冯喜运:6.11晚间黄金原油走势如何及独家交易操作策略

【黄金消息面分析】&#xff1a;随着全球经济的波动和地缘政治的紧张&#xff0c;黄金作为传统的避险资产&#xff0c;其市场表现一直备受投资者关注。本文将深入分析黄金市场的即时反应&#xff0c;并结合技术分析&#xff0c;对黄金的未来走势进行预测&#xff0c;同时探讨可…

35.四方定理

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动&#xff0c;旨在激发青少年对学习人工智能与算法设计的热情与兴趣&#xff0c;提升青少年科学素养&#xff0c;引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/477 题目背…

CyberDAO:引领Web3时代的DAO社区文化

致力于Web3研究和孵化 CyberDAO自成立以来&#xff0c;致力于推动Web3研究和孵化&#xff0c;吸引了来自技术、资本、商业、应用与流量等领域的上千名热忱成员。我们为社区提供多元的Web3产品和商业机会&#xff0c;触达行业核心&#xff0c;助力成员捕获Web3.0时代的红利。 目…

82. 删除排序链表中的重复元素 and II

链接直达&#xff1a; 保留重复元素 不保留重复元素 题目&#xff1a; 1: 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。示例 1&#xff1a;输入&#xff1a;head [1,1,2] 输出&#xff1a;[1…

《数据结构与算法之美》学习笔记二

前言&#xff1a;本篇文章介绍了一下二叉树中的基本知识点&#xff0c;包括二叉树的种类、二叉树的存储方式以及二叉树的深度和广度优先遍历&#xff1b;以及《数据结构与算法》中对于数组的讲解记录&#xff0c;只记录了本前端能看懂的&#x1f913;&#xff0c;还有很多知识点…

codeanalysis服务端Windows环境运行

1、在每个微服务中创建log文件夹 2、