汇编指令与寄存器操作问题解析

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位字数组进行累加,需要修改以下语句:

  1. add esi, TYPE DWORD 改为 add esi, TYPE WORD ,因为16位字数组每个元素占2字节,而不是4字节。
  2. 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

68、当以下代码执行时,哪些值会被写入数组?.data array DWORD 4 DUP(0).code main PROC mov eax,10 mov esi,0 call proc_1 add esi,4 add eax,10 mov

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值