Asembler x86/Zaawansowana architektura: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Doles (dyskusja | edycje)
Doles (dyskusja | edycje)
Nie podano opisu zmian
Linia 1:
==Wstęp==
== Funkcje przerwania 16h ==
Język Asembler można łączyć z językami wysokiego poziomu na dwa różne sposoby. Możemy użyć go bezpośrednio w kodzie źródłowym naszego programu np w C czy C++. Wówczas nie dość, że musimy znać nie tylko sam Asembler, ale także sposoby w jakie kompilator HLLa będzie daną wstawkę tłumaczył do postaci binarnej. Wiele kompilatorów ma własne sposoby i schematy na wprowadzanie kodu języka niskiego poziomu, przez co mamy małe utrudnienie w pisaniu programu, ale to się bardzo sprawdza gdy musimy napisać niedużo kodu w Asemblerze i w dodatku chcemy mieć "wszystko na miejscu" w jednym pliku.
Przerwanie 16h jest przerwaniem klawiatury i udostępnia specjalne funkcje dla tego elementu zestawu komputerowego. Poniżej znajduje się lista funkcji wraz z krótkim opisem.
 
Drugi sposób to pisanie naszych rozkazów w osobnym pliku jako, zupełnie autonomiczny moduł naszego programu, który będzie asemblowany osobno i następnie już w postaci binarnej łączony z skompilowanymi modułami języków wysokiego poziomu. Dzięki temu możemy pisać przy pomocy takiego asemblera jakiego chcemy, nie martwiąc się o to jak kompilator sobie poradzi z wstawką gdyż jej po prostu nie będzie. Ma to również tę zaletę, że jeśli zmodyfikujemy tylko kod w Asemblerze, nie musimy kompilować całego programu na nowo. Po prostu nasze zmiany linkujemy z starą wersją modułów programu i proces przebudowy całej aplikacji jest już krótszy.
{|class="wikitable" align="center"
 
!Funkcja
== Sposoby łączenia ==
!Nazwa
 
!Opis
[[Wikipedysta:Doles/Brudnopis/Wstawki| Wstawki w kodzie wysokiego poziomu]]
|--
[[Wikipedysta:Doles/Brudnopis/Moduły| Osobne moduły z kodem w Asemblerze]]
|01
|Sprawdzenie buforu klawiatury
|Funkcja ta sprawdza bufor klawiatury. Jeśli znajduje się w nim jakiś klawisz to jego kod klawiatury jest zwracany w AH, zaś kod ASCII w rejestrze AL. Jednocześnie flaga ZF jest ustawiana na 0 - w przeciwnym przypadku ZF jest ustawiony na 1. Sprawdzany klawisz nie jest usuwany z buforu.
|--
|03
|Ustawienie prędkości powtórzenia klawisza
|Funkcja ta służy do ustawienia prędkości, z jaką powtarzany jest kod wciśniętego klawisza. Wejście: AL=5, BH= opóźnienie powtórzenia, BL= prędkość powtórzenia. Dostępne są pewne wartości opóźnienia, mianowicie: 0 (250 ms), 1(500 ms), 2 (750 ms) oraz 3 (1000 ms). Prędkość powtarzania klawiszy mieści się w zakresie od 0 (najszybsza) do 1F (najwolniejsza).
|--
|05
|Umieszczenie klawisza w buforze
|Funkcja ta powoduje umieszczenie znaku klawisza i odpowiadającego mu kodu w buforze klawiatury. Wejście: CH=kod klawisza, CL=kod znaku. Jeżeli bufor klawiatury jest już zapełniony, to ustawiony zostaje znacznik CF (CF=1) zaś w rejestrze AL będzie wartość 1.
|}