Hangs after "Loading" but before "Uncompressing"

almesber en lrc.di.epfl.ch almesber en lrc.di.epfl.ch
Jue Ene 27 20:53:43 CST 2000


Richard B. Johnson wrote:
> Well! We went over this two years ago. The problem is that segment
> overrides are specifically excluded for the LODS, LODSB, LODSW, and
> LODSD instructions on the '486. (Page 16-203, Intel Rag called
> Intel 486 Microprocessor Family, Programmer's Reference Manual).

http://developer.intel.com/design/pentium/manuals/24319101.pdf
Intel Architecture Software Developer's Manual, Volume 2: Instruction Set
Reference Manual, page 3-275:

"LODS/LODSB/LODSW/LODSD-Load String [...] Loads a byte, word, or doubleword
 from the source operand into the AL, AX, or EAX register, respectively.
 The source operand is a memory location, the address of which is read from
 the DS:EDI [sic!] or the DS:SI registers (depending on the address-size
 attribute of the instruction, 32 or 16, respectively). The DS segment may
 be overridden with a segment override prefix."

While they're visibly not above typos, I'd be surprised if they mis-stated
anything as crucial as the support of segment overrides.

> The sreg field in the LODxx instruction does not exist! (page E-9).

(Page B-10 in the manual above.) Correct, but a segment override is
a _prefix_ (B-17, B-18), not part of the instruction's opcode per se.

> There is absolutely no reason whatsoever to use segment-overides in
> any of the code.

In 16 bit code ? Well, theoretically not, but I'm not sure turning

	mov	ax,es:[si]
	mov	bx,ss:[si+2]
	mov	cx,[si+4]

into (assuming CS == DS, and that ES, SS are a non-trivial distance
away from each other and from DS)

	mov	ds,[extra_segment]
	mov	ax,[si]
	push	cs		; there's no  mov es,cs, and we probably
	pop	ds		; don't want to sacrifice a register to
	mov	ds,[stack_segment]  ; avoid touching the stack
	mov	bx,[si+2]
	push	cs
	pop	ds
	mov	cx,[si+4]

makes the code more readable or more correct.

- Werner

-- 
  _________________________________________________________________________
 / Werner Almesberger, ICA, EPFL, CH       werner.almesberger en ica.epfl.ch /
/_IN_N_032__Tel_+41_21_693_6621__Fax_+41_21_693_6610_____________________/

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo en vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



Más información sobre la lista de distribución Ayuda