Error: parser: instruction expected - Assembler
Формулировка задачи:
Здравствуйте! Пишу программу, сортирующую массив. На вход подается число элементов (0<N<10000), затем N чисел через пробел - элементы массива. Вывести нужно сортированный массив.
При компиляции выдает ошибку error: parser: instruction expected (строка 6). Я перепроверила, вроде бы все верно написано. Подскажите, пожалуйста, в чем ошибка.
[bits 32] global main extern exit extern scanf extern printf seсtion .text _fmt1: dd "%d", 0 _fmt2: dd " %d", 0 main: mov ebx, a push c push _fmt1 call scanf add esp, 8 mov ecx, c mov edx, 1 L1: push v push _fmt2 call scanf add esp, 8 mov eax, [v] mov [ebx], eax inc ebx inc edx cmp edx, ecx jne L1 mov esi, a dec ecx L2: xor ebx, ebx L3: mov eax, [esi+ecx*4-4] cmp [esi+ecx*4], eax jnb L4 setna bl xchg eax, [esi+ecx*4] mov [esi+ecx*4-4], eax L4: loop L3 add esi, 4 dec ebx jnz L5 dec ecx jnz L2 mov ebx, a L5: mov eax, [ebx] push eax push _fmt2 call printf add esp, 8 inc ebx dec edx cmp edx, 1 jne L5 push 0 call exit section .data a: times 9999 dd 0 c: dd 0 v: dd 0
Решение задачи: «Error: parser: instruction expected»
textual
Листинг программы
[bits 32] global main extern exit extern scanf extern printf section .text _fmt1: dd "%d", 0 _fmt2: dd " %d", 0 main: mov ebx, a push c push _fmt1 call scanf add esp, 8 L1: push v push _fmt2 call scanf add esp, 8 mov eax, [v] mov [ebx], eax inc ebx cmp ebx, a+[c]*4 jne L1 mov esi, a dec [c] mov ecx, c L2: xor ebx, ebx L3: mov eax, [esi+ecx*4-4] cmp [esi+ecx*4], eax jnb L4 setna bl xchg eax, [esi+ecx*4] mov [esi+ecx*4-4], eax L4: loop L3 add esi, 4 dec ebx jnz L5 dec ecx jnz L2 mov ebx, a L5: mov eax, [ebx] push eax push _fmt2 call printf add esp, 8 inc ebx cmp ebx, a+[c]*4 jne L5 push 0 call exit section .data a: times 9999 dd 0 c: dd 0 v: dd 0
Объяснение кода листинга программы
В данном коде выполняется следующая последовательность действий:
- Инициализация переменных.
- Отображение приглашения для ввода.
- Чтение первого числа с помощью функции scanf и сохранение его в регистре eax.
- Запись этого числа в память по адресу, хранящемуся в регистре ebx.
- Увеличение значения регистра ebx.
- Проверка: если значение регистра ebx меньше значения a плюс (значение c умноженное на 4), то переход к шагу 3.
- Деление нацело значения c на 4, сохранение результата в регистре esi.
- Уменьшение значения c на 1.
- Повторение шагов 3–7, пока значение c не станет равным нулю.
- Вывод на экран результата.
- Вызов функции exit.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д