Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
 Аватар для Mr. FourKing
1 / 1 / 1
Регистрация: 11.11.2010
Сообщений: 29

как избавиться от переменных в разделе данных

29.12.2010, 11:55. Показов 1174. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал на ассемблере подпрограмму которая делает шейкерную сортировку. Для границ массива и i-того элемента создал переменные, которые описал в разделе данных. Преподаватель задал вопрос как можно убрать переменные из раздела данных? Какие есть варианты размещения переменных вне раздела.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.12.2010, 11:55
Ответы с готовыми решениями:

Как избавиться в браузерной строке от get переменных
Привет всем. Как мне избавиться от GET переменных в браузерной строке. Вот пример адреса http://stail.ru/order/task?order_id=25, как его...

Как избавиться от глобальных переменных в многофайловом проекте на С++?
Некоторые глобальные переменные можно заменить на глобальные константы. Долго промучилась с проектом, но на попытках избавления от...

Графический интерфейс НЕ GUI! как избавиться от глобальных переменных?
Создаю простенький графический интерфейс function = interface( input_args ) global hAxes hFigl hEdl_vertice_X hEdl_vertice_Y...

7
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
29.12.2010, 12:23
Mr. FourKing, лучше бы ты выложил код. Под "разделом" ты видимо понимаешь сегмент, переменные можно хранить в любом сегменте, но если хватает регистров, лучше обходиться ими, без переменных. Или можно использовать стек(это будут локальные переменные)
0
 Аватар для Mr. FourKing
1 / 1 / 1
Регистрация: 11.11.2010
Сообщений: 29
29.12.2010, 12:46  [ТС]
вот код:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
.386
                title   sort
     .model flat 
         
     .data
     n      db  5
     first  dd  0
     last   dd  5
     i      dd  0
     tmp    dd  0
 
             page    52,72
             public _cocktail_sort
 
    .code 
        
    _cocktail_sort proc 
    
          push ebp
          mov ebp,esp
          push ebx
          push esi
          push edi
          
          mov esi,dword ptr[ebp+8]
 
      ;for( --last; first < last; --last, ++first )
          mov         eax,dword ptr[last] 
          sub         eax,1 
          mov         dword ptr [last],eax 
          jmp         L 
LA:       mov         eax,dword ptr [last] 
          sub         eax,1 
          mov         dword ptr [last],eax 
          mov         ecx,dword ptr [first] 
          add         ecx,1 
          mov         dword ptr [first],ecx 
L:        mov         eax,dword ptr first 
          cmp         eax,dword ptr [last] 
          jge         L1 
      ;{
        ;  for(i = first; i < last; ++i )
          mov         eax,dword ptr [first] 
          mov         dword ptr [i],eax 
          jmp         L2 
L5:       mov         eax,dword ptr [i] 
          add         eax,1 
          mov         dword ptr [i],eax 
L2:       mov         eax,dword ptr [i] 
          cmp         eax,dword ptr [last] 
          jge         L3 
         ;     if ( arr[i + 1] < arr[i] )
          mov         eax,dword ptr [i] 
          mov         ecx,dword ptr [esi] 
          mov         edx,dword ptr [i] 
          mov         eax,dword ptr [esi+eax*4+4] 
          cmp         eax,dword ptr [esi+edx*4] 
          jge         L4 
            ;  {
            ;     tmp=arr[i+1];
          mov         eax,dword ptr [i] 
          mov         ecx,dword ptr [esi] 
          mov         edx,dword ptr [esi+eax*4+4] 
          mov         dword ptr [tmp],edx 
            ;     arr[i+1]=arr[i];
          mov         eax,dword ptr [i] 
          mov         ecx,dword ptr [esi] 
          mov         edx,dword ptr [i] 
          mov         edx,dword ptr [esi+edx*4] 
          mov         dword ptr [esi+eax*4+4],edx 
            ;     arr[i]=tmp;
          mov         eax,dword ptr [i] 
          mov         ecx,dword ptr [esi] 
          mov         edx,dword ptr [tmp] 
          mov         dword ptr [esi+eax*4],edx 
            ;  }
L4:       jmp         L5 
 
        ;  for(i = last - 1; i > first; --i )
L3:       mov         eax,dword ptr [last] 
          sub         eax,1 
          mov         dword ptr [i],eax 
          jmp         L6 
L9:       mov         eax,dword ptr [i] 
          sub         eax,1 
          mov         dword ptr [i],eax 
L6:       mov         eax,dword ptr [i] 
          cmp         eax,dword ptr [first] 
          jle         L7 
           ;   if ( arr[i] < arr[i - 1])
          mov         eax,dword ptr [i] 
          mov         ecx,dword ptr [esi] 
          mov         edx,dword ptr [i] 
          mov         eax,dword ptr [esi+eax*4] 
          cmp         eax,dword ptr [esi+edx*4-4] 
          jge         L8 
             ; {
            ;     tmp=arr[i-1];
          mov         eax,dword ptr [i] 
          mov         ecx,dword ptr [esi] 
          mov         edx,dword ptr [esi+eax*4-4] 
          mov         dword ptr [tmp],edx 
            ;     arr[i-1]=arr[i];
          mov         eax,dword ptr [i] 
          mov         ecx,dword ptr [esi] 
          mov         edx,dword ptr [i] 
          mov         edx,dword ptr [esi+edx*4] 
          mov         dword ptr [esi+eax*4-4],edx 
            ;     arr[i]=tmp;
          mov         eax,dword ptr [i] 
          mov         ecx,dword ptr [esi] 
          mov         edx,dword ptr [tmp] 
          mov         dword ptr [esi+eax*4],edx 
             ; }
L8:       jmp         L9 
     ; }
L7:       jmp         LA 
 
 ;return 0;
L1:       xor         eax,eax 
;}
          pop         edi  
          pop         esi  
          pop         ebx  
          mov         esp,ebp 
          pop         ebp  
          ret       
    
_cocktail_sort   endp
end
можно более подробно узнать как описывать локальные переменные?
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
29.12.2010, 13:25
Mr. FourKing, в прологе функции под локальные переменные выделяется кадр стека. Например можно так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
_cocktail_sort proc 
    
                  push ebp
                  mov ebp,esp
                  sub esp, 8   ; 8 байт под локальные переменные
...
;mov [ebp-4], 10 - одна
;mov [ebp-8], 20 - вторая
...
                  mov         esp,ebp 
                  pop         ebp
Это один из способов.
можно дать переменным осмысленные имена используя директиву equ.
Можно также использовать
Assembler
1
2
3
4
 enter 4,0
...
leave
ret
1
 Аватар для Mr. FourKing
1 / 1 / 1
Регистрация: 11.11.2010
Сообщений: 29
29.12.2010, 13:35  [ТС]
А описание через директиву local можно использовать в данном случае?
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
29.12.2010, 13:40
Mr. FourKing, я описал способ для любого компилятора. Если у тебя масм32 то конечно удобнее через local
1
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
29.12.2010, 14:15
А можно тупо по регистрам раскидать
0
 Аватар для Mr. FourKing
1 / 1 / 1
Регистрация: 11.11.2010
Сообщений: 29
30.12.2010, 18:09  [ТС]
Спасибо во всем разобрался
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.12.2010, 18:09
Помогаю со студенческими работами здесь

Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных?
Как избавиться от замусоривания cpp файлов дубликатами деклараций функций и переменных? У меня есть например несколько файлов: ...

Функции класса в разделе private реализуются так же как и в разделе public?
функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д.

Избавиться от переменных bool
Код, чтобы если вводили буквы вместо символов заного запрашивался ввод, как сделать чтобы если 1 число введено верно, но на втором ввели не...

Избавиться от статических переменных
помогите в реализации этого приложения,но так чтобы не было статических переменных static int xPos =0; static int yPos=0; #include...

Как избавиться от разделителей данных?
Получаю содержимое стрници, как известно, донные отправвляются частями и перед каждой частью указывается её размер типа такого, как бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru