Asembler x86/Pierwszy program/FASM: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Doles (dyskusja | edycje)
Doles (dyskusja | edycje)
Linia 37:
Definiuje etykietę o nazwie ''start''.
<source lang="asm">
mov ax, dane
 
mov axds, daneax
mov ds, ax
</source>
Kopiuje adres segmentu ''dane'' do rejestru AX a następnie z rejestru AX do rejestru DS (do rejestrów segmentowych nie można przypisywać bezpośrednio adresów dlatego musiał tu pośredniczyć jakiś inny rejestr).
Linia 45 ⟶ 44:
 
<source lang="asm">
mov dx, tekst
 
mov dxah, tekst9
int 0x21
mov ah, 9
int 0x21
</source>
Ten fragment kodu zacznę tłumaczyć od końca. Instrukcja [[../Instrukcje/Różne#int|int]] wywołuje ''podprogram obsługi przerwania'' o podanym numerze (poprzedzenie go przedrostkiem 0x oznacza liczbę w zapisie szesnastkowym). Podprogram ów wywołuje odpowiednią funkcję o numerze podanym w rejestrze ah (wcześniej nadaliśmy temu rejestrowi wartość 9, więc instrukcja ''int 0x21'' wywołała funkcję numer 9 przerwania numer ''21 w zapisie szesnastkowym''). Wywołana w tym przypadku funkcja wyświetla w konsoli ciąg znaków, którego adres znajduje w rejestrze dx (przydzieliliśmy temu rejestrowi adres naszej zmiennej ''tekst''). W efekcie na ekranie pojawi się więc napis ''Hello World!''. </br>'''Uwaga''': należy zaznaczyć, że ''przerwanie 21h'' oraz opisana funkcja obsługiwane są przez MS-DOS, przez co kod nie jest przenośny na inne platformy niz Windows.
 
<source lang="asm">
mov ax, 0x4C00
int 0x21
</source>
Wywołuje funkcję przerwania 21 o numerze 0x4C00. Odpowiada ona za zakończenie działania programu i oddanie sterowania do systemu.