56、哪条指令将32位EFLAGS寄存器压入栈中?
PUSHFD
57、哪条指令将栈中的值弹出到EFLAGS寄存器?
POPFD
58、列出将数据压入处理器堆栈和从堆栈弹出数据所涉及的步骤。
压入数据:
- PUSH指令首先递减ESP,然后将源操作数复制到堆栈。
- 16位操作数使ESP递减2。
- 32位操作数使ESP递减4。
弹出数据:
- POP指令首先将ESP指向的堆栈元素内容复制到16位或32位目标操作数,然后递增ESP。
- 若操作数为16位,ESP递增2。
- 若操作数为32位,ESP递增4。
59、(判断对错):RET 指令将栈顶元素弹出到指令指针寄存器中。
正确
60、(对/错):栈只是由栈指针的操作创建的数据结构。
错
61、(对/错):在向过程传递32位参数时,不能使用ESI和EDI寄存器。
错
62、在过程的上下文中,传递参数是什么意思?
在汇编语言中,将数据提供给过程使用的操作称为 传递参数 。常见方式是在通用寄存器中传递参数,例如编写计算整数数组和的过程时,可将数组的偏移量和数组元素数量作为参数传递给过程,这样过程就不依赖于特定的变量名,能更灵活地使用。
63、判断题:USES 操作符只生成 PUSH 指令,因此你必须自己编写 POP 指令。
错误
64、编写一个能对16位字数组进行累加的ArraySum过程,并给出测试思路。
要使ArraySum过程能对16位字数组进行累加,需要修改以下语句:
- 将
add esi, TYPE DWORD改为add esi, TYPE WORD,因为16位字数组每个元素占2字节,而不是4字节。 - 将
mov eax, 0改为mov ax, 0,因为累加结果现在是16位的。
以下是修改后的ArraySum过程:
ArraySum PROC
push esi ; save ESI, ECX
push ecx
mov ax, 0 ; set the sum to zero
L1:
add ax, [esi] ; add each integer to sum
add esi, TYPE WORD ; point to next integer
loop L1 ; repeat for array size
pop ecx ; restore ECX, ESI
pop esi
ret ; sum is in AX
ArraySum ENDP
测试时,将数组定义为WORD类型,并且在调用过程后将结果保存到16位寄存器或变量中。
65、假设 AX 和 BX 分别初始化为 3600h 和 0D07h,求以下三组指令执行后 CX 和 DX 的内容。a. push ax push bx pop cx pop dx b. push ax push bx pop dx pop cx c. push bx push ax pop cx pop dx d. push bx push ax pop dx pop cx
- a. CX = 0D07h,DX = 3600h;
- b. CX = 3600h,DX = 0D07h;
- c. CX = 3600h,DX = 0D07h;
- d. CX = 0D07h,DX = 3600h;
66、当以下示例代码运行时,哪个陈述是正确的?代码如下:1: main PROC 2: mov eax,40 3: push offset Here 4: jmp Ex4Sub 5: Here: 6: mov eax,30 7: INVOKE ExitProcess,0 8: main ENDP 9: 10: Ex4Sub PROC 11: ret 12: Ex4Sub ENDP 选项:a. 在第7行,EAX将等于30;b. 程序将在第4行出现运行时错误而停止;c. 在第6行,EAX将等于30;d. 程序将在第11行出现运行时错误而停止。
A
67、当示例代码运行时,以下哪个陈述是正确的?代码如下:1: main PROC 2: mov edx,0 3: mov eax,40 4: push eax 5: call Ex5Sub 6: INVOKE ExitProcess,0 7: main ENDP 8: 9: Ex5Sub PROC 10: pop eax 11: pop edx 12: push eax 13: ret 14: Ex5Sub ENDP 选项:a. 第6行时EDX将等于40;b. 程序将在第13行出现运行时错误;c. 第6行时EDX将等于0;d. 程序将在第11行出现运行时错误。
d

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



