Возможно, вы видите артефакты из знака расширения исходного значения. Если инструменты, которые вы используете для просмотра разборки, обрабатывают 0..255 как байт со знаком, то при загрузке его в больший тип int (или регистр) он заполнит все старшие биты знаковым битом оригинала. значение. Или, другими словами, если 0xFF является байтом со знаком, его десятичное значение равно -1. Поместите это в 32-битный регистр, и шестнадцатеричный код будет выглядеть как 0xFFFFFFFF, а его десятичное значение будет равно -1.
Попробуйте использовать значение без установленного старшего бита, например 0x7F. Поскольку бит знака не установлен, я предполагаю, что он будет заполнять верхние биты нулями при загрузке в больший регистр или поле типа int.
Также возможно, что компилятор / ассемблер усекает любое заданное вами значение. Я бы посчитал это ошибкой исходного кода, но ассемблеры - забавные звери. Если вы дадите ему 0x7FF, скомпилируется ли он в 0x7FF (не урезанный и больше 0..255) или в 0xFFFFFFFF (урезанный до 0..255, байт со знаком)?