Перейти к содержимому

Почему CALLSTACK так важен? Учебник по ассемблеру для начинающих | Программирование архитектуры x...

Mxy

0:00 / 0:00

Почему CALLSTACK так важен? Учебник по ассемблеру для начинающих | Программирование архитектуры x...

11 883 просмотра · 1 г. назад
Mxy
13 тыс. подписчиков
11 883 просмотра · 1 г. назад
;######################## ;# КОД ДЛЯ КОПИРОВАНИЯ И ВСТАВКИ: ;####################### .intel_syntax noprefix .global _start .text _start: lea r15, [resume_here] jmp print_hello resume_here: jmp exit exit: mov rax, 60 ;# код системного вызова для выхода xor rdi, rdi ;# обнуление rdi syscall ;# выполнение системного вызова print_hello: mov rax, 1 ;# запись mov rdi, 1 ;# вывод на терминал lea rsi, [hello] ;# начало строки lea rdx, [hello_len] ;# длина строки syscall ;# выполнить/вызвать ядро lea r15, [resume_hello] jmp print_goodbye resume_hello: jmp r15 print_goodbye: mov rax, 1 mov rdi, 1 lea rsi, [goodbye] lea rdx, [goodbye_len] системный вызов jmp r15 .data hello: .ascii "привет, мир!\n" hello_len = . - hello goodbye: .ascii "до свидания!\n" goodbye_len = . - до свидания ;# КОНЕЦ КОДА ;######################## Ссылка на эмулятор: https://x64.halb.it Следующее видео:    • IF STATEMENTS & Loops in Assembly | Condit...   ПЕРВОЕ видео курса:    • Learn Assembly For Beginners | Introductio...   ПРЕДЫДУЩЕЕ видео курса:    • How to Make Functions in Assembly: The JMP...   00:00 Почему функции не работают без стека вызовов? 01:09 Бесконечный цикл! 02:24 Как работают стеки вызовов 5:54 Проблема бесконечного цикла в коде 7:27 Кодирование стека вызовов на ассемблере 18:13 Использование настоящего стека вызовов 22:30 Команды стека: PUSH и POP