Размер операнда конфликтует в x86 блоке?

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

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

7
задан Mark V. 13 April 2010 в 00:45
поделиться

3 ответа

Может, попробовать

xor edx,edx
mov dl, al

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

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

6
ответ дан 6 December 2019 в 08:42
поделиться

Если вы просто хотите получить доступ к младшим 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
3
ответ дан 6 December 2019 в 08:42
поделиться

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

movzx edx, al

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

xor edx, edx 
mov dl, al
12
ответ дан 6 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: