Программирование NASM - ʻint0x80` по сравнению с ʻint 0x80`

У меня есть простая программа NASM, которая вызывает только sys_exit :

segment .text
    global _start
    _start:
        mov eax, 1 ; 1 is the system identifier for sys_exit
        mov ebx, 0 ; exit code
        int 0x80 ; interrupt to invoke the system call

Когда я впервые написал ее, я сделал ошибку и забыл пробел между int и 0x80 :

        int0x80

... но программа по-прежнему компилируется без проблем!

[prompt]> nasm -f elf MyProgram.asm
[prompt]> ld -o MyProgram MyProgram.o

При запуске у меня возникла ошибка сегментации!

[prompt]> ./MyProgram
Segmentation fault

Так что же делает эта программа - исходная, которую я написал, с отсутствующим пространством? Что означает int0x80 (без пробела) в NASM?

segment .text
    global _start
    _start:
        mov eax, 1
        mov ebx, 0
        int0x80 ; no space...
6
задан Richard JP Le Guen 25 March 2011 в 03:03
поделиться