Я написал следующую программу сборки для получения кода операции различных регистров:
.section .text
.globl _start
_start:
add $1,%eax
add $1,%ebx
add $1,%ecx
add $1,%edx
add $1,%esp
add $1,%ebp
add $1,%esi
add $1,%edi
int $0x80
Я компилирую и связываю с:
gcc -c prog.s && ld prog.o
и дамп объекта:
0000000000400078 <_start>:
400078: 83 c0 01 add $0x1,%eax
40007b: 83 <b>c3</b> 01 add $0x1,%ebx
40007e: 83 c1 01 add $0x1,%ecx
400081: 83 c2 01 add $0x1,%edx
400084: 83 c4 01 add $0x1,%esp
400087: 83 c5 01 add $0x1,%ebp
40008a: 83 c6 01 add $0x1,%esi
40008d: 83 c7 01 add $0x1,%edi
400090: cd 80 int $0x80
Я бы ожидал, что %ebx
будет иметь код операции c1
, а это не так.Итак, мой вопрос: почему c3
код операции %ebx
для этих add
инструкций?