IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> Сортировка массива.
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Мужской

Репутация: -  0  +


Заранее скажу, я ламак в асме, прошу не осуждать за столь тупую просьбу smile.gif
Был бы очень благодарен, если бы кто-нибудь помог дописать пузырьковую сортировку:
Uses crt;

Const
   mas : Array [0..9] of Byte = (2, 1, 24, 3, 53, 7, 18, 114, 11, 17);

Var
   i   : Integer;

Begin
   asm
      lea di,mas
      lea si,mas
      mov cx,9
      @loop2:
      mov al,[di]
      inc di
      mov ah,[di]
      inc di
      cmp al,ah
      jng @endif
      {Обмен}
      mov bl,al
      mov dl, [di-1]
      mov [di-2], dl
      mov [di-1], al
      {Конец обмена. Этот обмен надо проделать в цикле.}
      @endif:
      loop @loop2
   end;
end.

Моя программа пробегая по массиву меняет только пары элементов, если
mas[i] < mas [i + 1]. Т. е. меняет местами (если это требуется) только елементы 0 и 1, 2 и 3, 3 и 4... А должен после обмена пары mas[i] и mas[i + 1],
двигаться к началу массива пока элемент не встанет в нужное место, примерно так:
for j := i downto 1
begin
   if (mas[j] <= mas[j - 1]) then
       {обменять}
   else
        break;
end;
Я уже как только не пробовал дописать цикл назад с заменами, не выходит <_<
Помогоите дописать кому не в лом, плиз.
Заранее благодарен smile.gif


--------------------
На самом деле самого дела нет. В самой деятельности заключена самость дела и наоборот. Наоборот получим оборот на, таким образом перевернем образ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Заранее скажу, я ламак в асме

Это уж точно smile.gif

Короче, где-то так:
LEA BX,[mas]
MOV DI,BX
ADD BX,9;Сохраним адрес конца массива
@@0:
MOV SI,DI

@@1:
INC SI
MOV AL,[DI]
CMP [SI],AL
JGE @@2
XCHG AL,[SI]
MOV [DI],AL
@@2:
INC SI
CMP SI,BX
JB @@1
INC DI
CMP DI,BX
JB @@0


Если я чего-то не напутал - проверять влом :p2:
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Lonely_Raven
****

Группа: Пользователи
Сообщений: 640
Пол: Мужской

Репутация: -  1  +


вот сортирует только я не помню это вроде модернизированный
пузырь


Прикрепленные файлы
Прикрепленный файл  SR_MAS_M.zip ( 977 байт ) Кол-во скачиваний: 404


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Мужской

Репутация: -  0  +


Shadow, спасибо конечно, но у тебя как-то сложно, и пишем мы на встроенном ассемблере, да и проделать мне надо не шейкер-сотрировку, а простую пузырьковую.

BlackShadow, ассемблер я "изучал" две пары, по 15 минут на каждой. И как после этого можно шарить? smile.gif
За сортировку спасибо. Вот только поясни, если не в лом, что делает XCHG?


--------------------
На самом деле самого дела нет. В самой деятельности заключена самость дела и наоборот. Наоборот получим оборот на, таким образом перевернем образ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Lonely_Raven
****

Группа: Пользователи
Сообщений: 640
Пол: Мужской

Репутация: -  1  +


XCHG
обмен двух значений между регистрами или между регистром и памятью
--------
Виктор Юров Assembler Специальный справочник

Сообщение отредактировано: Shadow -


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Мужской

Репутация: -  0  +


Ага, благодарен smile.gif


--------------------
На самом деле самого дела нет. В самой деятельности заключена самость дела и наоборот. Наоборот получим оборот на, таким образом перевернем образ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Ещё катит в случае регистр-регистр, но никак иначе. Более быстрый и короткий код получается, если один и операндов - аккумулятор (AL, AX, EAX).

dushik, не принимай всё всеръёз smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Мужской

Репутация: -  0  +


Цитата(BlackShadow @ 22.09.04 17:12)
dushik, не принимай всё всеръёз smile.gif

Это ты про что? smile.gif


--------------------
На самом деле самого дела нет. В самой деятельности заключена самость дела и наоборот. Наоборот получим оборот на, таким образом перевернем образ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Lonely_Raven
****

Группа: Пользователи
Сообщений: 640
Пол: Мужской

Репутация: -  1  +


Цитата(BlackShadow @ 22.09.04 17:12)
Ещё катит в случае регистр-регистр, но никак иначе.

всмысле никак иначе в книге
Виктор Юров Assembler Специальный справочник
четко сказанно:
Цитата
между регистрами или между регистрами и памятью
на флаги команда не влияет


Сообщение отредактировано: Shadow -


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Lonely_Raven
****

Группа: Пользователи
Сообщений: 640
Пол: Мужской

Репутация: -  1  +


Цитата(dushik @ 22.09.04 6:54)
Shadow, спасибо конечно, но у тебя как-то сложно, и пишем мы на встроенном ассемблере, да и проделать мне надо не шейкер-сотрировку, а простую пузырьковую.


наколько я помнюу меня не меняется направление прохода а запоинается адрес где произошло не верное сравнение и продолжает перемещать
элемент до тех пор пока сравнение станет верныма потом возвращается на
запомненый адрес
-------
в прочем может найду первый вариант он тут был на форуме в этом разделе наверно кто-то удалил


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Мужской

Репутация: -  0  +


Цитата("Shadow")
не меняется направление прохода

значит не шейкер smile.gif

Сообщение отредактировано: dushik -


--------------------
На самом деле самого дела нет. В самой деятельности заключена самость дела и наоборот. Наоборот получим оборот на, таким образом перевернем образ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 12:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name