![]() |
|
![]() ![]() ![]() |
|
TrЭin3e |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 28.3.2009 Где: Ставрополь Репутация: нет Всего: 1 |
программа должна провести пирамидальную сортировку массива.
компилятор NASM выдает ошибку при обращении к элементам массива след. образом: mas[i]. Подскажите, как избавиться от этой ошибки.
Заранее спасибо. Это сообщение отредактировал(а) TrЭin3e - 3.5.2009, 15:25 |
|||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
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] ![]() |
|||
|
||||
TrЭin3e |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 28.3.2009 Где: Ставрополь Репутация: нет Всего: 1 |
Mikl_, спасибо огромное!
![]() кстати, вы абсолютно правы - я переделывал код TASM'а, т.к. по NASM'у не нашел примеров(и литературы вообще, если знаете - посоветуйте) в которых бы разбиралась работа с массивами. также спасибо за то, что указали на другие ошибки, хотя их я скорее всего сам бы нашел после запуска программы. теперь пойду тестить алгоритм.
здесь я с вами не согласен. разве будет ошибочным следующий код: mov cx, [n]-1 ? Это сообщение отредактировал(а) TrЭin3e - 4.5.2009, 19:45 |
|||
|
||||
Mikl_ |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
Будет error: invalid combination of opcode and operands Подумай сам, компилятор NASM не знает о содержимом переменной n поэтому подставить в код число соответствующее содержимому n и отнять единицу он не может. Другое дело -- адрес переменной n, но взять адрес слова и отнять от него единицу компилятор может, только получится адрес чего? Еще один вариант -- n объявлен как константа диррективой %define n 100 тогда компилятор заменит код mov cx,n-1 на код mov cx,99 но в этом случае не нужны квдратные скобки, правда и значение n нельзя изменить
Правда? ![]() ![]() Это сообщение отредактировал(а) Mikl_ - 5.5.2009, 09:46 |
||||
|
|||||
TrЭin3e |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 28.3.2009 Где: Ставрополь Репутация: нет Всего: 1 |
||||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
TrЭin3e,
строка 6 BITS 32 а по тексту ниодного обращения к 32-битным регистрам замени на BIT 16 и приведи текст bat- файла, которым собираешь свой exe-шник может быть в нем не те ключи указаны ![]() |
|||
|
||||
TrЭin3e |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 28.3.2009 Где: Ставрополь Репутация: нет Всего: 1 |
компилирую 2мя строчками:
1) nasm -f win32 XXX.asm после выдает ошибки 2) gcc XXX.obj |
|||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
TrЭin3e,
программа, которую ты пишешь должна работать c DOS функциями или с WinAPI? До этого ты создавал рабочие программы в NASM? |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
Mikl_, вчитайся в текст ошибки - ты понял ее с точностью до наоборот.
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm для начинающих" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для начинающих | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |