Во-первых, «недопустимое переопределение сегмента» относится к тому, как вы выразили [dl: eax].В этом выражении «dl» действует как нечто, называемое сегментным регистром.Проблема в том, что dl не является допустимым регистром сегмента.Сегментные регистры - это не то, что вы хотите использовать в этом случае.
Я хочу уточнить, что вы спрашиваете в своем вопросе:
- numh ссылается на некоторую 5-байтовую область памяти
- edx содержит, например, 0x12345678, и «самым левым байтом edx» вы хотите сохранить 0x12
Если вышеприведенное верно, вам нужно сохранить edx (если вам нужноо его содержимом), сдвиньте вправо на 24 бита, чтобы получить 0x12 в dl, а затем сохраните его.
Вот несколько ASM на моей голове:
push edx ; save initial value
shr edx, 24 ; get the leftmost byte down to the 'dl' portion of edx
mov [numh], dl ; write the byte to the memory referenced by numh
mov [numh+1], eax ; write eax
pop edx ; restore original edx value
Примечание: я могуне помню, действительно ли "mov [numh + 1]".Но я надеюсь, что это заставит вас двигаться в правильном направлении.