Архив рубрики: Без рубрики

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

Нашёл более удобный способ смотреть значения регистров в gdb.

Это команда display $<имя регистра>

В моём случае

(gdb) display $r1
1: $r1 = {dword = 65656, {tag0 = 0, tag1 = 0}}
(gdb) display $r2
2: $r2 = {dword = 131952, {tag0 = 0, tag1 = 0}}
(gdb) display $r3
3: $r3 = {dword = 0, {tag0 = 0, tag1 = 0}}
(gdb) display $ctpr3
4: $ctpr3 = {dword = 2161727821137838080, {ta_base = 0, ta_tag = 0, opc = 3,
ipd = 3}}
(gdb) display $wd
5: $wd = {dword = 274882102496, {base = 1248, size = 64, psize = 64, fx = 0}}
(gdb) display $ip
6: $ip = 65672

Плюс удобно, что при выполнении шага значения регистров сразу отображаются.

(gdb) si
0x0000000000010098 in _start ()
1: $r1 = {dword = 1, {tag0 = 0, tag1 = 0}}
2: $r2 = {dword = 2, {tag0 = 0, tag1 = 0}}
3: $r3 = {dword = 0, {tag0 = 0, tag1 = 0}}
4: $ctpr3 = {dword = 2161727821137838080, {ta_base = 0, ta_tag = 0, opc = 3, 
    ipd = 3}}
5: $wd = {dword = 274882101680, {base = 432, size = 64, psize = 64, fx = 0}}
6: $ip = 65688

Пройду дальше до конца

(gdb) si
0x00000000000100a0 in _start ()
1: $r1 = {dword = 1, {tag0 = 0, tag1 = 0}}
2: $r2 = {dword = 2, {tag0 = 0, tag1 = 0}}
3: $r3 = {dword = 3, {tag0 = 0, tag1 = 0}}
4: $ctpr3 = {dword = 2161727821137838080, {ta_base = 0, ta_tag = 0, opc = 3, 
    ipd = 3}}
5: $wd = {dword = 274882101696, {base = 448, size = 64, psize = 64, fx = 0}}
6: $ip = 65696
(gdb) si
0x00000000000100a8 in _start ()
1: $r1 = {dword = 1, {tag0 = 0, tag1 = 0}}
2: $r2 = {dword = 2, {tag0 = 0, tag1 = 0}}
3: $r3 = {dword = 3, {tag0 = 0, tag1 = 0}}
4: $ctpr3 = {dword = 2197756618156802048, {ta_base = 0, ta_tag = 2, opc = 3, 
    ipd = 3}}
5: $wd = {dword = 274882102464, {base = 1216, size = 64, psize = 64, fx = 0}}
6: $ip = 65704
(gdb) si

Program terminated with signal SIGKILL, Killed.
The program no longer exists.

К сожалению, посмотреть регистры на отдельной панели не получилось — выдаётся ошибка

(gdb) layout regs
Cannot enable the TUI: error opening terminal [TERM=xterm-256color]

Вывод содержимого памяти по адресу

(gdb) x/2i 0x10088
=> 0x10088 <_start+16>:
addd,0 0x0, 0x1, %dr1
addd,1 0x0, 0x2, %dr2

0x10098 <_start+32>:
addd,0 %dr1, %dr2, %dr3

Вывод ассемблерного кода функции

(gdb) disassemble _start
Dump of assembler code for function _start:
0x0000000000010078 <+0>:
setwd wsz = 0x4, nfx = 0x1, dbl = 0x0

=> 0x0000000000010088 <+16>:
addd,0 0x0, 0x1, %dr1
addd,1 0x0, 0x2, %dr2

0x0000000000010098 <+32>:
addd,0 %dr1, %dr2, %dr3

0x00000000000100a0 <+40>:
nop 5
return %ctpr3

0x00000000000100a8 <+48>:
ct %ctpr3
ipd 3

End of assembler dump.

 

Исходные коды (урок 2, архитектура RISC-V, неделя 5, сентябрь 2023)

НазваниеРазмерИзменён
BasicMacros.asm13753 байт1125 дн. 11 час. назад
Lesson2.asm11565 байт1125 дн. 11 час. назад

Исходные коды (урок 3, архитектура x86, неделя 5, сентябрь 2023)

НазваниеРазмерИзменён
Makefile622 байт1127 дн. 10 час. назад
boot.S484 байт1127 дн. 10 час. назад
console.c726 байт1127 дн. 10 час. назад
console.h399 байт1127 дн. 10 час. назад
grub.cfg89 байт1127 дн. 10 час. назад
io.h180 байт1127 дн. 10 час. назад
linker.ld341 байт1127 дн. 10 час. назад
list.h35012 байт1127 дн. 10 час. назад
main.c424 байт1127 дн. 10 час. назад
sched.c1266 байт1127 дн. 10 час. назад
sched.h522 байт1127 дн. 10 час. назад
types.h360 байт1127 дн. 10 час. назад

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

В прошлый раз были разобраны команды для отображения регистров.

Сейчас я попробую посмотреть, как меняются значения регистров по ходу выполнения программы. Смотреть буду через отладчик gdb.

Исходный код программы такой

.section ".data"

.section ".text"
    .global _start

_start:
{
setwd wsz = 0x4, nfx = 0x1
}
{
 addd, 0 0x0,0x1,%r1
 addd, 1 0x0,0x2,%r2
}

{
 addd, 0 %r1,%r2,%r3
}
{
 nop 5
 return %ctpr3
}

! Вызываем exit
{
 ct %ctpr3
}

Запустил отладчик на этой программе Читать далее →

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

В прошлый раз я смог запустить программу, но она, насколько понимаю, завершалась некорректно. Сегодня я посмотрю значения регистров. Делать это буду через отладчик gdb.

Выяснил, что содержимое регистров, начинающихся с буквы r, можно посмотреть командой

info r-registers

или просто

info registers

Содержимое предикатных регистров можно посмотреть командой Читать далее →

Пробую программировать, часть 2 (ассемблер Эльбрус)

В прошлый раз я не смог скомпилировать простейшую программу. Сейчас я попробую задать параметры регистрового окна и запустить компиляцию вновь.

.section ".data"

.section ".text"
.global _start

_start:
{
setwd wsz = 0x4, nfx = 0x1, dbl = 0x0
}
{
addd, 0 0x0,0x1,%r1
addd, 1 0x0,0x2,%r2
}

{
addd, 0 %r1,%r2,%r3
}
{
sdisp %ctpr1, 0x1
}

! Вызываем exit
{
call %ctpr1, wbs=0x4
}

Читать далее →