此问题已在此处有答案:
x86 assembly: Pass parameter to a function through stack(3个答案)
Setting segment registers after ORG instruction(1个答案)
Boot loader doesn't jump to kernel code(1个答案)
4天前关闭。
我试图通过将参数推送到堆栈上,然后将它们弹出到函数内部的寄存器中来将参数传递给函数调用,如下所示:
push keystring+0x7c00
call PrintString
jmp $
;====functions====
PrintString:
pop ecx
mov ah, 0x0e
LoopHead:
mov bl, 0
mov al, [ecx]
int 0x10
inc ecx
add bl, [ecx]
jnz LoopHead
ret
;====variables====
keystring:
db "Press any key...", 0
;====padding====
times 510-($-$$) db 0
db 0x55, 0xAA
如果我把参数存储在ecx中,并在函数中使用ecx,它就能正常工作,但由于某些原因,pop就不能工作。有人知道我该怎么解决吗?
1条答案
按热度按时间z8dt9xmd1#
我想明白了,伙计们,我不得不把它放进cx两次。如果没有你们的建议,我是无法弄清楚的,比如尝试16位地址,并且知道返回地址会自动推送到堆栈。如果有人感兴趣的话,下面是固定代码: