Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 7

Ошибка при компилляции в Delphi 2007 кода assembler

11.10.2010, 09:40. Показов 1881. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.

Есть программа на Delphi которая использует вставку на assembler:
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
function Full;assembler;
  Asm
        MOV     AX,Max
        DIV     WordBit
        PUSH    AX
        XOR     AH,AH
        CMP     AX,$0000
        JZ      @4
        MOV     CX,AX
        LEA     SI,FullSet
        LES     DI,[Long]
        CLD
        REPE    CMPSW
        JE      @4
        POP     AX
        JMP     @2
    @4:
        POP     AX
        MOV     CL,AH
        XOR     CH,CH
        INC     CX
        MUL     WordSize
        MOV     DI,AX
        LES     BX,[Long]
        MOV     DX,ES:[BX+DI]
        LEA     BX,Hex
    @5:
        MOV     AX,CX
        DEC     AX
        DIV     WordBit
        XCHG    AL,AH
        MUL     WordSize
        MOV     SI,AX
        TEST    DX,[BX+SI] <<< Ошибка здесь
        LOOPNZ  @5
        JZ      @2
    @1:
        MOV     AL,$01
        JMP     @3
    @2:
        MOV     AL,$00
    @3:
  End;
Ошибка звучит следующим образом: Operand size mismatch.

Полный исходный pas файл прилагается.

Большая просьба помочь. Спасибо.
Вложения
Тип файла: txt longset.txt (6.7 Кб, 22 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.10.2010, 09:40
Ответы с готовыми решениями:

Ошибка компилляции
Пожалуйста помогите!!!не могу найти ошибку при запуске пишет не найден ехе файл.

Непонятная ошибка при переводе в кода(безопасного извлечения флешек) с Delphi на С++
Предисловие: делаю попытку сделать безопасное извлечение флешки, перекопал инет,msdn в итоге вот что получилось... делаю на основе...

В чем ошибка компилляции?
Я программированием 1С не владею, поэтому использовал рекомендации из статьи &quot;Загрузка данных в 1С из Excel. Часть 2. Загрузка...

17
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
11.10.2010, 10:19
tuition
Это модуль для паскаля. В нём 16-битная адресация.
0
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 7
11.10.2010, 10:23  [ТС]
Цитата Сообщение от murderer Посмотреть сообщение
tuition
Это модуль для паскаля. В нём 16-битная адресация.
Привет. Хорошо. Как мне переделать, чтобы компиляция прошла удачно? Потому как сам я не программирую на assambler, но есть необходимость оставить данный код в теле программы.

Спасибо.
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
11.10.2010, 10:56
А что вообще делает-то функция? Смотрит, что массив заполнен одним каким-то числом (Max) и возвращает True если все числа в массиве заполнены этим числом иначе False? Что-то не пойму с утра никак )))
0
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
11.10.2010, 11:01
Похоже это модуль для работы с битовыми множествами длиной до 256*16 бит.
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
11.10.2010, 11:07
Цитата Сообщение от murderer Посмотреть сообщение
Похоже это модуль для работы с битовыми множествами длиной до 65536*8 бит.
Это в принципе понятно. Не понятно что конкретно делает эта функция ))
0
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 7
11.10.2010, 11:09  [ТС]
Цитата Сообщение от Tronix Посмотреть сообщение
Это в принципе понятно. Не понятно что конкретно делает эта функция ))
Проблема в том, что мне передали программу в которой надо немного изменить сам код Delphi. И я столкнулся с проблемой компиляции Assembler. Заказчик не может объяснить зачем они встраивали данный код...
0
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
11.10.2010, 11:23
Современная реализация будет выглядеть примерно так
Delphi
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
UNIT LongSet;
 
INTERFACE
 
Type
  TLongSet=array of byte;
 
  procedure Add(Number: integer;Long: TLongSet);
  procedure Del(Number: integer;Long: TLongSet);
  function  InThe(Number: integer;Long: TLongSet):boolean;
 
IMPLEMENTATION
 
  procedure Add;assembler;
  Asm
    bts [edx],eax
  End;
 
  procedure Del;assembler;
  Asm
    btr [edx],eax
  End;
 
  function InThe;assembler;
  Asm
    bt    [edx],eax
    setc  al
    movzx eax,al
  End;
 
