Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ассемблер ругается на строку

Артур Солтанов Ученик (206), на голосовании 2 недели назад
!myfile.asm:14: error: invalid combination of opcode and operands
выдает на эту строку
cmp si, bl ; Сравниваем текущий индекс с BL
Голосование за лучший ответ
Jurijus Zaksas Искусственный Интеллект (443068) 1 месяц назад
Не все регистры можно сравнивать между собой. По-видимому, эти вот нельзя.
Строго говоря, cmp просто производит вычитание без сохранения результата. Что-то мне подсказывает, что арифметические действия с si не приветствуются, ну или ты пытаешься сравнивать регистры разных размеров.
Иволга яркая птицаУченик (61) 1 месяц назад
si и bl разного размера.
Jurijus Zaksas Искусственный Интеллект (443068) Очень может быть, я не помню, какого там размера этот si.
Татьяна Просветленный (36345) 1 месяц назад
Расширить bl до 16 бит:
 cmp si, bx 
Или использовать младший 8-битный регистр sil:

 cmp sil, bl  
Ошибка возникает, потому что команда cmp ожидает, что оба операнда будут одного размера, а в вашем случае si — это 16-битный регистр, а bl — 8-битный регистр. В ассемблере нельзя напрямую сравнивать регистры разного размера.
Чтобы исправить это, необходимо привести операнды к одному размеру. Например, можно расширить регистр bl до 16 бит с помощью регистра bx или уменьшить si до 8 бит с помощью его младшей части sil (в зависимости от архитектуры).
Похожие вопросы