微机原理及应用A试题集及其答案83488 联系客服

发布时间 : 星期四 文章微机原理及应用A试题集及其答案83488更新完毕开始阅读bed0635577232f60ddcca1bb

A.ECX=0,或ZF=1 B. ECX=0,且ZF=0 C.ECX≠0,且ZF=0 D. ECX≠0,或ZF=1 3. LOOP指令执行时,隐含计数器是( )。 A. ESP B.EBX C. ECX D.EDI 4. 当A>B时转移的条件转移指令为(A、B为无符号数)( )。 A. JA B. JAE C. JG D. JGE 5. 当A>=B时转移的条件转移指令为(A、B为 有符号数)( )。 A. JA B. JAE C. JG D. JGE 6. 条件转移指令JC Label的测试条件是( )。 A. ZF = 1 B. SF = 1 C. OF = 1 D. CF = 1

7. 若主程序通过堆栈向子程序传递了3个参数,子程序返回主程序时,在子程序中清除堆栈中3个参数正确的RET指令是( )。 A. RET 3*1 B. RET 3*2 C. RET 3*3 D. RET 3*4 8. 主程序通过堆栈向子程序传递了3个参数,子程序调用结束后,在主程序中清除堆栈中3个参数正确的指令是( )。 A. ADD ESP, 3*2 B. ADD ESP, 3*4 C. ADD EBP, 3*2 D. ADD EBP, 3*4 9. 条件转移指令JZ Label的测试条件是( )。 A. ZF = 1 B. SF = 1 C. OF = 1 D. CF = 1 10. 利用堆栈传递子程序参数的方法是固定的,若主程序通过堆栈向子程序传递了3个参数,则在子程序中, 主程序中最后一个被压入栈中的参数可以用( )的形式来访问。 A. [EBP-4] B. [EBP-8] C. [EBP+4] D. [EBP+8] 11. 通过堆栈传递参数,在子程序中使用EBP间址取得参数的原因是( )。

A. EBP没有被占用B. EBP间址速度较快C. EBP间址默认的段是堆栈段D. EBP是基址指针 12. 通过寄存器传递参数比通过堆栈传递参数的优点是( )。 A. 能传递更多得参数 B. 存取效率高 C. 能确保正确调用 D. 没有副作用

13. 利用堆栈传递子程序参数的方法是固定的,在子程序中, 修改参数( )可以改变子程序的返回地址。 A. [EBP-4] B. [EBP-8] C. [EBP+4] D. [EBP+8]

14. 在用LOOP Label 指令构成的循环中,若ECX的初值为-10,则循环体将被执行( )次。 A. 10 B. 0 C. 100 D. >100 15. 在用LOOP Label 指令构成的循环中,若ECX的初值为10,在LOOP Label 指令前有一条“SUB ECX,2” 指令,则循环体将被执行( )次。 A. 10 B. 5 C. 4 D. >10000 二.名词解释 三.判断

1. 指令指针或者还包括代码段寄存器值的改变将引起程序流程的改变。T 2. JMP指令对应高级语言的GOTO语句,所以不能使用。F

3. 因为条件转移指令Jcc要利用标志作为条件,所以也影响标志。F 4. JA和JG指令的条件都是“大于”,所以是同一个指令的两个助记符。F 5. 控制循环是否结束只能在一次循环结束之后进行。T

6. 介绍LOOP指令时,常说它相当于DEC ECX和JNZ两条指令。但考虑对状态标志的影响,它们有差别。LOOP指令不影响标志,而DEC指令却会影响除CF之外的其他状态标志。T 7. CALL指令用在调用程序中,如果被调用程序中也有CALL指令,说明出现了嵌套。T 8. 子程序需要保护寄存器,包括保护传递入口参数和出口参数的通用寄存器。F

9. 利用寄存器在主子程序间传递参数,其实质就是利用全局变量来传递参数。F 10. 子程序采用堆栈传递参数时,只能在主程序中修改ESP方可保持堆栈的平衡。F 11. 汇编语言中不允许递归调用子程序。F

12. 与高级语言中的自定义函数不同,汇编语言中的子程序不能将计算的结果返给主程序F 13. 汇编语言中,子程序嵌套调用就是递归调用。F

14. 在LOOP指令构成的循环结构中,允许修改ECX的值。T 15. 指令CALL或RET的执行,不改变程序执行的流程。T

16. 在软件中只使用一次的功能编写成子程序完全没有必要。F 17. 在执行CALL指令时,硬件自动将断点地址压入堆栈中。F

18. 在高级语言中,若多重循环出现\交叉”的错误,编译系统通常会给出提示来。若汇编语言程序中也出现\交叉”错误时,汇编程序也会给出提示来。T 四.填空

1. JMP指令根据目标地址的寻址方式,可以分成三种类型:相对寻址、__直接寻址 和_间接寻址。

2. 假设在平展存储模型下,EBX=1256H,双字变量TABLE的偏移地址是20A1H,线性地址32F7H处存放3280H,执行指令“JMP EBX” 后EIP=_1256H__,执行指令“JMP TABLE*EBX+”后EIP=_20A1_。

3. “CMP EAX,3721H”指令之后是JZ指令,发生转移的条件是EAX=_3721H__,此时ZF=_1__。

4. JMP指令根据目标地址的寻址方式,可以分成三种类型:相对寻址、__________和直接寻址,通常__________方式使用的最多。

5. 循环结构程序一般有三个部分组成,它们是_循环初始_,循环体和 循环控制__部分。 6. 条件转移指令JE Label的测试标志位是__ZF__,条件转移指令JNO Label的测试标志位是_OF__。

7. .过程定义开始是“TEST PROC”语句,则过程定义结束的语句是__TEST ENDP__。宏定义开始是“DISP MACRO”语句,则宏定义结束的语句是_ENDM_。 8. 利用堆栈传递子程序参数的方法是固定的,在子程序中通常是利用寄存器__EBP__来访问栈中的参数,采用的寻址方式是__。

9. 调用程序和子程序之间的信息传送称为__参数__,而当传递的信息很大时通常通过__________来进行传递。

10. 在LOOP Label 指令构成的循环中,若ECX的初值为0,则循环体将被执行__232_次;若ECX的初值为—100,则循环体将被执行(232 -100)__次。

11. 只要堆栈空间允许,子程序嵌套调用的层次__无限制_,子程序也可调用本身,这称为__递归调用_。

12. 通常在子程序的开始部分要保护__入口参数___寄存器,但用做出口参数的通用寄存器则__不能保护和恢复__。

13. 通常在子程序中的参数分为两种类型,分别称为__入口参数__和 __出口参数__。

14. 通常在子程序中至少要有一条_返回__指令用于返回主程序,而汇编程序在汇编时并不检测__返回_指令是否存在。

15. 在主程序中,采用“JMP subName”指令可以__转到______子程序subName,但子程序结束后_____需返回__________。 五.简答题

1. 是什么特点决定了目标地址的相对寻址方式应用最多? 当同一个程序被操作系统安排到不同的存储区域执行时,指令间的位移没有改变,目标地址

采用相对寻址可方便操作系统的灵活调度。

2. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中sign与sinteger均为双字变量。 if ( sin teger = = 0) sign = = 0; else If ( siteger > 0) sign = 1; else sign = -1;

3. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中ch1与caps均为字节变量。 if (ch1> =’a’ && ch1< =’z’) caps= =0; if (ch1> =’A’ && ch1< =’Z’) caps= =1;

4. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中sum与i变量均为双字变量。 sum=0; for ( i=1;i< =100;i++) if ( i%2= =0) sum=sum+i;

5. 在N分支结构中,至少要使用N—1条 JMP指令,它的作用是什么?

6. 不使用CALL指令是否可以实现子程序的调用?若可以,举例说明。 7. 写出3条以上的可以改变程序执行流程的指令,并简述其用途。. 8.在子程序中,可否改变子程序的返回地址?若可以,则举例说明。 9. 为什么特别强调为子程序加上必要的注释?

完整的子程序注释可方便程序员调用该子程序,子程序注释包括子程序名、子程序功能、入口参数和出口参数、调用注意事项和其他说明等。 六.应用题

1. 能被4整除但不能被100整除,或者年被400整除的年份是闰年。编程写一个完整的程序,求出2012年~2099年中的所有闰年年份,并把它们存放在数组Lyear中。 include io32.inc .data

year dword ? prompt byte ' Enter the year :',0 msg byte ' is leap year .',0 msg1 byte ' is not leap year .',0 .code main proc ;主程序开始 mov eax,offset prompt call dispmsg call readsid ;读入一个年份

mov year,eax

noleap: leap: display:

call dispsid ;输出年份

xor edx,edx mov ebx,400 div ebx cmp edx,0 jz leap ;if year mod 400=0 then goto leap

mov eax,year xor edx,edx mov ebx,4 div ebx cmp edx,0 jnz noleap ;if year mod 4<>0 then goto noleap mov eax,year xor edx,edx mov ebx,100 div ebx cmp edx,0 jnz leap ;if year mod 100<>0 then goto leap mov eax,offset msg1 jmp display mov eax,offset msg call dispmsg call dispcrlf

ret ;返回操作系统

main endp ;主程序结束

end main ;end of assembly

2. 编程写一个完整的程序,求出2~100之间的所有素数,并将它们存入Prime数组中,素数的个数存入变量Pcounter中。 include io32.inc .data msg byte ' List of prime number',13,10,0 blank byte ' ',0 .code main proc ;主程序开始 mov eax,offset msg call dispmsg