END.
Добавлено через 10 минут
Вродебы Full проверяет равны ли все биты множества 0. А начиная с метки @4 обрабатывается "хвостик" меньше 16 бит.
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
11.10.2010, 11:25
Да. Если не охота возиться, можно просто "в лоб" сделать так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    @5:
        MOV     AX,CX
        DEC     AX
        DIV     WordBit
        XCHG    AL,AH
        MUL     WordSize
        MOV     SI,AX
        push ax            //сохраним ax, ибо не ведомо что там в нем.
        mov ax,[bx+si]  // теперь в ax значение из [bx+si]
        TEST    DX,ax   // теперь сравниваем dx уже не с памятью а с регистром ax
        pop ax             //восстановим ax как был.
        LOOPNZ  @5
        JZ      @2
    @1:
Однако это в любом случае быдлоподход конечно. Не факт что процедура вообще будет правильно работать на 32-битных компиляторах типа дельфи. Нужно понять суть и переписать все либо нативно на паскакале, либо на 32-битном асме.
0
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
11.10.2010, 11:36
Нужно понять суть и переписать все либо нативно на паскакале, либо на 32-битном асме.
+1 Тем более вряд ли придётся переписывать весь модуль. Наверное там реально используются 2 - 3 функции.
0
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 7
11.10.2010, 11:37  [ТС]
Спасибо за ответы. Попробую изменить и скомпилировать с учетом последнего совета. Завтра отпишусь о результатах.
0
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 7
17.10.2010, 14:59  [ТС]
Цитата Сообщение от Tronix Посмотреть сообщение
Да. Если не охота возиться, можно просто "в лоб" сделать так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    @5:
        MOV     AX,CX
        DEC     AX
        DIV     WordBit
        XCHG    AL,AH
        MUL     WordSize
        MOV     SI,AX
        push ax            //сохраним ax, ибо не ведомо что там в нем.
        mov ax,[bx+si]  // теперь в ax значение из [bx+si]
        TEST    DX,ax   // теперь сравниваем dx уже не с памятью а с регистром ax
        pop ax             //восстановим ax как был.
        LOOPNZ  @5
        JZ      @2
    @1:
Однако это в любом случае быдлоподход конечно. Не факт что процедура вообще будет правильно работать на 32-битных компиляторах типа дельфи. Нужно понять суть и переписать все либо нативно на паскакале, либо на 32-битном асме.
После изменения кода как приведено выше, компиляция проходит но при запуске программы выдается ошибка обращения к EAccessViolation Read of address: FFFFFFFF.

Суть понять не могу, а заказчик сути не помнит.

Есть ли у кого возможность и желание переписать данный код на 32 битную платформу? Буду благодарен. Спасибо.
0
 Аватар для Tronix
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
17.10.2010, 15:05
Что бы его переписать нужно понять суть Замкнутый круг получается )))
Да и к тому же Вам гораздо проще разобраться, имея на руках исходные тексты проекта, нежели нам гадать по отрывочным функциям модуля...
1
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
17.10.2010, 15:18
Попробую
1
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 7
17.10.2010, 15:38  [ТС]
Цитата Сообщение от murderer Посмотреть сообщение
Попробую
Нашел уточненный вариант данного файла. Там есть небольшие комментарии к коду.
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
UNIT LongSet;
 
INTERFACE
 
Const
  {Максимальное число элементов множества}
  MaxNumber=($FF-$01)*$10;
Type
  {Множество}
  PLongSet=^TLongSet;
  TLongSet=array[$00..$FF] of word;
 
  procedure Add(Number:word;var Long);
  {Добавляет число Number в множество Long.}
 
  procedure BitAnd(Max:word;const Long1,Long2;var Long);
  {Выполняет операцию побитового умножения над множествами Long1 и Long2.}
 
  procedure BitNot(Max:word;var Long);
  {Выполняет операцию побитового отрицания над множеством Long.}
 
  procedure BitOr(Max:word;const Long1,Long2;var Long);
  {Выполняет операцию побитового сложения над множествами Long1 и Long2.}
 
  procedure BitXOr(Max:word;const Long1,Long2;var Long);
  {Выполняет операцию побитового исключающего сложения над множествами
   Long1 и Long2.}
 
  procedure Clear(Max:word;var Long);
  {Удаляет все числа от 0 до Max из множества Long.}
 
  procedure Del(Number:word;var Long);
  {Удаляет число Number из множества Long.}
 
  function Empty(Max:word;const Long):boolean;
  {Проверяет, пусто ли множество Long в диапазоне от 0 до Max.}
 
  procedure Fill(Max:word;var Long);
  {Включает в множество Long все числа от 0 до Max.}
 
  function Full(Max:word;const Long):boolean;
  {Проверяет, полно ли множество Long в диапазоне от 0 до Max.}
 
  function InThe(Number:word;const Long):boolean;
  {Проверяет, входит ли число Number в множество Long.}
 
