Я получил какой-то непоследовательный результат инструкции.
Я не знаю, почему это происходит, поэтому я подозреваю, что регистр %es
делает что-то странное, но я не уверен.
Посмотрите на фрагмент кода ниже.
08048400 <main>:
8048400: bf 10 84 04 08 mov $HERE,%edi
8048405: 26 8b 07 mov %es:(%edi),%eax # <----- Result 1
8048408: bf 00 84 04 08 mov $main,%edi
804840d: 26 8b 07 mov %es:(%edi),%eax # <----- Result 2
08048410 <HERE>:
8048410: 11 11 adc %edx,(%ecx)
8048412: 11 11 adc %edx,(%ecx)
Результат 1:
%eax : 0x11111111
Видя этот результат, я догадался, что mov %es:(%edi),%eax
что-то вроде mov (%edi),%eax
.
, поскольку 0x11111111
хранится в HERE
.
Результат 2:
%eax : 0x048410cc
Однако результат Результат 2 было совсем другим.
Я предположил, что% eax равен 0x048410bf
, потому что это значение хранится в main
.
Но результат, как вы можете видеть, был другим.
Вопрос:
Почему происходит это несоответствие результата?
Кстати, значение %es
всегда было 0x7b во время выполнения обеих инструкций.