汇编语言几个小小的问题
1.BX寄存器通常被保留用做寻址堆栈数据。对吗?
2.POP指令从堆栈顶弹出数值并送到指令指针寄存器。对吗?
3.array[esi]是变址操作数。对吗?
4.USES操作符后列出的寄存器必须以逗号分隔。对吗?
5.在保护模式下,每个过程调用最少使用4字节的堆栈空间。对吗?
6.在一个过程内定义另一个过程是可能的。对吗?
7.USES操作符允许列出所有在过程内修改的寄存器。对吗?
8.USES操作符只生成PUSH指令,因此必须自己编写POP指令。对吗?
9.代码标号后不跟冒号,但是数据标号后跟冒号。对吗?
[解决办法]
1. 错。通常被保留作寻址堆栈数据的是 bp 吧,sp 是固定的堆栈指针寄存器不可更改。
2. 错。实现这个动作的应该是 ret(n) 指令。
3. 错。应该是寄存器相对寻址方式。
4. 错。应该用空格分隔开吧。
5. 对。用作保存返回地址吧。
6. 错。不能嵌套定义子程的。
7. 对。不过,(e)ax 通常作为返回参数而无须被列入;按照通常的子程对寄存器使用的约定,(e)dx 和 (e)cx 也无须列入,确须保存的话,有调用者而非子程来进行保存和恢复的操作。
8. 错。会在 ret 指令前生成对应的 pop 指令组的。
9. 错。masm 的语法正相反,代码标号后是带冒号的,数据标号后则无。