IMPLEMENTATION
 
Const
  WordSize:byte=SizeOf(word);
  WordBit:byte=$10;
Const
  Hex:array[$00..$0F] of word=($0001,
                               $0002,
                               $0004,
                               $0008,
                               $0010,
                               $0020,
                               $0040,
                               $0080,
                               $0100,
                               $0200,
                               $0400,
                               $0800,
                               $1000,
                               $2000,
                               $4000,
                               $8000);
Var
  EmptySet,FullSet:TLongSet;
 
  procedure Add;assembler;
  Asm
        MOV     AX,Number
        DIV     WordBit
        PUSH    AX
        XCHG    AL,AH
        MUL     WordSize
        MOV     SI,AX
        LEA     BX,Hex
        MOV     DX,[BX+SI]
        POP     AX
        MUL     WordSize
        MOV     DI,AX
        LES     BX,Long
        OR      ES:[BX+DI],DX
  End;
 
  procedure BitAnd;assembler;
  Asm
        MOV     AX,Max
        DIV     WordBit
        INC     AL
        XOR     CX,CX
        MOV     CL,AL
        INC     CX
    @1:
        MOV     AL,CL
        DEC     AL
        MUL     WordSize
        MOV     SI,AX
        LES     BX,Long1
        MOV     DX,ES:[BX+SI]
        LES     BX,Long2
        AND     DX,ES:[BX+SI]
        LES     BX,Long
        MOV     ES:[BX+SI],DX
        LOOP    @1
  End;
 
  procedure BitNot;assembler;
  Asm
        MOV     AX,Max
        DIV     WordBit
        INC     AL
        XOR     CX,CX
        MOV     CL,AL
        INC     CX
    @1:
        MOV     AL,CL
        DEC     AL
        MUL     WordSize
        MOV     SI,AX
        LES     BX,Long
        NOT     WORD PTR ES:[BX+SI]
        LOOP    @1
  End;
 
  procedure BitOr;assembler;
  Asm
        MOV     AX,Max
        DIV     WordBit
        INC     AL
        XOR     CX,CX
        MOV     CL,AL
        INC     CX
    @1:
        MOV     AL,CL
        DEC     AL
        MUL     WordSize
        MOV     SI,AX
        LES     BX,Long1
        MOV     DX,ES:[BX+SI]
        LES     BX,Long2
        OR      DX,ES:[BX+SI]
        LES     BX,Long
        MOV     ES:[BX+SI],DX
        LOOP    @1
  End;
 
  procedure BitXOr;assembler;
  Asm
        MOV     AX,Max
        DIV     WordBit
        INC     AL
        XOR     CX,CX
        MOV     CL,AL
        INC     CX
    @1:
        MOV     AL,CL
        DEC     AL
        MUL     WordSize
        MOV     SI,AX
        LES     BX,Long1
        MOV     DX,ES:[BX+SI]
        LES     BX,Long2
        XOR     DX,ES:[BX+SI]
        LES     BX,Long
        MOV     ES:[BX+SI],DX
        LOOP    @1
  End;
 
  procedure Clear;assembler;
  Asm
        MOV     AX,Max
        DIV     WordBit
        INC     AL
        XOR     CX,CX
        MOV     CL,AL
        INC     CX
        MOV     AX,$0000
        LES     DI,Long
        CLD
        REP     STOSW
  End;
 
 
  procedure Del;assembler;
  Asm
        MOV     AX,Number
        DIV     WordBit
        PUSH    AX
        XCHG    AL,AH
        MUL     WordSize
        MOV     SI,AX
        LEA     BX,Hex
        MOV     DX,[BX+SI]
        POP     AX
        MUL     WordSize
        MOV     DI,AX
        LES     BX,Long
        NOT     DX
        AND     ES:[BX+DI],DX
  End;
 
  function Empty;assembler;
  Asm
        MOV     AX,Max
        DIV     WordBit
        PUSH    AX
        XOR     AH,AH
        CMP     AX,$0000
        JZ      @4
        MOV     CX,AX
        LEA     SI,EmptySet
        LES     DI,Long
        CLD
        REPE    CMPSW
        JE      @4
        POP     AX
        JMP     @2
    @4:
        POP     AX
        MOV     CL,AH
        XOR     CH,CH
        INC     CX
        MUL     WordSize
        MOV     DI,AX
        LES     BX,Long
        MOV     DX,ES:[BX+DI]
        LEA     BX,Hex
    @5:
        MOV     AX,CX
        DEC     AX
        DIV     WordBit
        XCHG    AL,AH
        MUL     WordSize
        MOV     SI,AX
        TEST    DX,[BX+SI]
        LOOPZ   @5
        JNZ     @2
    @1:
        MOV     AL,$01
        JMP     @3
    @2:
        MOV     AL,$00
    @3:
  End;
 
  procedure Fill;assembler;
  Asm
        MOV     AX,Max
        DIV     WordBit
        INC     AL
        XOR     CX,CX
        MOV     CL,AL
        INC     CX
        MOV     AX,$FFFF
        LES     DI,Long
        CLD
        REP     STOSW
  End;
 
  function Full;assembler;
  Asm
        MOV     AX,Max
        DIV     WordBit
        PUSH    AX
        XOR     AH,AH
        CMP     AX,$0000
        JZ      @4
        MOV     CX,AX
        LEA     SI,FullSet
        LES     DI,Long
        CLD
        REPE    CMPSW
        JE      @4
        POP     AX
        JMP     @2
    @4:
        POP     AX
        MOV     CL,AH
        XOR     CH,CH
        INC     CX
        MUL     WordSize
        MOV     DI,AX
        LES     BX,Long
        MOV     DX,ES:[BX+DI]
        LEA     BX,Hex
    @5:
        MOV     AX,CX
        DEC     AX
        DIV     WordBit
        XCHG    AL,AH
        MUL     WordSize
        MOV     SI,AX
        TEST    DX,[BX+SI]
        LOOPNZ  @5
        JZ      @2
    @1:
        MOV     AL,$01
        JMP     @3
    @2:
        MOV     AL,$00
    @3:
  End;
 
  function InThe;assembler;
  Asm
        MOV     AX,Number
        DIV     WordBit
        PUSH    AX
        XCHG    AL,AH
        MUL     WordSize
        MOV     SI,AX
        LEA     BX,Hex
        MOV     DX,[BX+SI]
        POP     AX
        MUL     WordSize
        MOV     DI,AX
        LES     BX,Long
        TEST    DX,ES:[BX+DI]
        JZ      @1
        MOV     AL,$01
        JMP     @2
    @1:
        MOV     AL,$00
    @2:
  End;
 
