From mboxrd@z Thu Jan 1 00:00:00 1970 From: Phil Goembel Subject: Re: ELKS port of Adventure - help needed :) Date: 11 Dec 2002 17:59:56 -0600 Sender: linux-8086-owner@vger.kernel.org Message-ID: <1039651196.1847.43.camel@Castle.goembel> References: <200212112222.gBBMMA5G007271@eddie.loc> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <200212112222.gBBMMA5G007271@eddie.loc> List-Id: Content-Type: text/plain; charset="us-ascii" To: Richard Wallman Cc: linux-8086@vger.kernel.org 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