Przejdź do zawartości

Asembler x86/Przerwania/80h

Z Wikibooks, biblioteki wolnych podręczników.
# 80h.S 

.data 
ciag: .string     "$$$$$$$$$$$$$$"       # ciąg piętnastu dowolnych znaków
len = . - ciag # . - = strlen()
.text
        .global  _start
_start: 
        movl $3, %eax         # wczytuje z klawiatury znaki, których
        xorl %ebx, %ebx
                              # liczba nie powinna przekroczyć tej w rejestrze EDX
        movl $ciag, %ecx    # jeśli wprowadzimy jednak więcej, nadmiarowe znaki pozostawione
        movl $len, %edx         # będą w buforze klawiatury, po wykonaniu funkcji
        int     $80h        # w rejestrze EAX umieszczona jest liczba faktycznie 
                                # wprowadzonych znaków włączając klawisz ENTER (znak 0Ah)
 
        movl %eax,%edx
        xorl %eax,%eax
        incl %eax
        incl %ebx
        int $80h

#wyjscie
        movl $1,%eax         # kończy program i wraca do powłoki systemowej
        xorl %ebx,%ebx         # w rejestrze EBX zwracany jest ewentualny kod błędu
        int $80h             # lub wartość, którą chcemy przekazać do powłoki