BEGIN
  Clear(MaxNumber,EmptySet);
  Fill(MaxNumber,FullSet);
END.
0
 Аватар для Goodwin98
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
17.10.2010, 16:03
Как-нибудь еще так может быть...
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    mov esi,Long
    mov ecx,max
@1:
    mov ax,[esi]
    mov edx,16
@2:    
    shl ax,1
    jnc @no
    dec edx
    loopnz @2
    test ecx,ecx
    jz @yes
    add esi,2
    jmp @1
    
@yes:
    mov eax,1
    ret    
@no:
    xor eax,eax
    ret
Остальные процедуры тоже нужно бы переписывать...
1
0 / 0 / 0
Регистрация: 11.10.2010
Сообщений: 7
17.10.2010, 16:14  [ТС]
Цитата Сообщение от Goodwin98 Посмотреть сообщение
Как-нибудь еще так может быть...
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    mov esi,Long
    mov ecx,max
@1:
    mov ax,[esi]
    mov edx,16
@2:    
    shl ax,1
    jnc @no
    dec edx
    loopnz @2
    test ecx,ecx
    jz @yes
    add esi,2
    jmp @1
    
@yes:
    mov eax,1
    ret    
@no:
    xor eax,eax
    ret
Остальные процедуры тоже нужно бы переписывать...
Самое плохое, что я ассемблер вообще не понимаю, только частями. Понимаю, что я прошу много.
Но только на этом форуме мне пока дают ценные ответы. Спасибо, что не оставляете в беде .
0
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
17.10.2010, 16:15
Вот что получилось. Возможно будут проблемы из-за обращения к переменной i после цикла for (надёжнее будет использовать while).
Delphi
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
UNIT LongSet;
 
INTERFACE
 
Const
  MaxNumber=($FF-$01)*$10;
