| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для начинающих > Обращение к элементам массива(NASM) |
| Автор: TrЭin3e 3.5.2009, 15:01 | ||
| программа должна провести пирамидальную сортировку массива. компилятор NASM выдает ошибку при обращении к элементам массива след. образом: mas[i]. Подскажите, как избавиться от этой ошибки.
Заранее спасибо. |
| Автор: Mikl_ 4.5.2009, 11:43 |
| TrЭin3e, похоже, что ты скопировал на NASM задачу, которую писали на TASM или на MASM (другие диалекты ассемблера) основная типичная ошибка строка 32 mov l, ax ; l := k+1 для NASM название переменной без скобок как у тебя l -- это адрес переменной, а если учесть что у тебя на строке 6 указано BITS 32 то адрес переменной это двойное слово, а не l dw 0 по смыслу должно быть mov [l],ax передать содержимое регистра AX в переменную по имени l то есть необходимы квадратные скобки с именем переменной. Вторая типичная ошибка (на которую ты кстати и жалуешься) строка 75 mov al, mas[di-1] для TASM и MASM такая конструкция подходит, а для NASM должно быть только так mov al, [mas+di-1] еще одна ошибка -- строка 105 mov cx, n-1 в ассемблере должно быть сделано в два этапа: сперва mov cx, [n] а затем dec cx строка 114 dec m даже когда поставишь квадратные скобки NASM выдаст ошибку operation size not specified должно быть dec word [m] |
| Автор: Mikl_ 5.5.2009, 04:09 | ||||
Будет error: invalid combination of opcode and operands Подумай сам, компилятор NASM не знает о содержимом переменной n поэтому подставить в код число соответствующее содержимому n и отнять единицу он не может. Другое дело -- адрес переменной n, но взять адрес слова и отнять от него единицу компилятор может, только получится адрес чего? Еще один вариант -- n объявлен как константа диррективой %define n 100 тогда компилятор заменит код mov cx,n-1 на код mov cx,99 но в этом случае не нужны квдратные скобки, правда и значение n нельзя изменить
Правда? |
| Автор: TrЭin3e 6.5.2009, 14:32 |
попробовал так сделать, но компилятор выдает следующую ошибку: "COFF format does not support non-32-bit relocations" подскажите, что не так на этот раз? |
| Автор: Mikl_ 7.5.2009, 04:49 |
| TrЭin3e, строка 6 BITS 32 а по тексту ниодного обращения к 32-битным регистрам замени на BIT 16 и приведи текст bat- файла, которым собираешь свой exe-шник может быть в нем не те ключи указаны |
| Автор: TrЭin3e 7.5.2009, 06:34 |
| компилирую 2мя строчками: 1) nasm -f win32 XXX.asm после выдает ошибки 2) gcc XXX.obj |
| Автор: Mikl_ 7.5.2009, 09:25 |
| TrЭin3e, программа, которую ты пишешь должна работать c DOS функциями или с WinAPI? До этого ты создавал рабочие программы в NASM? |
| Автор: dumb 7.5.2009, 09:48 |
| Mikl_, вчитайся в текст ошибки - ты понял ее с точностью до наоборот. |