assembly 将函数推入程序集中的堆栈

qoefvg9y  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(160)

查完这个问题
1.用具有相同效果的单个指令替换以下有效指令。不考虑对标志的影响。

push word L1
 jmp L2
L1:

我想知道什么样的数据类型可以pushpop在汇编和其他高级语言。我也很乐意知道我引用的问题的答案。

0sgqnhkj

0sgqnhkj1#

你只能压入/弹出一对字节,如果你想把AL中的一个字节保存在栈中,你不能写push al,你必须写push ax,但是这不是问题,因为它仍然完成了保存AL的任务。
在16位x86 CPU上,可以通过推送一对寄存器来推送32位值。哪个寄存器代表高16位,哪个代表低16位取决于您。如果您使用的是.386或更新的CPU,您可以使用单个指令推送整个32位寄存器,例如push eax
为了回答另一个问题,您要查找的指令是call L2call函数实际上推送了它后面的指令的地址,然后执行JMPcall的目的地。ret指令实际上是pop ip,因为它取栈顶的两个字节,并将ip寄存器设置为两个字节。(有一些“远返回”的工作方式不同,但这是一个简化的解释。)

相关问题