Конфликт размера операнда в сборке x86? - PullRequest
7 голосов
/ 13 апреля 2010

Я начинающий программист, который впервые пытается собрать. Извините заранее, если это невероятно хромой вопрос.

У меня есть символ, хранящийся в регистре EAX, но мне нужно переместить его в мой регистр DL. Когда я пытаюсь: mov dl, eax, я получаю ошибку C2443: конфликт размера операнда. Я знаю, что регистр eax является 32-разрядным, а dl - 8-разрядным ... Как мне решить эту проблему?

Ответы [ 3 ]

12 голосов
/ 13 апреля 2010

Что вы, вероятно, хотите:

movzx edx, al

Это скопирует al в dl и заполнит ноль остаток edx. Эта единственная инструкция эквивалентна этим двум инструкциям:

xor edx, edx 
mov dl, al
6 голосов
/ 13 апреля 2010

Попробуйте

xor edx,edx
mov dl, al

возможно? Первая инструкция, чтобы обнулить «ненужные» старшие биты edx (необязательно), а затем просто переместить младшие 8 из eax в edx.

Как уже отмечали другие, movzx делает это за один шаг. Стоит отметить, что в том же духе, если бы у вас было значение со знаком в al, вы могли бы использовать «movsx edx, al» для заполнения старших битов edx копией msb из al тем самым помещая в edx 32-битное представление со знаком.

3 голосов
/ 13 апреля 2010

Если вы просто хотите получить доступ к младшим 8 битам eax, используйте al:

mov dl, al

Вы можете получить доступ к младшим 8 битам, 16 битам или 32 битам каждого регистра общего назначения, изменив буквы в начале или в конце. Для регистра eax, используя eax, используйте все 32 бита, ax - младшие 16 бит, а al - младшие 8 бит. Эквивалентом для ebx является ebx, bx и bl соответственно и т. Д.

Обратите внимание, что если вы измените младшие 16 или 8 битов регистра, то старшие биты не изменятся. Например, если вы загружаете все единицы в eax, а затем загружаете ноль в al, то младшие 8 битов eax будут нулями, а старшие 24 бита будут единицами.

mov eax, -1 ; eax is all ones
mov al, 0 ; higher 24 bits are ones, lower 8 bits are zeros
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...