F
Wenn das die Deklaration der Funktion in deinem C-Code ist:
int __cdecl disk_load_sector(int start, int anzahl, void *buffer);
dann ist das hier falsch:
;[bp+8] Start
;[bp+6] Anzahl
;[bp+4] Buffer
mov ax, 1000h
mov es, ax ; Ort, wo hingeladen wird
mov al, [bp+6]
;mov al,1
mov cl, [bp+8]
;mov cl,1
;mov bx, [bp+4] ; Offset, an dem begonnen werden soll zu laden
mov bx,[bp+4]
cdecl Aufrufkonvention:
Die Parameter werden von rechts nach links auf den Stack gepushed. Hier mal ein Beispiel aus Pascal heraus:
var
val : Integer;
function Summe(i1, i2, i3: Integer): Integer; cdecl;
asm
[asm] mov eax, [esp+8] // i1
mov edx, [esp+12] // i2
mov ecx, [esp+16] // i3
add eax, ecx
add eax, edx[/asm]
end;
begin
asm
[asm] push 3 // Parameter 3
push 2 // Parameter 2
push 1 // Parameter 1
call Summe // Summe(1, 2, 3);
add esp, 12
mov DWORD PTR [val], eax[/asm]
end;
writeln(val);
readln;
end.
Richtig wäre bei dir also:
PUBLIC _disk_load_sector
_TEXT SEGMENT
_Start$ = 4
_Anzahl$ = 6
_Buffer$ = 8
_disk_load_sector PROC
push bx
mov ax, _Start$[sp]
mov cx, _Anzahl$[sp]
mov bx, _Buffer$[sp]
; [...]
pop bx
_disk_load_sector ENDP
_TEXT ENDS
Ganz nebenbei wundert mich, dass du aus C heraus überhaupt diese Funktion finden konntest, da C-Compiler externe Symbole mit einem Underscore "_" vornweg erwarten