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

Объяснение кода листинга программы

В данном коде выполняется следующая последовательность действий:

  1. Инициализация переменных.
  2. Отображение приглашения для ввода.
  3. Чтение первого числа с помощью функции scanf и сохранение его в регистре eax.
  4. Запись этого числа в память по адресу, хранящемуся в регистре ebx.
  5. Увеличение значения регистра ebx.
  6. Проверка: если значение регистра ebx меньше значения a плюс (значение c умноженное на 4), то переход к шагу 3.
  7. Деление нацело значения c на 4, сохранение результата в регистре esi.
  8. Уменьшение значения c на 1.
  9. Повторение шагов 3–7, пока значение c не станет равным нулю.
  10. Вывод на экран результата.
  11. Вызов функции exit.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5