37 lines
1.5 KiB
Plaintext
37 lines
1.5 KiB
Plaintext
|
|
;./тесты/вызов_функции/вызов_функции.elf
|
|||
|
|
;echo $? # должен быть 30
|
|||
|
|
|
|||
|
|
; ============================================================
|
|||
|
|
; вызов_функции.квс - тест вызова функций и возврата
|
|||
|
|
; ============================================================
|
|||
|
|
|
|||
|
|
.текст
|
|||
|
|
.глобал _start
|
|||
|
|
|
|||
|
|
_start:
|
|||
|
|
; Вызов функции с двумя аргументами
|
|||
|
|
переместить_имм рдиай, 10 ; первый аргумент = 10
|
|||
|
|
переместить_имм рсиай, 20 ; второй аргумент = 20
|
|||
|
|
вызвать сложить_два_числа
|
|||
|
|
|
|||
|
|
; Результат в RAX — используем как код возврата
|
|||
|
|
переместить рдиай, раикс ; первый аргумент sys_exit = результат
|
|||
|
|
переместить_имм раикс, 60 ; sys_exit
|
|||
|
|
вызов_системы
|
|||
|
|
|
|||
|
|
сложить_два_числа:
|
|||
|
|
; Пролог
|
|||
|
|
втолкнуть рбипи
|
|||
|
|
переместить рбипи, рсипи
|
|||
|
|
|
|||
|
|
; Тело функции: сложить аргументы
|
|||
|
|
прибавить рдиай, рсиай ; RDI += RSI
|
|||
|
|
переместить раикс, рдиай ; результат в RAX
|
|||
|
|
|
|||
|
|
; Эпилог
|
|||
|
|
переместить рсипи, рбипи
|
|||
|
|
вытолкнуть рбипи
|
|||
|
|
вернуться
|
|||
|
|
|
|||
|
|
.данные
|
|||
|
|
тестовая_переменная: .байт 0
|