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, код изменяется на следующий код:
как видите первые 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
инструкция?