Witam, proste pytanko, dlaczego to nie dziala?
asm
mov AH, 4Ch
int 21h
end;
O ile się orientuję, to dlatego nie działa, ponieważ w trybie chronionym systemu operacyjnego nie można wywoływać przerwań - a współczesne systemy właśnie w takim trybie działają.
http://delphi.about.com/library/bluc/text/uc052501a.htm - popróbuj sobie przykłady stąd, np.:
function Sum(X,Y:integer):integer;
begin
asm
mov eax,X
add eax,Y
mov Result,eax
end;
end;
Tamta wstawka od Ciebie wywołuje przerwanie, możesz sobie w jakimś dosowym środowisku, np. Turbo Pascal'u takie wstawki stosować i będzie Ci działać.
Osobiście uważam, że nauka assemblera teraz nie ma sensu. C jest dość dobrą nakładką na assemblera :) A poza tym ludzie starają się tworzyć/ulepszać języki skryptowe (Python itp.), żeby łatwo i szybko można było programować. Mamy tak szybkie komputery teraz, że tylko w niektórych przypadkach optymalizacja jest uzasadniona.
Czyli na prawde nie ma nawet jak wypróbować skompilowanych programów? Na prawdę beznadziejne posunięcie ze strony twórców systemów...
Rozróżnij „użycie assemblera” od „użycie assemblera do wykonania funkcji systemowej DOS-a”. Przerwanie int 21h
jest to przerwanie do wywoływania funkcji DOS-owych.
Delphi to kompilator pod Windowsa. Można używać wstawek asemblerowych w Delphi, ale zgodnie ze znaczeniem tego słowa: wstawek. Np. do przeprowadzenia jakiejś operacji na pamięci, lub obliczeń które będą szybsze w asemblerze (lub które, bo to też się zdarza, łatwiej zapisać w asemblerze niż w języku wysokiego poziomu). Ale bez wywoływania funkcji zewnętrznych, a zwłaszcza przerwań DOS-a czy BIOS-u.
Wstawek DOS-owych (z przerwaniem int 21
itp.) możesz używać pisząc program pod DOS-a: czyli w Turbo Pascalu albo DOS-owej wersji Free Pascala.
Ale bierz też pod uwagę, że FPC (Free Pascal) nawet pod DOS-a to też tryb chroniony, co parę rzeczy komplikuje, a parę ułatwia.
Można też pod Windows pisać całkowicie w asemblerze (bez Delphi). Szukaj jednak poradników dotyczących Windowsa, a nie DOS-a.
Można też pisać pod Linuksa. Tam to wygląda nawet bardziej podobnie do DOS-a, bo funkcje systemowe Linuksa też się wywołuje przez przerwania (tam akurat int 80h
).
Osobiście uważam, że nauka assemblera teraz nie ma sensu.
Ma sens, bo ktoś musi pisać systemy operacyjne, biblioteki standardowe różnych języków, kompilatory, emulatory, zoptymalizowane funkcje przetwarzania dźwięku i obrazu.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.