Ich probiere gerade in der Turbo Pascal ähnlichen IDE im Dos ein Partitionsprogramm unter Benutzung des INT 13h zu programmieren. Manchen Funktionen des INT 13h muss man einen Buffer übergeben, weil sie so viele Daten liefern (z.B. die Funktion AH=48h). Dieser wird mittels Segment:Offset in die Register DS:SI übergeben:
Code: Alles auswählen
{$asmMode Intel}
{$Mode ObjFPC}
{$F+}
...
var
S, O: Word;
p: Pointer;
begin
getmem(p,$1A);
try
S := LongWord(p) div 16;
O := LongWord(p) mod 16;
asm
MOV AX, S
PUSH DS
MOV DS, AX // wenn ich diese Zeile auskommentiere, gibt es keinen Runtime-Error
POP DS
end ['AX','DS'];
finally
freemem(p,$1A);
end;
end;
Wo liegt mein Fehler? Funkt FPC zwischen PUSH und POP noch dazwischen und erwartet im DS einen anderen Wert?