Пробую отладку, часть 4 (ассемблер Эльбрус)

Моя программа работает правильно, но завершается некорректно. Я хочу это исправить.

Взял код для завершения программы из 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]

Файл с исходным кодом программы размещаю здесь

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *