Макрос высокого уровня не распознается - начинающий MASM - PullRequest
1 голос
/ 07 июня 2010
main proc
 finit
 .while ang < 91
    invoke func, ang
    fstp res
    print real8$(ang), 13, 10
    print real8$(res), 13, 10
    fld ang
    fld1
    fadd
    fstp ang
 .endw
 ret
main endp

Что не так с этим фрагментом кода MASM?

Я получаю ошибку на .endw. Я провел несколько тестов, чтобы убедиться в этом. Ассемблер говорит мне invalid instruction operands.

Спасибо за ваше время!

1 Ответ

1 голос
/ 10 июня 2010

Помните, что masm - это "типизированный" язык ассемблера. И похоже, что ang определяется как реальное.

Проблема в том, что "while" генерирует команду cmp, за которой следует условный переход. И инструкция cmp получает некоторое целочисленное значение из регистра или памяти, но, конечно, не является действительным. Таким образом, ошибка «недопустимый операнд инструкции».

Причина, по которой это происходит в .endw, наиболее вероятна, потому что конструкция. While / .endw генерирует свой тест в нижней части цикла, а не в начале.

...