Type
  PLongSet=^TLongSet;
  TLongSet=array[$00..$FF] of word;
 
  procedure Add(Number: integer;var Long: TLongSet);
  procedure Del(Number: integer;var Long: TLongSet);
  function  InThe(Number: integer;var Long: TLongSet):boolean;
 
  procedure BitAnd(Max: cardinal;var Long1,Long2,Long: TLongSet);
  procedure BitNot(Max: cardinal;var Long: TLongSet);
  procedure BitOr(Max: cardinal;var Long1,Long2,Long: TLongSet);
 
  procedure Clear(Max: cardinal;var Long: TLongSet);
  function  Empty(Max: cardinal;var Long: TLongSet):boolean;
  procedure Fill(Max: cardinal;var Long: TLongSet);
  function  Full(Max: cardinal;var Long: TLongSet):boolean;
 
IMPLEMENTATION
 
  procedure Add;assembler;
  Asm
    bts [edx],eax
  End;
 
  procedure Del;assembler;
  Asm
    btr [edx],eax
  End;
 
  function InThe;assembler;
  Asm
    bt    [edx],eax
    setc  al
    movzx eax,al
  End;
 
  procedure BitAnd;
  var
    i,j: cardinal;
  begin
    j:=Max shr 4;
    for i:=0 to j do
        Long[i]:=Long1[i] and Long2[i];
    if i<$100 then
    begin
        j:=(1 shl (Max and 15))-1;
        Long[i]:=(Long1[i] and Long2[i]) and j;
    end;
  end;
 
  procedure BitNot;
  var
    i,j: cardinal;
  begin
    j:=Max shr 4;
    for i:=0 to j do
        Long[i]:=not Long[i];
    if i<$100 then
    begin
        j:=(1 shl (Max and 15))-1;
        Long[i]:=(not Long[i]) and j;
    end;
  end;
 
  procedure BitOr;
  var
    i,j: cardinal;
  begin
    j:=Max shr 4;
    for i:=0 to j do
        Long[i]:=Long1[i] or Long2[i];
    if i<$100 then
    begin
        j:=(1 shl (Max and 15))-1;
        Long[i]:=(Long1[i] or Long2[i]) and j;
    end;
  end;
 
  procedure Clear;assembler;
  var
    i,j: cardinal;
  begin
      FillChar(Long,Max shr 3,0);
      if Max<$FF*16 then
      begin
        i:=Max shr 4;
        j:=not((1 shl (Max and 15))-1);
        Long[i]:=Long[i] and j;
      end;
  End;
 
  procedure Fill;
  var
    i,j: cardinal;
  begin
      FillChar(Long,Max shr 3,255);
      if Max<$FF*16 then
      begin
        i:=Max shr 4;
        j:=not((1 shl (Max and 15))-1);
        Long[i]:=Long[i] or j;
      end;
  End;
 
  function Empty;
  var
    i,j: cardinal;
  begin
      result:=false;
      j:=Max shr 4;
      for i:=0 to j do
          if Long[i]<>0 then
              exit;
      if i<$100 then
      begin
          j:=(1 shl (Max and 15))-1;
          if Long[i] and j<>0 then
              exit;
      end;
      result:=true;
  end;
 
  function Full;
  var
    i,j: cardinal;
  begin
      result:=false;
      j:=Max shr 4;
      for i:=0 to j do
          if Long[i]<>$FFFF then
              exit;
      if i<$100 then
      begin
          j:=(1 shl (Max and 15))-1;
          if Long[i] and j<>j then
              exit;
      end;
      result:=true;
  end;
 
END.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.10.2010, 16:15
Помогаю со студенческими работами здесь

Eclipse, С++, OpenCV и ошибка компилляции
Добрый день. На raspbian-jessie установил Eclipse с поддержкой С++, Opencv по этой ссылке. Затем по этой инструкции добавил пути к...

Dev-C++, при компилляции ругается фаервол Comodo
Версия фаервола последняя. Изначально ругался на все процессы (вылезало окно с предложением разрешить, заблокировать или изолировать...

Содержимое регистров при переходе от Delphi к Assembler
Здравствуйте. Скажите пожалуйста, при систематическом входе и выходе из Assembler, содержание регистров теряется? Происходит сбой. unit...

Виснет Delphi 2007 при старте. Не знаю, что делать
После неудачного аварийного отключения компьютера Delphi стал после (довольно долгой) загрузки выдавать сообщение Access violation (по...

ошибка при установке MS 2007
Всем приет. Подскажи пж из-за чего может быть ошибка при установке MS 2007.


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью 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 и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru