Я знаю k = 4, но я не вижу это значение ни в одном из регистров. Где же тогда будет храниться это число?
Если вы оптимизируете программу, значение, скорее всего, будет сохранено в регистре (но отладку программы будет намного сложнее).
Без оптимизации значение сохраняется в стеке (если быть точным, учитывая разборку, оно хранится в местоположении $rbp-8
) и загружается в регистр самой следующей инструкцией (той, которая перед который вы остановили).
Если вы сделаете stepi
и посмотрите на значение $rax
, вы найдете его прямо здесь.
PS info locals
даст вам информацию олокальные переменные.
Обновление:
Что делает stepi?
Выполняет одну машинную инструкцию, затем останавливается. Вы можете узнать это, прочитав руководство или используя команду help stepi
GDB.
Что такое / было $ rbp-8? Не могли бы вы объяснить немного больше о том, что это такое и как оно работает?
Это то, что будет описано в каждой вводной книге по программированию для x86.
Вкратце, актуальноСостояние выполнения программы можно описать как последовательность связанных записей активации или «фреймов». На x86 без оптимизации регистр $RBP
обычно используется как регистр указателя кадра (т.е. он указывает на текущий кадр). Локальные данные хранятся с отрицательным смещением от указателя кадра (здесь k
сохраняется со смещением -8).