Re: ELKS port of Adventure - help needed :)

Phil Goembel
2002-12-11T23:59:56Z

On Wed, 2002-12-11 at 16:22, Richard Wallman wrote:
> On 11 Dec, Richard Wallman wrote:
>
> > Possible a source code or bcc problem
>
> It's a bcc problem: strcmp doesn't return the right values.
>
Yes, I was thinking either a compiler problem or a
runtime library problem.

I think on line 142 of libc/string/string.c:
>
> sbb ax,ax ; Collect correct val (-1,1).
>
This is suspicious, as I would expect the result to be
either -1 or 0 (I'm not an 8086 assembly guru, though),
depending on the borrow bit.

The borrow bit should be unchanged (I'm assuming the
8086 arithmetic instructions work like all other 2's
complement processors I've worked with).

I don't, think after the sbb, that the status bits
resulting from a compare would be preserved,
i.e. you would not be able to distinguish between a
value being less than, equal, or greater than another
value. The sbb would clobber the status, and just
give greater than or not greater than (borrow or not
borrow).

It's hard to say without seeing the code. If you want
to email me the assembly code, that would help.

> I'm not too hot on x86 assembly, but surely this command is subtracting
> the ax register from itself, using the status flags to show sign? Does
> the processor support a negative and positive zero value?
>
> The next line (orb al,#1) then turns on bit 1. It is assuming that the
> scasb command has correctly set the right flag to indicate whether the
> comparison was negative or positive, and so give the sign.
>
Sigh. Guess I'm going to have to set up the ELKS development
environment to help here. If the orb is the very next instruction,
after the sbb, it would change 0 to 1, but leave -1 unchanged.

Where does the scasb fit in?

> I think this is what's wrong - every time, I'm getting a -1 result from
> strcmp.
>
>
>
> Paul: short answer = rewrite strcmp. Only "vocab.c" and "english.c" use
> that function, so just replace all references. sed is your friend. :)

This is a good idea. I'm surprised nobody's run into problems
with strcmp before this, though.

Is strcmp written in assembly, or are you looking at the code
generated by the compiler?

Sorry about asking such basic questions, but it's been a long
time since I've actually tried to set up the ELKS development
environment (and failed). So I don't have the source code
on hand. I've been lurking ever since, but I thought here was
a simple problem I could help with. Heh!

Phil