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

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

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

Написал на ассемблере подпрограмму которая делает шейкерную сортировку. Для границ массива и i-того элемента создал переменные, которые описал в разделе данных. Преподаватель задал вопрос как можно убрать переменные из раздела данных? Какие есть варианты размещения переменных вне раздела.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2010, 11:55
Ответы с готовыми решениями:

Как избавиться от рандома
Всем привет. Попались тут в мои руки тесты с универа. Появилась нужда , как...

Как избавиться в браузерной строке от get переменных
Привет всем. Как мне избавиться от GET переменных в браузерной строке. Вот...

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

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

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

7
vital792
2003 / 1275 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
29.12.2010, 12:23 2
Mr. FourKing, лучше бы ты выложил код. Под "разделом" ты видимо понимаешь сегмент, переменные можно хранить в любом сегменте, но если хватает регистров, лучше обходиться ими, без переменных. Или можно использовать стек(это будут локальные переменные)
0
Mr. FourKing
1 / 1 / 1
Регистрация: 11.11.2010
Сообщений: 29
29.12.2010, 12:46  [ТС] 3
вот код:
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
vital792
2003 / 1275 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
29.12.2010, 13:25 4
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  [ТС] 5
А описание через директиву local можно использовать в данном случае?
0
vital792
2003 / 1275 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
29.12.2010, 13:40 6
Mr. FourKing, я описал способ для любого компилятора. Если у тебя масм32 то конечно удобнее через local
1
murderer
3327 / 1473 / 135
Регистрация: 06.10.2010
Сообщений: 3,234
29.12.2010, 14:15 7
А можно тупо по регистрам раскидать
0
Mr. FourKing
1 / 1 / 1
Регистрация: 11.11.2010
Сообщений: 29
30.12.2010, 18:09  [ТС] 8
Спасибо во всем разобрался
0
30.12.2010, 18:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2010, 18:09

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

Избавиться от статических переменных
помогите в реализации этого приложения,но так чтобы не было статических...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru