Ich habe zur Übung ein Stück Quell-Code in Assembler umgewandelt.
Delphi-Quellcode:
function TColorPalette.HitColorText(apt: TPoint): Integer;
var x : Integer;
{begin
if PtInRect(ClientRect, apt) then
if ((apt.x mod 17) > 14) or ((apt.y mod 17) > 14) then
Result := -1
else
Result := (apt.x div 17) + (apt.y div 17) * 8
else
Result := -1;
end;}
asm
// apt.x div 17
mov eax, apt.x
mov ecx, 17
push edx
mov edx, 0
div ecx
cmp edx, 14
jns @nowhere
mov x, eax
// apt.y div 17
pop edx
mov eax, apt.y
mov edx, 0
div ecx
cmp edx, 14
jns @nowhere
// Result := x + y(eax) * 8
shl eax, 3
or eax, x
cmp eax, 40
jns @nowhere
mov @Result, eax
jmp @1
@nowhere:
mov @Result, -1
// Result := -1
@1:
end;
Leider gibt es an einer anderen stelle im Programm ein Speicherproblem.
Wo mach ich was, was ich nicht darf?