計算機系統基礎(一):程序的表示、轉換與鏈接(第七周小測驗)


1.假設P為調用過程,Q為被調用過程,程序在IA-32處理器上執行,以下有關過程調用的敘述中,錯誤的是( )。

     A.從Q跳回到Q執行應使用RET指令
     B.從P傳到Q的實參無需重新分配空間存放
     C.C語言程序中的函數調用就是過程調用
     D.從P跳轉到Q執行應使用CALL指令

2.以下是有關IA-32的過程調用方式的敘述,錯誤的是( )。

     A.EBX、ESI、EDI、EBP和ESP都是被調用 者保存寄存器
     B.入口參數使用棧(stack)傳遞,即所傳遞的實參被分配在棧中
     C.返回地址是CALL指令下一條指令的地址,被保 存在棧中
     D.EAX、ECX和EDX都是調用者保存寄存器

3.以下是有關IA-32的過程調用所使用的棧和棧幀的敘述,錯誤的是( )。

     A.只能通過將棧指針ESP作為基址寄存器 來訪問用戶棧中的數據
     B.過程嵌套調用深度越深,棧中棧幀個數越多, 嚴重時會發生棧溢出
     C.從被調用過程返回調用過程之前,被調用過程 會釋放自己的棧幀
     D.每進行一次過程調用,用戶棧從高地址向低地 址增長出一個棧幀

4.以下是有關C語言程序的變量的作用域和生存期的敘述,錯誤的是( )。

     A.因為非靜態局部變量被分配在棧中,所以其作 用域僅在過程體內
     B.非靜態局部變量可以和全局變量同名,是因為 它們被分配在不同存儲區
     C.靜態(static型)變量和非靜態局部(auto型)變量都分配在對應棧幀中
     D.不同過程中的非靜態局部變量可以同名,是因 為它們被分配在不同棧幀中

5.以下是一個C語言程序代碼:

int add(int x, int y)
{
	return x+y;
}

int caller( )
{
	int t1=100 ;
	int t2=200;
	int sum=add(t1, t2);
	return sum;
}

以下關於上述程序代碼在IA-32上執行的敘述中,錯誤的是( )。

     A.變量sum被分配在caller函數的棧幀中
     B.add函數返回時返回值存放在EAX寄存器中
     C.變量t1和t2被分配在caller函數的棧幀中
     D.傳遞參數時t1和t2的值從高地址到低地址依次存入棧中

6.第5題中的caller函數對應的機器級代碼如下:

1      pushl       %ebp
2      movl       %esp, %ebp
3      subl         $24, %esp
4      movl        $100, -12(%ebp)
5      movl        $200, -8(%ebp) 
6      movl       -8(%ebp), %eax
7      movl        %eax, 4(%esp)
8      movl        -12(%ebp), %eax
9      movl        %eax, (%esp)  
10    call          add  
11    movl        %eax, -4(%ebp) 
12    movl        -4(%ebp), %eax
13    leave        
14    ret 

假定caller的調用過程為P,對於上述指令序列,以下敘述中錯誤的是( )。

     A.第1條指令將過程P的EBP內容壓入caller棧幀
     B.第3條指令將棧指針ESP向高地址方向移動,以生成當前棧幀
     C.第2條指令使BEP內容指向caller棧幀的底部
     D.從上述指令序列可看出,caller函數沒有使用 被調用者保存寄存器

7.對於第5題的caller函數以及第6題給出的對應機器級代碼,以下敘述中錯誤的是( )。

     A.變量t1和t2的有效地址分別為R[ebp]-12和R[ebp]-8
     B.參數t1所在的地址低(或小)於參數t2所在的 地址
     C.參數t1和t2的有效地址分別為R[esp]和R[esp]+4
     D.變量t1所在的地址高(或大)於變量t2所在的地址

8.以下有關遞歸過程調用的敘述中,錯誤的是( )。

     A.可能需要執行遞歸過程很多次,因而時間開銷 大
     B.遞歸過程第一個參數的有效地址為R[ebp]+8
     C.每次遞歸調用都會生成一個新的棧幀,因而空 間開銷大
     D.每次遞歸調用在棧幀中保存的返回地址都不相同

9.以下關於if (cond_expr) then_statement else else_statement選擇結構對應的機器級代碼表示的敘述中,錯誤的是( )。

     A.一定包含一條無條件轉移指令
     B.一定包含一條條件轉移指令(分支指令)
     C.對應then_statement的代碼一定在對應else_statement的代碼之前
     D.計算cond_expr的代碼段一定在條件轉移指令之前

10.以下關於循環結構語句的機器級代碼表示的敘述中,錯誤的是( )。

     A.循環體內執行的指令不包含條件轉移 指令
     B.循環結束條件通常用一條比較指令CMP來實現
     C.一定至少包含一條條件轉移指令
     D.不一定包含無條件轉移指令


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM