Witam co jest zle w tym kodzie ??
function p_key : boolean; assembler;
asm
mov @result, 0
mov ah, 1
int 16h
jz @quit
mov @result, 1
@quit:
end;
Witam co jest zle w tym kodzie ??
function p_key : boolean; assembler;
asm
mov @result, 0
mov ah, 1
int 16h
jz @quit
mov @result, 1
@quit:
end;
function keyhit:boolean;
assembler;
asm
mov ah,01h
int 16h
jz @empty
mov al,01h {mov al,true}
jmp @quit
@empty:
xor al,al
@quit:
end;
function keyhit:boolean;
assembler;
asm
mov ah,01h
int 16h
mov al,01h
jnz @quit
xor al,al
@quit:
end;
Do @result możesz sie odwołac, jesli masz blok asm wewnątrz begin/end, czyli w zwyklej funkcji, jeśli zas piszesz funkcję czysto assemblerową, to wyniki:
sam sprawdz:
function one(b:byte):char; {boolean/shortint/1..2}
assembler;
asm
mov al,[b]
end;
function two(i:integer):word;
assembler;
asm
mov ax,[i]
end;
function four(l:longint):pointer;
assembler;
asm
mov dx,word ptr [l+2]
mov ax,word ptr [l+0] {mov ax,word ptr [l]}
end;
Delphi jest 32-bitowe, wiec 4-bajtowe wartosci zwracane są w EAX, natomiast dopiero 8-bajtowe w parze EDX:EAX, poza tym nie ma róźnicy (poza brakiem konieczności uzycia słówka 'assembler')
No zrobiłm tak jak mowiłes ale nie wiem dlaczego zawsze zwraca wartość 0 czyli false
if (p_key=true) then klaw(cyfra) else p_mouse(x,y,b);
funkcja :
function p_key : boolean;
Begin
Asm
mov @result, 0
mov ah, 1
int 16h
jz @quit
mov @result, 1
@quit:
end;
end;
Robiłem tez tak samo jak ty
function keyhit:boolean;
assembler;
asm
mov ah,01h
int 16h
mov al,01h
jnz @quit
xor al,al
@quit:
end;
ale to samo :(
A mi działa :]
A mi działa, więc masz coś zwalone poza tą funkcją ;]
// może nie używasz t.pascala ?
Juz zrobiłem musiałem troche zmienic ifka :D