Нужно написать цикл с таким условием, что он выполняется пока два числа будут не равны другу Вот код: Код (Text): int a = 1; int b = 5; int c = 0; _asm{ mov eax,a mov ecx,b mov edx,c L1: cmp eax,ecx ; Если eax=edx то установить флаг zf=1 je exit ; Если флаг zf=1 , то выход ;Ошибка: Произведена попытка выполнения ; неверной последовательности блокировки. dec ecx ; ecx = ecx - 1 inc edx ; edx = edx + 1 jmp L1 exit: } В чёем здесь дело?
это сравнение eax с ecx. Зачем тебе вообще 3 регистра? Если ты хочешь сравнивать ecx и edx, которые инициализируются в 5 и 0 и меняются на 1 каждый в разные стороны то цикл будет бесконечным т.к. сравнивать ты будешь следующие пары: 5-0 4-1 3-2 2-3 ... Вобщем возимь отладчик и смотри как меняются значения регистров.
asd все верно сказал, но раз ты такую задачу сюда запостил, то тебе скорее всего прост было в лом разбиратца и ждешь готового кода. Вот он: Код (Text): int a = 1; int b = 5; _asm{ mov eax,a mov ecx,c L1: cmp eax,ecx je exit ; если еах и есх равны, то перейдет на метку ехit dec eаx ; уменьшает еах до тех пор, пока не будет равен есх. jmp L1 exit: }
вы что-то не то пишете, начиная с ТС По порядку: что за ошибка? Цикл написан НОРМАЛЬНЫЙ, не бесконечный, и вполне правильный По #3: это совсем другое, не то что в 1-м посте. У ТС цикл должен завершиться после 4-х итераций (но 5 сравнений - поскольку сначала сравнение, потом декремент и "тело" с инкрементом edx): 1 и 5 1 и 4 1 и 3 1 и 2 1 и 1 (выход) и на выходе edx будет =4 ошибки могут быть на стадии компиляции: - из-за "ассемблерных" комментариев в inline-ассемблере. Убрать комментарии. - из-за большого расстояния между je и меткой (по идее, нормальные компиляторы это разруливают - но вдруг?) - если ТС привел примерный код, опустив в теле цикла здоровенный кусок, по его мнению не существенный для понимания - из-за ссылки вперед, если ассемблерный код по какой-то причине компилируется в 1 проход. - маловероятно, но из-за использования в качестве метки слова "exit" - вдруг оно еще где-то фигурирует? Назвать метку L2. Но это гадание на кофейной гуще - я так и не понял, в каком месте проблема с внешне правильным циклом?
Маловероятно...а оказалось именно из за этого) Видимо какое то ключевое слово.А в 1-ом комметарии я напутал eax=ecx вместо eax=edx