Код ниже - это лишь небольшая часть программы, которую я сейчас пытаюсь написать, но никакие другие части программы не имеют отношения к делу, поэтому я только вставил то, что было необходимо. Во всяком случае, я пытаюсь переместить значение, хранящееся в inputLoopCounter, в ecx, чтобы определить, сколько раз цикл должен выполняться. Однако, когда я пытаюсь собрать эту программу, я получаю ошибку, указанную в заголовке вопроса. Может ли кто-нибудь объяснить причину этого?x86 сборка экстремальных новичков: «неверные операнды команд»?
.data
inputLoopCounter BYTE -1
.code
mov ecx,inputLoopCounter
Не эксперт x86, но, возможно, проблема заключается в том, что «BYTE» помещает в регистр, который ожидает 32-битное значение? Возможно, просто загрузите 'cl'. На самом деле, возможно, вам придется использовать скобки [] при загрузке из памяти. Я оставлю это для настоящих экспертов, которые скоро будут здесь :) –
Или 'movsx ecx, byte ptr [inputLoopCounter]', если вы действительно хотите, чтобы ваша переменная была байтом, но все же хотите загрузить ее в регистр dword. – Michael
@Michael Если для него не обязательно быть байтом, возможно ли изменить BYTE на DWORD, чтобы заставить его работать? EDIT: Спасибо, Хосе Мануэль Абарка Родригес, вы ответили на мой вопрос. Это была очень любительская ошибка. – Proto