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

Usunięta treść Dodana treść
poprawki
Linia 27:
Oznacza, że od tego miejsca w dół definiowany jest nowy segment o nazwie ".data".
 
<source lang="asm">tekst db "Hello World!",0Ah,0Dh,0Ah,"$"</source>
Ta linijka dodaje zmienną do obecnie definiowanego segmentu (w tym przypadku chodzi o segment "dane.data"). ''tekst'' to nazwa naszej zmiennej, ''db'' to typ naszej zmiennej (db - 1 bajt), zaś wszystko, co znajduje się dalej w tej linijce to wartość początkowa dla naszej zmiennej. Jak widać, jest to ciąg znaków zakończony znakami 0D0A (określające przejście do nowej linii) oraz znakiem $ oznaczającym koniec naszego ciągu (dla migrantów z C/C++ - jest to odpowiednik znaku '\0'). Gdyby zabrakło tego znaku, instrukcje operujące na naszej zmiennej nie mogłyby określić, gdzie jest jej koniec, więc wyjechałyby poza przydzielony jej obszar pamięci dopóki nie znalazłyby znaku $.
 
<source lang="asm">segment .s stack</source>
Linia 45:
mov ss, ax
</source>
Instrukcja [[Asembler X86/Instrukcje/Transferowe#mov|mov]] kopiuje wartość drugiego parametru do pierwszego. Jako, że po starcie programu rejestry segmentowe są niezainicjowane, musimy ręcznie przydzielić im adresy odpowiednich segmentów. W pierwszej linijce kopiujemy '''adres''' segmentu ''dane.data'' do rejestru ax. Następnie, z rejestru ax kopiujemy go do rejestru segmentowego ds (instrukcja mov nie pozwala na bezpośrednie przydzielanie wartości rejestrom segmentowym, dlatego musieliśmy użyć rejestru ax jako pośrednika). W następnych 2 linijkach powtarzamy operację, tyle że kopiujemy adres segmentu stosik.s (który jest stosem naszego programu) do rejestru ss.
 
<source lang="asm">