nacer@hpmcaa.mcm.hp.com (Abdenacer Moussaoui) (04/09/91)
Hi, DOS Int. 25/26 (dec 37 and 38) do not clean up the stack. Instead
they finish and return to the program with one word left on the stack.
This is probably the cause for my following code hanging. I tried to
follow intr() with and POP DX but this won't do it. Can anyone
provide a solution (assembly, inline code, ...) to achieve what is
intended here. I do want to use Int 25 instead of 13 hex. Thanks in
advance.
----------
PROCEDURE DSK_SECTOR_READ_ABS
( DRIVE : BYTE ;
SECTOR_COUNT,
SECTOR_SEQ_NUMBER : INTEGER ;
VAR BUFFER : BUFFER_T ) ;
VAR
REG : registers ;
BEGIN
REG .AX := 0 ;
REG .AX := DRIVE ;
REG .CX := SECTOR_COUNT ;
REG .DX := SECTOR_SEQ_NUMBER ;
REG .BX := OFS( BUFFER ) ;
REG .DS := SEG( BUFFER ) ;
INTR( $25, REG ) ;
INLINE( $5A ) ; { POP DX }
END ; {DSK_SECTOR_READ_ABS}
{--06/11/1986-V1.00-------------------------------------------------}
Thank you.
--Abdenacer (nacer@hpmcaa.mcm.hp.COM)
--
Thank you.
--Abdenacer (nacer@hpmcaa.mcm.hp.COM)del@DIALix.oz.au (D Elson) (04/17/91)
Yes, I have solved the problem. Basically it's simple -- put the following code immediately after the INT 25/26 call: LAHF POPF That way, you save the flags in AH and pop them off the stack. It's only the flags that are left behind. Del (del@DIALix.oz.au).