Моя программа работает правильно, но завершается некорректно. Я хочу это исправить.
Взял код для завершения программы из hello-world от alexanius-а, убрал команду setwd для настройки регистрового окна. Теперь программа выглядит так
.section ".data"
.section ".text"
.global _start
_start:
{
addd, 0 0x0,0x1,%r1
addd, 1 0x0,0x2,%r2
}
{
addd, 0 %r1,%r2,%r3
}
! Подготавливаем вызов exit
{
sdisp %ctpr2, 0x1
addd, 0 0x0, 0x0, %b[1]
addd, 1 0x0, 0x1, %b[0]
}
! Вызываем exit
{
call %ctpr2, wbs = 0x4
}
Сборка и запуск отработали как нужно
juvescorp@yukari:~/test_asm$ as first_program.s -o first_program.o juvescorp@yukari:~/test_asm$ ld first_program.o juvescorp@yukari:~/test_asm$ ./a.out
Прогнал через отладчик — показывает, что программа завершилась нормально.
juvescorp@yukari:~/test_asm$ gdb a.out GNU gdb (GDB) 9.1-26.018 Copyright (C) 2020 Free Software Foundation, Inc. ... Reading symbols from a.out... (No debugging symbols found in a.out) (gdb) b _start Breakpoint 1 at 0x10078 (gdb) r Starting program: /srv/home/juvescorp/test_asm/a.out Breakpoint 1, 0x0000000000010078 in _start () (gdb) si 0x0000000000010088 in _start () (gdb) si 0x0000000000010090 in _start () (gdb) si 0x00000000000100a0 in _start () (gdb) si [Inferior 1 (process 10880) exited normally]
Файл с исходным кодом программы размещаю здесь
