![]() |
|
|
![]()
|
|
| captan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 14.9.2008 Репутация: нет Всего: нет |
Здравствуйте!
Помогите доделать сортировку массива из 200 чисел типа WORD. Компилятор TASM выдает ошибку в 12,13,15,16 строках кода - Illegal indexing mode Как правильно?! cseg segment assume cs:cseg,ds:cseg,es:cseg,ss:cseg org 100h main: mov si,offset array mov cx,200 start: mov dx,0 sort: cmp dx,cx jge stop mov ax,[si+dx*2+2]; ?ошибка cmp [si+dx+2],ax ; ?ошибка jge noswap xchg [si+dx*2],ax ; ?ошибка mov [si+dx*2+2],ax; ?ошибка noswap: inc dx jmp start stop: loop start int 20h array: nmb=0 rept 200 dw nmb nmb=nmb+10 endm cseg ends end main Заранее спасибо! |
|||
|
||||
| airyashov |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 1.7.2008 Репутация: 2 Всего: 6 |
адресация по базе с индексированием и масштабированием появилась только с 386 и только для 32 битных регистров
-------------------- icq:3(один)7748666 mail:airyashov( а )inbox.ru |
|||
|
||||
| captan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 14.9.2008 Репутация: нет Всего: нет |
Спасибо airyashov за подсказку!
Запускал в отладчиках CodeView, TDebugger - во внешнем цикле LOOP, когда должен был уменьшиться счетчик CX, почему-то перехода не происходило, а выполнялась следующая команда INT 20h. А вот запустил в отладчике AFDPRO, там все нормально работает. Хотелось бы для красоты разрешить такой вопрос: Как можно вывести на экран сначала исходный массив, а после сортировки - отсортированный? |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
потому что по Step over(F8 в TD) при прохождении инструкции loop выполняются все итерации цикла. шагай по Step in(F7). и, кстати, если используешь 32-битные регистры, то и инициализировать надо 32 бита, а не только младшие 16: mov dx, 0 -> mov edx,0(или xor edx,edx), то же с esi. |
|||
|
||||
| captan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 14.9.2008 Репутация: нет Всего: нет |
Все, теперь проблем с пошаговым прохождением нет, спасибо dumb.
Но,после инициализации 32-битовых регистров, появилась другая ошибка. Транслятор ошибок не выдает,зато компоновщик ругается: ->tasm sort.asm <- все нормально ->tlink sort.obj /t <-Error: 32-bit record encountered in module SORT.ASM : use "/3" option
|
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
не нужно все регистры менять на 32-битные - логика меняется. достаточно обнулить старшую часть регистров, используемых при адресации:
|
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |