ďťż

asmwtpas

Lemur zaprasza


Jak pisać wstawki asemblerowe w turbo pascalu

"
Assembler i turbo pascal
"


Na wstępie tego rozdziału wielkie dzięki dla wszystkich, którzy
proponowali mi jego przygotowanie - istotnie wielu ludziom krótki
opis jak wstawiać wstawki w asm do turbo pascala może się przydać,
choć w sumie sprawa jest dość prosta, toteż - jak zwykle - w wielkim
skrócie ją omówię i pozostawiwszy mały paskalowy przykładzik,
zakończę.


1. Kwestia zmiennych/danych:
Pascal nie udostępnia instrukcji "DB" czy "DW", lecz wszystkie dane
trzeba deklarować na początku programu/procedury np.

Const
napis:string='Czesc uzytkowniku'#13#10'$';
[...]
VAR
zmienna:word;



2. Dostęp do zmiennych:
Kiedy już zadeklarowaliśmy zmienne, obojętnie czy są to zmienne
globalne (deklarowane w głównej sekcji zmiennych programu), czy
lokalne (deklarowane w "VAR" podprocedury/funkcji), mamy do nich
dostęp z poziomu ASM: Możemy odwoływać się do ich
segmentu/przesunięcia za pomocą instrukcji "SEG Zmienna" i
"OFFSET Zmienna" które działają tak samo jak analogiczne instrukcje
np. w TASM. Poza tym możemy używać naszych zmiennych w instrukcjach
typu MOV, np.:


MOV AX,Zmienna


Musimy tu jednak pamiętać, że zmienne są to umowne obszary
zaalokowanej pamięci, więc są traktowane jako pamięć i nie można
dokonywać np. transferu zmienna-zmienna za pomocą MOV - zob.
.

3. Sposób numeracji:
Domyślnie w pascalu i również we wstawkach w asemblerze, obowiązuje
numeracja dziesiętna (zapis 10 oznacza 10d czyli 0AH), ale oczywiście
można używać zapisu szesnastkowego i to na dwa sposoby - poprzedzając
liczbę znakiem "$" (np. $0a), lub dodając na końcu liczby literkę "h"
(np. 0ah).

,br>

4. Kwestia segmentów:
Trzeba pamiętać, że Pascal generuje jako kod wynikowy, program typu
.exe, który m.in. tym różni się od .com'ów, że może się mieścić w
kilku segmentach - nie obowiązuje tu zasada, że CS i DS to ten sam
segment. Wynika z tego, że chcąc odwołać się do jakiejś zmiennej przez
jej wskaźnik (np. wydruk łańcucha INT 21h/09h) nie możemy z góry
zakładać, że DS już na nią (zmienną) wskazuje, metodę uniknięcia
komplikacji pokazuję w przykładzie.

5. Czy warto zapamiętywać rejestry na stosie:
Nie wiem czy istotnie jest to konieczne w podprocedurach, ale jeśli
używamy wstawki asm w programie głównym jest to raczej wskazane -
jeśli nie zapiszesz rejestrów może wysypać ci się program; dlatego
polecam metodę, że na początku wstawki w asm zapamiętujesz rejestry,
które ulegną zmianie, przed jej zakończeniem - pobierasz oryginalne
wartości rejestrów.



I to tyle teoretyzowania w sprawie pascala, na koniec tradycyjnie już
i zwyczajowo polecam wgląd do ,
lub najbardziej niezawodną metodę - bolesną, lecz pouczającą a nazwaną
"eksperyment" lub "metoda prób i błędów":-).

 


Powrót do spisu treści
kursu





by


Form and Graphics:

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • teen-mushing.xlx.pl
  • Wątki
    Powered by wordpress | Theme: simpletex | © Lemur zaprasza