На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Динамика на асме
    Народ подскажите ссылку, где описано как с деревьями и списками работать. Желательно с примерами. :)
      ну это конечна не ссылка но всеже
      видел сегодня на рынке книженцию по АСМу написана Юровым называется Практикум на аасемблере, там есть то что ты хошь!!
      у нас она стоит 125 р.
        Не-а это не пойдет. А на этом сайте этого нет :( А еще исходниками называется :(
          Ты хочешь, чтобы тебе на одном сайте было всё, что ты хочешь?!
          Такого не бывает....
            тебе панимаш умные люди говорят - купи Юрова. Рулезная книжка.
            Вот тебе из нее примерчик
            ExpandedWrap disabled
              <br>;--------------------------------------------------------------------------------;<br>;prg02_12.asm - программа построения и инициализации двоичного дерева.<br>;Вход: произвольный масиив чисел в памяти.<br>;Выход: двоичное дерево в памяти.<br>;--------------------------------------------------------------------------------;<br>.486<br>.model flat,STDCALL      ;модель памяти flat,<br>;STDCALL - передача параметров в стиле С (справа налево), <br>;      вызываемая процедура чистит за собой стек<br>;Объявление внешними используемых в данной программе функций Win32 (ASCII):<br>extrn      AllocConsole:PROC<br>extrn      ExitProcess:PROC<br>extrn      GetProcessHeap:PROC<br>extrn      HeapAlloc:PROC<br>extrn      HeapFree:PROC<br>;объявления структур:<br>node_tree      struc      ;узел дерева<br>simbol      db      0      ;содержательная часть<br>l_son      dd      0      ;указатель на старшего (левого) сына<br>r_son      dd      0      ;указатель на младшего (правого) сына<br>ends<br>.data<br>mas      db      37h,12h,8h,65h,4h,54h,11h,02h,32h,5h,4h,87h,7h,21h,65h,45h,22h,11h,77h,51h,26h,73h,35h,12h,49h,37h,52h<br>l_mas=$-mas<br>Hand_Head      dd      0      ;описатель кучи<br>HeadTree      dd      0      ;указатель корень дерева<br>NewNode      dd      0      ;временная переменная<br>.code<br>BuildBinTree      proc<br>;формируем корень дерева и указатель на дерево HeadTree<br>;для размещения дерева используем кучу, выделяемую процессу по умолчанию (1 Мбайт), но при необходимости можно создать и доп. кучу с помощью HeapCreate<br>;HANDLE GetProcessHeap (VOID);<br>      call      GetProcessHeap<br>      mov      Hand_Head,eax      ;сохраняеи дескриптор<br>;запрашиваем и инициализируем блок памяти из кучи для корня дерева:<br>      xor      ebx,ebx      ;здесь будет указатель на предыдущий узел<br>;LPVOID HeapAlloc(HANDLE hHeap, DWORD dwFlags, DWORD dwBytes);<br>      push      type node_tree      ;размер структуры для узла дерева<br>      push      0      ;флаги не задаем<br>      push      eax      ;описатель кучи (он же в Hand_Head)<br>      call      HeapAlloc<br>      mov      HeadTree,eax      ;запоминаем указатель на корень дерева<br>      mov      ebx,eax      ;и в ebx<br>;подчистим выделенную область памяти в куче<br>      push      ds<br>      pop      es<br>      mov      edi,eax<br>      mov      ecx,type node_tree<br>      mov      al,0<br>rep      stosb<br>;первое число из mas в корень дерева<br>      lea      esi,mas<br>      lodsb      ;число в al<br>      mov      [ebx].simbol,al<br>;далее в цикле работаем с деревом и массивом mas<br>      mov      ecx,l_mas-1<br>@@cycl1:<br>      push      ecx      ;HeapAlloc портит ecx, возвращая в нем некоторое значение<br>;запрашиваем блок памяти из кучи для узла дерева:<br>;LPVOID HeapAlloc(HANDLE hHeap, DWORD dwFlags, DWORD dwBytes);<br>      push      type node_tree      ;размер структуры для узла дерева<br>      push      0      ;флаги не задаем<br>      push      Hand_Head      ;описатель кучи<br>      call      HeapAlloc<br>      pop      ecx<br>      mov      ebx,eax      ;запоминаем указатель на узел дерева в ebx<br>      mov      NewNode,eax      ;и во врем. перем.<br>;подчистим выделенную область памяти в куче<br>      mov      edi,eax<br>      push      ecx<br>      mov      ecx,type node_tree<br>      mov      al,0<br>rep      stosb<br>      pop      ecx<br>;читаем очередное число из mas и записываем его в новый узел<br>      lodsb      ;число в al<br>      mov      [ebx].simbol,al<br>;ищем место в дереве согласно условиям упорядочивания и настраиваем указатели в узлах дерева<br>      mov      ebx,HeadTree<br>m_search:<br>      cmp      al,[ebx].simbol<br>      mov      edi,ebx      ;продублируем<br>      jae      m1      ;если al >= [ebx].simbol <br>;если меньше, то идем по левой ветке<br>      mov      ebx,[ebx].l_son<br>      cmp      ebx,0<br>      jne      m_search<br>;если этого сына нет, то добавляем его к папе<br>      mov      ebx,NewNode<br>      mov      [edi].l_son,ebx<br>      jmp      end_cycl1<br>;если больше или равно, то по правой<br>m1:<br>      mov      ebx,[ebx].r_son<br>      cmp      ebx,0<br>      jne      m_search<br>;если этого сына нет, то добавляем его к папе<br>      mov      ebx,NewNode<br>      mov      [edi].r_son,ebx<br>end_cycl1:<br>      loop      @@cycl1<br>;двоичное дерево поиска построено<br>      ret<br>BuildBinTree      endp<br><br>start      proc      near<br>;точка входа в программу:<br>      call      BuildBinTree<br>exit:<br>;готовим вызов VOID ExitProcess(UINT uExitCode)<br>      push      0<br>      call      ExitProcess<br>start      endp<br>end      start<br>
            Сообщение отредактировано: murph -
              Кхе а мне на .186 нужно, дерево список и.т.д.
                Так переделай! Я сейчас проглядел быстренько, вроде достаточно только "e" отбросить и всё (т.е. eax -> ax и т.д), да заголовок поменять.....
                  Да я уже написал. Спасибо
                  1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0244 ]   [ 14 queries used ]   [ Generated: 17.05.24, 06:05 GMT ]