《汇编语言第6章答案》由会员分享,可在线阅读,更多相关《汇编语言第6章答案(3页珍藏版)》请在金锄头文库上搜索。
1、第6章 流程控制习题1. 指令指针EIP是通用寄存器还是专用寄存器?有指令能够直接给它赋值吗?哪些指令的执行会改变它的值?解答:EIP是专用寄存器,不能通过指令直接给它赋值。可以改变其值的指令有:(1)无条件分支,包括:跳转(jmp)、调用(call)、中断(int)。(2)条件分支,与标志位CF、OF、PF、SF、ZF相关的条件跳转指令。(3)循环指令,LOOP、LOOPE等。3.相对于BASIC语言中GOTO语句作用的IA-32处理器指令是哪条?跳转指令 jmp习题4.IA-32处理器通过改变EIP寄存器的数值就可以改变程序,如果程序需要无条件跳转到标号done位置执行,使用“MOVL d
2、one, %EIP”语句是否可以达到,为什么?如果不能实现该功能,应该使用哪条指令?解答:不能。不能对EIP寄存器直接赋值。使用指令jmp done可以实现。习题6条件转移指令Jxx所利用的条件保存在何处?有多少个不同条件的转移指令?保存在EFLAGES寄存器中共16个(P107)习题7JA和JG指令发生跳转的条件都是“大于”,它们有什么区别?在处理带符号值和无符号值时有所区别。计算无符号值时,使用JA,对于带符号值,使用JG。习题8. 执行如下程序片断后,CMP指令分别使得5个状态标志CF、ZF、SF、OF和PF为0还是为1?它会使得哪些条件转移指令条件成立、发生转移?movl $0x20,
3、 %eaxmovl $0x80, %ebxcmpl %ebx,%eax解答:CF1 ZF0 SF1 OF0 PF1可以使得发生转移的指令有:JC JS JP JNZ JNO习题9. 有如下程序片断,请使用一条指令代替其中的两条指令:(1)again:.jz nextjmp againnext:(2)again:.jle nextjmp againnext:解答: (1)jnz again (2)jg again10.假设EAX和ESI存放的是有符号整数,EDX和EDI存放的是无符号整数,请用比较指令和条件转移指令实现以下判断:(1)若EDX EDI,转到above执行;CMP %EDI,%ED
4、X JA above(2)若EAX ESI,转到greater执行;CMP %ESI,%EAX JG greater(3)若ECX = 0,转到zero执行;CMP $0,%ECX JE zero (4)若EAXESI产生溢出,转到overflow执行;CMP %ESI,%EAX JO overflow(5)若ESIEAX,转到less_eq执行;CMP %EAX,%ESI JLE less_eq(6)若EDIEDX,转到below_eq执行。CMP %EDX,%EDI JBE below_eq11.Pentium Pro处理器为IA-32指令系统增加了一条实用的条件传送指令CMOVxx,其中
5、的条件xx与条件转移指令Jxx的条件xx相同。请用一条CMOV指令代替如下程序片断中的条件转移指令和其后的传送指令(含标号):(1)decl %ecxjz contiunemovl %eax,%ebxcontiune:(2)addl $1,%ecxjnc contiunemovl %eax,%ebxcontiune:(3)cmpl %ebx,%eaxjbe contiunemovl %eax,%ebx contiune:解答(1)CMOVNZ %eax, %ebx(2)CMOVC %eax, %ebx(3)CMOVA %eax, %ebx12.现代处理器当中,简单的多条指令常比一条复杂的指令执行速度快。例如,GCC编译器就不使用LOOP指令,而是使用与其功能相同的两条指令,这两条指令是什么? dec %ecx jnz loop习题13.请问如下LOOP指令执行了多少次?movl $0, %ecxrepeat:loop repeat解答:loop执行时,先将ecx中的值减1,使之变为1(0xFFFFFFFF),然后进行判断是否为0。这里32位整数的最大值为232,故loop执行了232次。14.请用两条指令实现JECXZ指令的功能。cmp $0,%ecxje address