16-битные инструкции по сборке, неправильно декодированные GDB

Я пытаюсь изменить свой собственный код, его 16-битную сборку в реальном режиме. Я написал следующую функцию:

inc di
mov cx , [di]
add cl , 0x46
jo exit 
sub cl , 0x46
cmp cl , '0'
jl exit
sub cl , '5'
jns exit
jnp exit

после того, как я скомпилировал его и запустил в Qemu, код изменяется на следующий код:

код из GDB

как видите первые 3 строки различны:

inc edi
mov ecx, DWORD PTR ds:0x7046c180
BYTE PTR es:[edi],dx

как это возможно? откуда процессор знает, как выполнять команды:

mov cx , [di]
add cl , 0x46
jo exit

насколько я знаю команду:

mov ecx, DWORD PTR ds:0x7046c180

переместить данные из указателя 0x7046c180 в ecx, но это равно 00000000,

свалка

Может кто-нибудь объяснить мне, почему компилятор изменил мою инструкцию на это, и как она работает так же, как мой код без jo инструкция?

0 ответов

Другие вопросы по тегам