2010-06-07 1 views
1
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?Макрос высокого уровня не распознан - Новичок MASM

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

Благодарим вас за внимание!

+0

У меня такое ощущение, что проблема в коде, который генерирует препроцессор – Andrey

ответ

1

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

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

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

Смежные вопросы