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

前言

有幸作为助教参与信息院“周末夜校”讲解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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能编程支持分析本地工程文件,项目级开发效率再度提升!

CodeGeeX的智能问答新增关联本地文件的系列功能&#xff0c;用户在智能问答的输入框中输入&#xff0c;就可以在弹出框中选择需要使用的指令。从而能够针对所关联的文件给出更有针对性的问答和代码建议。 下面我们将分别介绍在编程工作中&#xff0c;如何关联本地文件&#xff…

PostgreSQL 快速入门与实战

1、概述 前面2篇博客给大家详细的介绍了PostgreSQL的安装和配置&#xff0c;本篇文章就带着大家一起学习一下PostgreSQL的用法&#xff0c;主要内容包括 基本的数据库操作、用户管理、数据备份、SCHEMA(模式)以及和MySQL的区别。 2、数据库基本操作 PostgreSQL是严格遵守SQL规…

飞睿超宽带uwb模块无线传输,工业级uwb定位标签精度3厘米,测距定位距离150米

在当今日新月异的科技浪潮中&#xff0c;超宽带&#xff08;Ultra-Wideband&#xff0c;简称UWB&#xff09;技术凭借其独特的优势&#xff0c;正在成为工业应用领域中不可或缺的一环。作为一种新型的无线通信技术&#xff0c;超宽带UWB模块凭借其高精度定位、高安全性、高抗干…

29、shell变量、重定向及运算符

一、shell脚本 1.1、shell的定义 脚本&#xff1a;可运行的代码的集合&#xff0c;脚本语言&#xff08;计算机语言&#xff09;。 脚本的特点&#xff1a;从上到下&#xff0c;按行执行。 python&#xff1a;脚本语言 格式更严谨的执行缩进。也是从上到下按行执行。 shel…

网络协议四

一、云中网络 物理机的劣势&#xff1a; 1&#xff09;一旦需要扩容 CPU、内存、硬盘&#xff0c;都需要去机房手动弄&#xff0c;非常麻烦 2&#xff09;采购的机器往往动不动几百 G 的内存&#xff0c;而每个应用往往可能只需要 4 核 8G 3&#xff09;一台机器&#xff0c;…

FreeRTOS-任务通知

概述 不同于队列、信号量、互斥量&#xff0c;有一个额外的空间&#xff08;结构体&#xff09;作为通信的纽带&#xff0c;任务通知只需借助任务TCB中的相关变量&#xff0c;无需另外创建&#xff1b; 下面是TCB中有关任务通知的变量&#xff1a; typedef struct tskTaskCo…

告别繁琐!Xinstall助力,二维码推广监测从此高效无忧

在数字化营销时代&#xff0c;二维码推广已成为App获取新用户的重要途径之一。然而&#xff0c;如何精准监测二维码推广效果&#xff0c;成为了许多企业面临的难题。今天&#xff0c;我们为大家介绍一款强大的二维码推广监测工具——Xinstall&#xff0c;它将助您轻松解决推广监…

SonarQube安全扫描常见问题

目录 一、SonarQube质量报告 二、SonarQube扫描常见问题和修复方法 三、SonarQube质量配置 最近小编在使用SonarQube工具进行代码扫描&#xff0c;检查代码异味&#xff0c;系统漏洞等&#xff0c;实际过程中也遇到了不少问题&#xff0c;这篇文章主要列举我遇到的常见问题和…

账号密码无错误,xshell可以连接,但是WindTerm连接失败

xshell可以连接&#xff0c;但是WindTerm却连接失败 报错提示内容&#xff1a; 连接WindTerm是&#xff0c;账号密码是正确的&#xff0c;但是一输入账号&#xff0c;就报The remote host closed the connection错误&#xff0c;或者是Unknown error错误 解决方法 在新建…

Perfectly Clear Workbench: 智能图像清晰修复软件

Perfectly Clear Workbench 是由 EyeQ 公司开发的一款先进的智能图像清晰修复软件&#xff0c;适用于 Mac 和 Windows 平台。该软件旨在通过自动化和高效的图像处理工具&#xff0c;帮助摄影师、设计师以及影像爱好者轻松实现图像优化和修复。无论是专业摄影工作室还是个人用户…

