Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты данной рассылки Номер выпуска: | 1416 | Дата выхода: | 14.01.2011, 15:30 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 217 / 67 | Вопросов / ответов: | 1 / 2 | Вопрос № 181795: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Дано следующее условие задачи: Отсортировать по убыванию элементы массива, имеющие чётный индекс. TASM/DOS/16-bit /модель памяти small/размер переменных db (про остальные типы нам как б... Вопрос № 181795: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Дано следующее условие задачи: Отсортировать по убыванию элементы массива, имеющие чётный индекс. TASM/DOS/16-bit /модель памяти small/размер переменных db (про остальные типы нам как бы не рассказывали)/
Потуги были.. Такие что.. выкладывать стыдно. Брал чужие программы и.. потрошил. По мимо того что это .. не работает. Тов. Преподаватель ругается на то что я "лез в сегменты" offset и проч. Не я лез, так получилось. Последний срок сдачи завтра. Очень рассчитываю на Вашу помощь.
(И вот этот ужас ниже)
Код: .286p model small .stack 48 .data sseg segment stack 'stack' db 64 dup(0) sseg ends dseg segment array DB 2,1,7,3,4 n db 5 result db dup(0) s db dup(0) dseg ends cseg segment
.code mov ds, @data mov ss, ds mov cs, ss rpr proc far push ds sub ax,ax push ax mov ax,dseg mov ds,ax mov si,offset array
m1: lodsb test al,00000001b jz m2 add [result],al adc [result+1],0 cmp array, 5 jne m1 jmp print m2: mov al, result[si] cmp si, 5 jne m1 jmp print
print: mov dl, 30h mov cl, ',' sub si,si j1: mov al, result[si] add al,dl mov s[si],al inc si mov s[si],cl inc si cmp si,dx jl j1 mov ah, 09h mov dx, offset s int 21h ret rpr endp cseg ends end rpr
Отправлен: 09.01.2011, 12:34 Вопрос задал: Шнайдер П. А. (Посетитель) Всего ответов: 2 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Шнайдер П. А.! Не надо стыдиться того, что Вы что-то делаете, а у Вас не получается. Стыдно должно быть ничего не делать... "Да осилит дорогу идущий" Посмотрите программу, сравните со своей. Посмотрите также комментарий в мини-форуме Зенченко Константина Николаевича... Если что непонятно, спрашивайте в мини-форуме. С удовольствием ответим.
PS Для сортировки применен "метод пузырька".
Код: ;Отсортировать по убыванию элементы массива, имеющие чётный индекс.
.286p model small .stack 512 ;стек
n equ 5 ;зададим размер массива константой .data array DB 2,1,7,3,4 ;массив ;отсортируем байты с индексами 0,2,4 (т.е. 2,7,4)
.code rpr: ;точка входа mov ax, @data ;зададим сенменты данных mov ds, ax mov es, ax
;отсортируем массив методом пузырька xor si, si ;индекс элемента в массиве mov cx, n ;число сортируемых элементов dec cx ;число сравнений SortLoop: ;цикл по поиску очередного минимального test si, 1 ;нечетные пропускаем! jnz ExternalNext ;на увеличение индекса текущего элемента lea di, [si+1] ;начинаем со следующего push cx ;сохраним счетчик mov al, array[si] ;текущий максимальный по адресу [si] SearchMinLoop: ;цикл по всем последующим test di, 1 ;нечетные индексы внутреннего цикла также пропускаем jnz InternalNext ;на увеличение индекса последующего элемента ;сравниваем текущий со всеми последующими cmp al, array[di] ;если текущий максимальный >= пос ледующего, jge InternalNext ; то обходим обмен ;меняем местами элементы xchg al, array[di] ;al=array[di], array[di]=al=array[si] mov array[si], al ;array[si]=al=array[di] ;по адресу array[si] и в al новый максимальный InternalNext: inc di ;на следующий последующий loop SearchMinLoop ;по всем последющим элементам pop cx ;восстановим счетчик сравнений ExternalNext: inc si ;на следующий текущий loop SortLoop ;по всем текущим элементам
;массив отсортирован lea si, array ;адрес массива mov cx, n ;число элементов mov ah, 2 ;функция вывода символа PrintLoop: mov dl, [si] ;очередной байт or dl, '0' ;делаем символ inc si ;на следущий байт int 21h ;выводим loop PrintLoop ;по всем байтам
mov ax, 4c00h int 21h ;выход в ДОС
end rpr ; ----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 09.01.2011, 18:34 Номер ответа: 265303 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 265303 на номер 1151 (Россия) | Еще номера » | Отвечает Сергей (2-й класс) : Здравствуйте, Шнайдер П. А.!
Ох, давно это было... Приложение: Ответ отправил: Сергей (2-й класс) Ответ отправлен: 09.01.2011, 22:40 Номер ответа: 265310 Россия, Мурманск Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 265310 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий