Operacje matematyczne są fundamentalnymi komponentami programowania na poziomie assemblera, umożliwiając bezpośrednią manipulację danymi na poziomie procesora. Assembler pozwala na precyzyjne kontrolowanie sposobu wykonywania operacji arytmetycznych, co jest niezwykle ważne w krytycznych aplikacjach wymagających optymalizacji pod względem wydajności. W tej lekcji skupimy się na prostym przykładzie, który pokazuje, jak wykonać operację dodawania i wyświetlić wynik w terminalu.
Przykład kodu: Wyświetlanie wyniku operacji dodawania
section .data
    message db 'Wynik dodawania to: ', 0
section .bss
    result resb 4
section .text
    global _start
_start:
    mov eax, 5          ; Przypisanie pierwszej liczby do EAX
    add eax, 10         ; Dodanie drugiej liczby do wartości w EAX
    ; Konwersja wyniku na ciąg znaków
    mov [result], eax   ; Zapisanie wyniku w zmiennej 'result'
    mov eax, 4          ; sys_write
    mov ebx, 1          ; deskryptor pliku (stdout)
    mov ecx, message    ; wskaźnik na początek wiadomości
    mov edx, 22         ; długość wiadomości
    int 0x80            ; Wywołanie przerwania
    ; Wyświetlenie wyniku (Wymaga konwersji z liczby na ciąg znaków)
    ; Tutaj uproszczono dla czytelności. W praktyce, należałoby skonwertować 'result' na ciąg znaków.
    ; Zakończenie programu
    mov eax, 1          ; sys_exit
    xor ebx, ebx        ; kod wyjścia 0
    int 0x80            ; Wywołanie przerwania
Wyjaśnienie działania programu
- Sekcja .data: Zawiera stały ciąg znaków, który będzie wykorzystany do wyświetlenia wiadomości w terminalu przed pokazaniem wyniku operacji matematycznej.
- Sekcja .bss: Rezerwuje miejsce na wynik operacji matematycznej. W tym przypadku zarezerwowano 4 bajty, które są wystarczające na przechowanie wyniku operacji dodawania dwóch liczb całkowitych.
- Sekcja .text: Zawiera właściwy kod programu. Program zaczyna się od umieszczenia dwóch liczb w rejestrzeeaxoraz wykonania na nich operacji dodawania. Następnie wynik jest zapisywany w pamięci.
- Konwersja i wyświetlenie wyniku: Aby wyświetlić wynik dodawania w terminalu, wynik przechowywany w rejestrze eaxpowinien zostać skonwertowany na ciąg znaków i wysłany na standardowe wyjście. Ten krok został uproszczony w powyższym przykładzie. W praktycznym zastosowaniu wymagałoby to użycia dodatkowego kodu do konwersji liczby na reprezentację tekstową (np. przez iteracyjne dzielenie liczby i konwersję reszt na znaki).
- Zakończenie programu: Program kończy działanie przez wywołanie systemowe sys_exit, sygnalizując systemowi operacyjnemu, że zakończył swoje działanie i może zostać bezpiecznie zamknięty.
Podsumowanie
Prezentowany kod to uproszczony przykład pokazujący, jak wykonać podstawową operację matematyczną w assemblerze.
