[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: A20 delay
- Date: Thu, 16 Dec 1999 00:40:42 -0500 (EST)
- From: Quality Quorum <qqi@world.std.com>
- Subject: Re: A20 delay
On 16 Dec 1999, Ian Lance Taylor wrote:
> Date: Wed, 15 Dec 1999 23:40:01 -0500 (EST)
> From: Quality Quorum <qqi@world.std.com>
>
> > BTW, gas still does not like 'jnz $1b' .
> >
> > I'd be happy to look at a test case.
>
> Apply patch, replace `more:' with `1:' and `jnz more' with `jnz $1b'
>
> First, I made a mistake talking about $1b. Temporary dollar labels
> use a trailing '$'. The expression $1b refers to the label 1b as an
> immediate value.
>
> It helps a lot to talk about a specific test case. You gave me
> instructions, but I might be starting from the wrong file, or I might
> follow the instructions incorrectly, or I might misinterpret the
> result.
>
> So, to be precise:
>
> This test case:
This is precisely what I had.
>
> movl $0x200, %eax
> 1: dec %eax
> jnz $1b
> ret
>
> fails, as I expect it to. jnz does not take an immediate operand. I
> get this error message:
>
> /home/ian/foo.s:3: Error: suffix or operands invalid for `jnz'
>
>
> This test case:
>
> movl $0x200, eax
> 1: decl eax
> jnz 1b
> ret
>
> appears to succeed.
>
> > Note that gas supports two different conventions for local variables:
> > the dollar sign convention and the numeric f/b convention. If you are
> > literally using `jnz $1b' then you are mixing them, which won't work.
>
> I am really puzzled, because there a few places in pc386 where various
> forms of
>
> jz $1f
> 1:
>
> are both assembled without a hitch and seems working ok.
>
> Again, a specific test case helps. I could not find any code in pc386
> matching your description. It may be there even though I was unable
> to find it.
>
> I did find this case:
>
> ljmpl $0x08, $1f
> 1:
>
> This is not a branch instruction. In gas syntax, the two operand ljmp
> instruction takes an immediate operand. $1f is an immediate operand
> referring to the label 1f.
Wow, how lucky I am that I only occasinally have to do this stuff.
BTW, is it documented somewhere ? I would be able to fiure it
out on my own in year.
>
> To see this, this test case fails:
>
> ljmpl $0x08, foo
> foo:
>
> while this test case succeeds:
>
> ljmpl $0x08, $foo
> foo:
>
> If you really have a test case which uses
> jz $1f
> 1:
> and which succeeds, please send it to me.
>
> Ian
>
Thanks,
Aleksey