Странное поведение абсолютной адресации
есть такой код:
bits 64
section .text
global _start
_start:
jmp _end
_end:
mov rax, 0
ret
при компиляции получается такой
_start:
0 jmp 2<_end>
_end:
2 mov eax,0x0
7 ret
тут видно что адресс метки _end это 2 тогда будет логично что jmp 2 будет то же что и jmp _end
bits 64
section .text
global _start
_start:
jmp 2
_end:
mov rax, 0
ret
на при компиляции уже получается совсем другое и код перестаёт работать так как задумывалось:
_start:
0 jmp 7<end+0x2>
_end:
5 mov eax,0x0
a ret
логично что 0 это адресс метки _start, но когда я пишу:
bits 64
section .text
global _start
_start:
jmp 0
_end:
mov rax, 0
ret
то при компиляции получится что 0 это адрес _end:
_start:
0 jmp 5<_end>
_end:
5 mov eax,0x0
a ret
почему так происходит?