On Wednesday 03 March 2004 14:02, Sergey 'DoubleF' Zaharchenko wrote:
> On Wed, 3 Mar 2004 06:23:28 +0000
>
> Daniela <[EMAIL PROTECTED]> probably wrote:
> > In this situation, I can only use a single-byte instruction to push 4
> > bytes, everything else costs me too much space. The only one I know of,
> > is PUSHA, but it pushes too many bytes.
>
> Quoting from dev-handbook:
> > But assembly language programmers like to shave off cycles. The above
> > example requires a call/ret combination. We can eliminate it by
> > pushing an extra dword:
> >
> > open:
> >     push    dword mode
> >     push    dword flags
> >     push    dword path
> >     mov eax, 5
> >     push    eax     ; Or any other dword
> >     int 80h
> >     add esp, byte 16
> >
> > The 5 that we have placed in EAX identifies the kernel function, in
> > this case open.
>
> The last time I wrote `push ebp \n mov ebp, esp' the push took 1
> byte :). `push <your_favorite_reg>' will work, as the kernel doesn't
> really care for the value of the dword.

Ah yes, thanks. I read that part of the handbook multiple times and never 
understood what that "push eax" is good for.
I was looking at an incomplete opcode list where that instruction is not even 
listed.


_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to