Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 3 Mar 2004 15:34:34 +0000
From:      Daniela <dgw@liwest.at>
To:        Sergey 'DoubleF' Zaharchenko <doublef@tele-kom.ru>
Cc:        questions@freebsd.org
Subject:   Re: Strange behaviour in assembly language program
Message-ID:  <200403031534.34992.dgw@liwest.at>
In-Reply-To: <20040303170243.545985fc@Hal.localdomain>
References:  <200403022110.50014.dgw@liwest.at> <200403030623.28794.dgw@liwest.at> <20040303170243.545985fc@Hal.localdomain>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 03 March 2004 14:02, Sergey 'DoubleF' Zaharchenko wrote:
> On Wed, 3 Mar 2004 06:23:28 +0000
>
> Daniela <dgw@liwest.at> 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.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200403031534.34992.dgw>