ďťż
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: |