1.假設P為調用過程,Q為被調用過程,程序在IA-32處理器上執行,以下有關過程調用的敘述中,錯誤的是( )。
A.從Q跳回到Q執行應使用RET指令
B.從P傳到Q的實參無需重新分配空間存放
C.C語言程序中的函數調用就是過程調用
D.從P跳轉到Q執行應使用CALL指令
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都是調用者保存寄存器
B.入口參數使用棧(stack)傳遞,即所傳遞的實參被分配在棧中
C.返回地址是CALL指令下一條指令的地址,被保 存在棧中
D.EAX、ECX和EDX都是調用者保存寄存器
3.以下是有關IA-32的過程調用所使用的棧和棧幀的敘述,錯誤的是( )。
A.只能通過將棧指針ESP作為基址寄存器 來訪問用戶棧中的數據
B.過程嵌套調用深度越深,棧中棧幀個數越多, 嚴重時會發生棧溢出
C.從被調用過程返回調用過程之前,被調用過程 會釋放自己的棧幀
D.每進行一次過程調用,用戶棧從高地址向低地 址增長出一個棧幀
B.過程嵌套調用深度越深,棧中棧幀個數越多, 嚴重時會發生棧溢出
C.從被調用過程返回調用過程之前,被調用過程 會釋放自己的棧幀
D.每進行一次過程調用,用戶棧從高地址向低地 址增長出一個棧幀
4.以下是有關C語言程序的變量的作用域和生存期的敘述,錯誤的是( )。
A.因為非靜態局部變量被分配在棧中,所以其作 用域僅在過程體內
B.非靜態局部變量可以和全局變量同名,是因為 它們被分配在不同存儲區
C.靜態(static型)變量和非靜態局部(auto型)變量都分配在對應棧幀中
D.不同過程中的非靜態局部變量可以同名,是因 為它們被分配在不同棧幀中
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的值從高地址到低地址依次存入棧中
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函數沒有使用 被調用者保存寄存器
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所在的地址
B.參數t1所在的地址低(或小)於參數t2所在的 地址
C.參數t1和t2的有效地址分別為R[esp]和R[esp]+4
D.變量t1所在的地址高(或大)於變量t2所在的地址
8.以下有關遞歸過程調用的敘述中,錯誤的是( )。
A.可能需要執行遞歸過程很多次,因而時間開銷 大
B.遞歸過程第一個參數的有效地址為R[ebp]+8
C.每次遞歸調用都會生成一個新的棧幀,因而空 間開銷大
D.每次遞歸調用在棧幀中保存的返回地址都不相同
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的代碼段一定在條件轉移指令之前
B.一定包含一條條件轉移指令(分支指令)
C.對應then_statement的代碼一定在對應else_statement的代碼之前
D.計算cond_expr的代碼段一定在條件轉移指令之前
10.以下關於循環結構語句的機器級代碼表示的敘述中,錯誤的是( )。
A.循環體內執行的指令不包含條件轉移 指令
B.循環結束條件通常用一條比較指令CMP來實現
C.一定至少包含一條條件轉移指令
D.不一定包含無條件轉移指令
B.循環結束條件通常用一條比較指令CMP來實現
C.一定至少包含一條條件轉移指令
D.不一定包含無條件轉移指令