查完这个问题1.用具有相同效果的单个指令替换以下有效指令。不考虑对标志的影响。
push word L1 jmp L2 L1:
我想知道什么样的数据类型可以push或pop在汇编和其他高级语言。我也很乐意知道我引用的问题的答案。
push
pop
0sgqnhkj1#
你只能压入/弹出一对字节,如果你想把AL中的一个字节保存在栈中,你不能写push al,你必须写push ax,但是这不是问题,因为它仍然完成了保存AL的任务。在16位x86 CPU上,可以通过推送一对寄存器来推送32位值。哪个寄存器代表高16位,哪个代表低16位取决于您。如果您使用的是.386或更新的CPU,您可以使用单个指令推送整个32位寄存器,例如push eax。为了回答另一个问题,您要查找的指令是call L2。call函数实际上推送了它后面的指令的地址,然后执行JMP到call的目的地。ret指令实际上是pop ip,因为它取栈顶的两个字节,并将ip寄存器设置为两个字节。(有一些“远返回”的工作方式不同,但这是一个简化的解释。)
AL
push al
push ax
.386
push eax
call L2
call
JMP
ret
pop ip
ip
1条答案
按热度按时间0sgqnhkj1#
你只能压入/弹出一对字节,如果你想把
AL
中的一个字节保存在栈中,你不能写push al
,你必须写push ax
,但是这不是问题,因为它仍然完成了保存AL
的任务。在16位x86 CPU上,可以通过推送一对寄存器来推送32位值。哪个寄存器代表高16位,哪个代表低16位取决于您。如果您使用的是
.386
或更新的CPU,您可以使用单个指令推送整个32位寄存器,例如push eax
。为了回答另一个问题,您要查找的指令是
call L2
。call
函数实际上推送了它后面的指令的地址,然后执行JMP
到call
的目的地。ret
指令实际上是pop ip
,因为它取栈顶的两个字节,并将ip
寄存器设置为两个字节。(有一些“远返回”的工作方式不同,但这是一个简化的解释。)