這篇具有很好參考價值的文章主要介紹了湖南大學(xué)CS-2019期末考試解析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。
【特別注意】
答案來源于@wolf
是我在備考時自己做的,僅供參考,若有不同的地方歡迎討論。
【試卷評析】
有必要一做。
【試卷與答案】

?
一. 填空題(10 分,每空 2 分)
1.
0xb1e56f07
存放在采用小端存儲的機(jī)器上,地址為
0x3287
到
0x328a
,則
0x3288
處存
放值為
______(
以十六進(jìn)制小寫格式表示例
0xff)
。
2. 根據(jù)操作數(shù)特點(diǎn),用恰當(dāng)?shù)?/span>
MOV
類指令補(bǔ)全下列殘缺數(shù)據(jù)傳送指令
: _______ %eax,%bh
。
3.
已知 %eax=0X100,%ebx=0X3;
內(nèi)存中指定地址的值列表如下:
地址? ?值
0X100 0x9c
0X104 0xf4
0X108 0xc5
0X10C 0x5a
則指令
addl 0x40,(%eax,%ebx,4)
將地址
__________
中的值更新為
___________
。
4.
假設(shè)寄存器
%ebx
的值為
0xa3391eb1,
執(zhí)行以下指令后
movl %ebx,%ecx
movw $0x2311,%bx
movb $0x03,%bl
cmpl %ecx,%ebx
jae .L1
addl $0x8,%ebx
jmp .L2
.L1:
subl $0x9,%ebx
.L2:
%ebx
的值為
______(
以十六進(jìn)制格式小寫表示例
0xffffffff)
。
【答案】
1. 0x6f
2. movb
3. 0x1c 0x9a
4. 0xa33922fa
二.(10 分)
假設(shè)一個基于 IEEE 浮點(diǎn)格式的 9 位浮點(diǎn)表示,有 1 個符號位,4 個階碼位(k=4)和 4 個尾
數(shù)位(n=4)。
1.請給出值-1.375 的二進(jìn)制位表示(2 分)。
2.請簡單說明規(guī)格化值、非規(guī)格化值及特殊值的判斷方式與值計(jì)算方法(4 分)。
3.請寫出正數(shù)中最小的非規(guī)格化數(shù)、最大的非規(guī)格化數(shù)、最小的規(guī)格化數(shù)、最大的規(guī)格化數(shù)
的二進(jìn)制位表示(4 分)。
【答案】?
三.(30 分)
以下有兩段完整或者不完整的 C 程序段及相應(yīng)的匯編代碼(在 32 位環(huán)境下),請回答相關(guān)問題。
(1) (15 分)
考慮以下代碼,其中
A
和
B
是用
#define
聲明的常數(shù):
int array1[A][B];
int array2[B][A];
int test(int I, int j){
return array1[i][j] + array2[j][i];
}
編譯上述代碼得到如下匯編代碼:
movl 8(%ebp), %ecx
movl 12(%ebp), %edx
leal 0( , %ecx, 4), %eax
subl %ecx, %eax
addl %edx, %eax
leal (%edx, %edx, 4), %edx
addl %ecx, %edx
movl array1( , %eax, 4), %eax
addl array2( , %edx, 4), %eax
假設(shè)
i
在
%ebp + 8
的位置,
j
在
%ebp + 12
的位置,考慮到行優(yōu)先訪問策略,請根據(jù)這
段匯編代碼確定
A
和
B
的值,并給出分析過程。
【答案】?A=5,B=3。過程較為簡單,略。
(2)(15 分)
下面的
C
語言代碼省略了
switch
語句的主體部分。在
C
代碼中,標(biāo)號是不連續(xù)的,并且有
些情況還有多個標(biāo)號。
int switch(int x){
int result = 0;
switch(x){
/*Some switch body here*/
}
return result;
}
GCC
編譯后生成如下代碼。(變量
x
開始時位于相對于寄存器
&ebp
偏移量為
8
的地方)
movl 8(%ebp), %eax
/*set up jump table access*/
addl $3, %eax
cmpl $6, %eax
ja .L2
jmp * .L8( , %eax, 4)
跳轉(zhuǎn)表如下:
.L8:
.long .L3
.long .L2
.long .L4
.long .L5
.long .L6
.long .L6
.long .L7
根據(jù)上述信息回答問題(需要給出詳細(xì)分析過程):
A. switch
語句體內(nèi)情況標(biāo)號的值是多少?
B. C
代碼中哪些情況有多個標(biāo)號?
【答案】
?
四.(15 分)
一段函數(shù)調(diào)用的 C 代碼如下:
#include”stdio.h”
main()
{
int arg1=718;
int arg2=415;
int diff = swap_sub(&arg1, &arg2);
printf (“diff=%d\n”, diff);
}
int swap_sub(int*xp, int*yp)
{
int x=*xp;
int y=*yp;
int z=0;
*xp=y;
*yp=x;
z=x-y;
return z;
}
要求在下面的棧幀圖中(每一格 4 字節(jié)):
?
1.將“RtnAddr”作為返回地址內(nèi)容,填入棧幀中的準(zhǔn)確位置;
2.在主函數(shù)棧幀中的正確位置,寫出傳遞參數(shù)的準(zhǔn)確值;
3.在子函數(shù)棧幀中的正確位置,寫出子函數(shù)執(zhí)行完畢后各局部變量的準(zhǔn)確值;
?【答案】(有一點(diǎn)疑惑,不過感覺應(yīng)該都可以)

五.(15 分)
現(xiàn)有包含
main
函數(shù)的可執(zhí)行程序由
GNU OBJDUMP
工具生成的反匯編代碼,如下是其中
一部分:
問:
(
1
)此圖中每一行冒號前面的部分表示什么內(nèi)容?此圖對應(yīng)的機(jī)器代碼可能屬于
ELF
的哪
個節(jié)(
section
)?
(2)由此圖可知,這里出現(xiàn)了哪種類型的重定位?這種類型的重定位有什么特點(diǎn)?
(3)重定位之后,此圖哪些部分會發(fā)生變化?
?
【答案】(“哪些變化”主要是fcffffff會被替換)
?
六(20 分)
假定某處理器帶有一個數(shù)據(jù)區(qū)容量為
128B
的數(shù)據(jù)
cache
,采用直接映射方式,塊大小為
32B
,主存容量
32K
。以下
C
語言程序段運(yùn)行在該處理器上,設(shè)
sizeof(int)=4
,編譯器將
變量
i, j, k, sum
都分配在通用寄存器中,因此,只要考慮數(shù)組元素的訪存情況,假定數(shù)
組
a
從第一個主存塊開始處存放。請回答下列問題:
(
1
)該
cache
有多少組?主存地址中的標(biāo)記位、組索引和塊偏移字段分別占幾位?
(2)當(dāng)
k=15
和
k=16
時,執(zhí)行以下程序的過程中,數(shù)據(jù)訪問不命中率分別是多少?
int i, j, k,sum;
int a[64];
for ( i = 0; i < 100; i++ ){
for ( j = 0; j < 64; j=j+k ){
sum+=a[j]; }}
?【答案】
(1)4組,分別占8,2,5
(2)100%;80.2%文章來源:http://www.zghlxwxcb.cn/news/detail-481823.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-481823.html
到了這里,關(guān)于湖南大學(xué)CS-2019期末考試解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!
本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!