",0
.locmetkaSizeOflocmetka1 db $-.locmetka1
jmp globmetka2.locmetka4
syscall
globmetka2:
.locmetka2 db "What will make ", 0
.locmetka3 db "2+2?😊", 10, 0
mov rax, 1
mov rdi, 1
mov rsi, globmetka1.locmetka1
mov rdx, .locmetkaSizeOflocmetka1
?
В исполняемом сегменте ты пишешь: 0x400000: globmetka1: 0x400000: globmetka1.locmetka1: 69 48 73 20 61 6c 61 76 20 21 00 00 0x400024: .globmetka1.sizeofMetka1: 24 E9 globmetka2.locmetka4 0F05 По итогу, ОС передаёт первую инструкцию из исполняемого сегмента. Но никакой инструкции там нет, это ASCII коды. А процессор это знает? С горем пополам он обработает: 0x00000000 486920736c61. imul rsp, qword [rax], 0x76616c73 0x00000007 61 invalid И потом сразу же ОС выбьет seg fault. Тебе нужно ставить весь текст далеко от исполняемого кода. А если и пришлось вставить в исполняемый код - тогда перепрыгивай его: jmp text_end text: db "Hello!", 0 text_end: ; code Потому что для процессора всё - инструкции, и посреди этих инструкций (каши) 100% тебе вернётся seg fault.
Да оно не скомпилируется, нечего беспокоиться.
Т.е. ASCII нужно в др. секцию ложить?
Добавил. Перепрочитай. Нужно держать весь текст далеко от исполняемого кода
Обсуждают сегодня