[ Pobierz całość w formacie PDF ]
" parametry przekazywane sÄ… od prawej do lewej, czyli tak jak w C.
Bogdan Drozdowski 101
Bogdan Drozdowski Język asembler dla każdego 2009-02-25
" jeśli to jest tylko możliwe, wszystkie parametry przekazywane są przez referencję, czyli przez
wskaznik. Gdy to jest niemożliwe, przekazywane są przez wartość.
" jeśli na liście parametrów pojawia się łańcuch znakowy, to na stosie przed innymi parametrami
umieszczana jest jego długość.
" wyniki są zwracane w tych samych miejscach, co w języku C.
Na przykład, następujący kod:
REAL FUNCTION aaa (a, b, c, i)
CHARACTER a*(*)
CHARACTER b*(*)
REAL c
INTEGER i
aaa = c
END
[...]
CHARACTER x*8
CHARACTER y*5
REAL z,t
INTEGER u
t=aaa (x, y, z, u)
[...]
będzie przetłumaczony na asemblera tak (samo uruchomienie funkcji):
push 5
push 8
push u_ ; adres, czyli offset zmiennej "u"
push z_
push y_
push x_
call aaa_
(to niekoniecznie musi wyglądać tak ładnie, gdyż zmienne x, y, u i z są lokalne w funkcji MAIN__, czyli są
na stosie, więc ich adresy mogą wyglądać jak [ebp-28h] lub podobnie).
Funkcja uruchamiajÄ…ca sprzÄ…ta stos po uruchomieniu (podobnie jak w C).
Dołączać moduły można bezpośrednio z linii poleceń (w każdym razie pod Linuksem z kompilatorem
F77/G77).
Podam teraz przykład łączenia Fortrana 77 i asemblera. W oryginale użyłem narzędzi Linuksowych: NASMa
i F77, ale po minimalnych przeróbkach powinno to też działać pod Windows. Oto pliki:
; NASM - asm1fl.asm
section .text use32
global suma_
suma_:
; po wykonaniu push ebp i mov ebp, esp:
; w [ebp] znajduje siÄ™ stary EBP
; w [ebp+4] znajduje siÄ™ adres powrotny z procedury
102 Bogdan Drozdowski
2009-02-25 Język asembler dla każdego Bogdan Drozdowski
; w [ebp+8] znajduje siÄ™ pierwszy parametr,
; w [ebp+12] znajduje siÄ™ drugi parametr
; itd.
%idefine a [ebp+8]
%idefine b [ebp+12]
push ebp
mov ebp, esp
; przypominam, że nasze parametry są w rzeczywistości
; wskaznikami do prawdziwych parametrów
mov edx, a ; EDX = wskaznik do 1-szego parametru
mov eax, [edx] ; EAX = 1-szy parametr
mov edx, b
add eax, [edx]
leave
ret
I teraz plik asmfl.f:
PROGRAM funkcja_zewnetrzna
INTEGER a,b,suma
a=1
b=2
WRITE (*,*) suma(a,b)
END
Po skompilowaniu (ewentualnie zmieniajÄ…c opcjÄ™ -f u NASMa):
nasm -f obj -o asm1fl.obj asm1fl.asm
f77 -o asmfl.exe asmfl.f asm1fl.obj
i uruchomieniu na ekranie powinna ponownie pojawić się cyfra 3.
Informacji podanych w tym dokumencie NIE należy traktować jako uniwersalnych, jedynie słusznych reguł
działających w każdej sytuacji. Aby uzyskać kompletne informacje, należy zapoznać się z dokumentacją
posiadanego kompilatora.
Poprzednia część kursu (Alt+3)
Kolejna część kursu (Alt+4)
Spis treści off-line (Alt+1)
Spis treści on-line (Alt+2)
Ułatwienia dla niepełnosprawnych (Alt+0)
wiczenia:
Bogdan Drozdowski 103
Bogdan Drozdowski Język asembler dla każdego 2009-02-25
1. Napisz plik asemblera, zawierający funkcję obliczania reszty z dzielenia dwóch liczb całkowitych.
Następnie, połącz ten plik z programem napisanym w dowolnym innym języku (najlepiej w C/C++,
gdyż jest najpopularniejszy) w taki sposób, by Twoją funkcję można było uruchamiać z tamtego
programu. Jeśli planujesz łączyć asemblera z C, upewnij się że Twoja funkcja działa również z
programami napisanymi w C++.
104 Bogdan Drozdowski
2009-02-25 Język asembler dla każdego Bogdan Drozdowski
Jak pisać programy w języku asembler?
Część 11 - Pamięć jest nietrwała, czyli jak posługiwać się plikami.
Jak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do
najbliższego wyłączenia prądu. Dlatego trzeba je zapisywać do pliku, a potem umieć je z tego pliku odczytać.
W tej części zajmiemy się właśnie operacjami na plikach.
Do operowania na plikach posłużymy się kilkoma funkcjami przerwania 21h:
" AH = 3Ch - utworzenie pliku (wymazanie, gdy już istnieje).
W rejestrze CX podajemy atrybuty pliku (ustawiony bit 0 oznacza plik tylko do odczytu, bit 1 - czy
plik ma być ukryty, bit 2 - plik systemowy, 3 - etykieta woluminu, 4 - zawsze zero, 5 - plik
archiwalny), a DS:DX wskazuje na nazwÄ™ pliku.
UWAGA: Nazwa musi być zakończona bajtem zerowym
Niewypełnienie powyższego warunku jest przyczyną wielu błędów w programach.
W rejestrze AX otrzymujemy uchwyt do pliku (file handle) - specjalną wartość przydzielaną nam
przy otwieraniu pliku.
[ Pobierz całość w formacie PDF ]
Linki
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- nadbugiem.xlx.pl
Bogdanowicz Marta O dysleksji czyli specyficznych trudnościach w czytaniu i pisaniu
Delpard Raphael Zeznania sekretarki. 12 lat u boku Hitlera 1933 1945
Blake Jennifer Z dala od zgieśÂ‚ku
Greg Bear Songs of Earth 01 The Infinity Concerto
Harry Potter Jetnik iz Azkabana
Latitude Zero Laurence James(1)
Le Guin Ursula K. Hain 08 Cztery drogi ku przebaczeniu