«неправильные параметры» при использовании указателя в сборке, что не так? - PullRequest
1 голос
/ 08 января 2020

Я узнал в классе, что мы можем использовать указатели в сборке с этими скобками []. но в моей программе это работает и выдает «ошибку неверных параметров». буду очень рад, если вы мне поможете:)

cmp [cx], num
JNE LOOP1
inc count
jmp LOOP1

как вы видите, я пытаюсь посчитать число "num" в массиве, и есть проблема с первой строкой

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Простой ответ: сборка x86 не поддерживает два явных операнда памяти в одной инструкции.

Таким образом, ваша первая инструкция cmp [cx], num недействительна. Сначала загрузите один из аргументов в регистр, а затем выполните сравнение (например, так):

mov ax, num     ; preferably outside the loop
cmp [cx], ax
JNE LOOP1
inc count
jmp LOOP1

Это должно решить эту проблему.

[cx] не допустимый 16-битный режим адресации, поэтому выберите BX, SI или DI вместо того, чтобы перебирать указатель на массив.

0 голосов
/ 08 января 2020

Я понял, проблема была в том, что я сделал cx указателем, но только bx, di и si могут быть указателями. так что теперь мой код выглядит так:

mov bx, cx
cmp [bx], ax
JNE LOOP1
inc count
jmp LOOP1
...