揭秘ASA归因统计的奥秘,Xinstall带您轻松上手!

在移动互联网时代&#xff0c;App推广已成为企业获取用户、提升品牌知名度的重要手段。然而&#xff0c;如何准确衡量推广效果&#xff0c;如何精准定位目标用户&#xff0c;一直是困扰着众多App运营者的难题。今天&#xff0c;我们就来谈谈ASA&#xff08;Apple Search Ads&am…

【Ardiuno】使用ESP32单片机创建web服务通过网页控制小灯开关的实验(图文)

经过实验测试ESP32单片机的网络连接还是很方便的&#xff0c;这里小飞鱼按照程序实例的代码亲自实验一下使用Esp32生成的网页服务来实现远程无线控制小灯开关功能&#xff0c;这样真的是离物联网开发越来越近了&#xff0c;哈哈&#xff01; 连接好开发板和电路&#xff0c;将…

采用PHP语言(医院安全不良事件上报系统源码)医院不良事件 各类事件分析、分类、处理流程

医疗安全不容忽视&#xff01; 医疗安全&#xff08;不良&#xff09;事件是指在临床诊疗活动中以及医院运行过程中&#xff0c;任何可能影响患者的诊疗结果、增加患者的痛苦和负担并可能引发医疗纠纷或医疗事故&#xff0c;以及影响医疗工作的正常运行和医务人员人身安全的因…

CVE-2024-4577:PHP CGI Windows平台远程代码执行漏洞

文章目录 0x01 前言0x02 漏洞描述0x03 影响范围0x04 资产测绘0x05 漏洞复现0x06 漏洞修复0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后…

如何在Visual Studio Code中禁用Less文件保存时自动编译为CSS的功能

第一步&#xff1a;点击扩展&#xff0c;搜索Easy Less&#xff0c;并找到对应的扩展设置 第二步&#xff1a;点击在setting.json中编辑 第三步&#xff1a;将此段代码复制粘贴 "compress": false, // 是否压缩"sourceMap": false, // 是否生成map文件&am…

洗地机是智商税吗?家用洗地机哪个牌子好?2024年多功能洗地机推荐

洗地机是智商税吗&#xff1f;肯定不是&#xff01;&#xff01;&#xff01;洗地机因为其功能集成了扫地、吸尘、拖地、烘干和消毒的功能&#xff0c;仅需一步操作即可完成所有清洁任务&#xff0c;大大的提升了人们的清洁效率&#xff0c;节省了人们清洁的时间和精力。那么&a…

RocketMQ查询出重复数据,两条MessageID一样的解决办法如下

问题描述 在使用RocketMQ的可视化工具dashboard-1.0.0时,首先生产了10条数据,但是查询时却查出来了14条,有四条数据重复,重复数据MessageID和key相同,但是通过key单独查询却只能查出一条 测试代码 package com.fdw.rocketmq.producer;import org.apache.rocketmq.client…

设计模式学习(二)工厂模式——工厂方法模式

设计模式学习&#xff08;二&#xff09;工厂模式——工厂方法模式 前言工厂方法模式简介示例优点缺点使用场景 前言 前一篇文章介绍了简单工厂模式&#xff0c;提到了简单工厂模式的缺点&#xff08;违反开闭原则&#xff0c;扩展困难&#xff09;&#xff0c;本文要介绍的工…

WordPress 站点 Wp-Login.Php 登录页面,防止被机器扫描爆破终极方法

最近好像不少的 WordPress 站点又迎来了一波疯狂的 wp-login.php 登录页面暴力破解,明月使用的 Dragon 主题也迅速的做出了安全防范响应,第一时间就增强了代码上的安全防御能力。明月代运维的几个站点也在这方面加强了防范措施,基本上实现了永久解决这一顽疾的目标,今天明月…

CAN总线协议教程

系列文章目录 文章目录 系列文章目录前言1.简介&#xff1a;CAN总线什么是CAN&#xff1f;我们将涵盖的内容 2.CAN报文数据框架远程框架错误帧重载框架标准与扩展 CAN基本CAN与全CAN总线仲裁和消息优先级邮件寻址和识别有关标识符值的说明 3.CAN物理层CAN总线不同的物理层最大总…