я нахожусь в данный момент изучает код сборки скомпилированные из простых программ С с использованием objdump, но это меня смущает:приставной Инструкция по монтажу с использованием байт вместо длинного
4004f1: c7 45 fc 02 00 00 00 movl $0x2,-0x4(%rbp)
4004f8: 83 45 fc 05 addl $0x5,-0x4(%rbp)
ли не «л» префикс в инструкции долго стоят, для movl он выглядит отлично, но addl, кажется, использует один байт для операнда, почему это?
Инструкция была закодирована как [ADD г/m32, imm8] (http://www.felixcloutier.com/x86/ADD .html). Поскольку 5 байт в байте, ассемблер решил его кодировать таким образом. Значение 5 получает знак, расширенный до 32 бит и сохраняемый в месте назначения. –
Сохранено = добавлено oops. –