Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
student_5
0 / 0 / 0
Регистрация: 26.05.2010
Сообщений: 16
1

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

16.12.2010, 09:53. Просмотров 880. Ответов 2
Метки нет (Все метки)

добрый день!
Помогите пожалуйста написать программу:

"Разработать программу исключения промахов из выборки измерительных данных."

Спасибо...

 Комментарий модератора 
Задача сформулирована очень абстрактно. Нужно больше определённости. В первую очередь надо выяснить что из себя представляют типы данных в этой задаче. Как представлены входные и выходные данные? Например, входными данными могут быть: массив, содержащий, например, вещественные числа - это набор значений, полученных при измерениях. И пара вещественных значений, которая задаёт границы. По границам можно судить о попадании/промахе измерительных данных.
Выходные данные - это может быть тот же самый массив, который поступил на вход задачи, в котором удалены те элементы, которые не попали в заданные границы.
Student_5, уточни эти вопросы.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2010, 09:53
Ответы с готовыми решениями:

FB2.5 как написать ХП выборки разных данных?
Здравствуйте! Не ругайтесь если вопрос тупой. :) Как в одной ХП правильно...

Найти вероятность данного количества промахов
Стрелок стреляет по мишени до r-го попадания. Вероятность попадания равна p....

Ввод данных, добавление данных, получение информации из файла по заданным критериям выборки
Все привет!!!Обращаюсь к вам за помощью...никак не получается решить задачку......

программa с массивом
Всем привет!мне нужно очень написать программу в которой пользователь вводит 10...

Преобразование измерительных сигналов
Здравствуйте! Требуется разработать и реализовать алгоритм обнаружения и...

2
student_5
0 / 0 / 0
Регистрация: 26.05.2010
Сообщений: 16
20.12.2010, 17:52  [ТС] 2
я нашел..., сделал.., помогли мне)
но только на языку Ассемблер-а

Листинг программы:

ЛИСТИНГ ПРОГРАММЫ НА ЯЗЫКЕ ASSEМBLER
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
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
. model small; модель памяти
. stack 100h; сегмент стека
. data; сегмент данных
MAXDIGITSequ16; максимальное количество символов 
; для ввода целого числа
BUFFERSIZEequMAXDIGITS + 2 + 1; объем буфера ввода
bufferdbBUFFERSIZE dup(?) ; буфер ввода
ARRAYSIZEequ4; количество элементов массива / 4
dataArraydb4*ARRAYSIZE dup(?) ; массив данных
changeValueNodb? ; номер элемента массива для изменения
changeValuedb? ; новое значение элемента массива
parityCodedd? ; код четности
; переменные для работы генератора случайных чисел
rand_add69621
rand_mdd7FFFFFFFh
seeddd-1
; 
; Сообщения для вывода на экран
; 
welcomeMsgdb"Welcome to array parity checker. ", 0Dh, 0Ah
db0Dh, 0Ah
db"This program generates array with random values and calculates its parity code. ", 0Dh, 0Ah
db"Then you can change any array value and program will check parity code. ", 0Dh, 0Ah
db"Enjoy! ", 0Dh, 0Ah
db0Dh, 0Ah
db0Dh, 0Ah, "$"
errorMsgdb"Parity check error. ", 0Dh, 0Ah, "$"
okMsgdb"Parity check ok. ", 0Dh, 0Ah, "$"
dataMsgdb"Array data: $"
codeMsgdb"Parity code: $"
numberMsgdb"Enter array item number to change (0. .15): $"
valueMsgdb"Enter new value (0. .255): $"
uncorrectMsgdb"Incorrect number. $"
writelndb0Dh, 0Ah, "$"
byeMsgdb"Bye! ", 0Dh, 0Ah, "$"
itemSeparatordb" $"
. code; сегмент кода
.386; программа для процессора 80386
; - ----------------------------------------------------------------------------------------
; Главная программа
; - ---------------------------------------------------------------------------------------
start: movax, @data
movds, ax; настройка регистров
moves, ax; 
andsp, not 3; выравнивание границы стека 
; во избежание ошибки доступа к памяти
movax, 0003h; видеорежим 3, очистка экрана и установка курсора
int10h
movdx, offset welcomeMsg; вывести приветствие
callshowString
callfillArray; заполнить массив случайными данными
movcx, ARRAYSIZE * 4; рассчитать контрольное число 
; и записать в parityCode
movsi, offset dataArray
movdi, offset parityCode
callsaveParityCode
callshowArray; вывести значения элементов массива
moveax, parityCode
callshowParityCode
callinputValueNo; запросить у пользователя номер 
; элемента массива для изменения
callinputValue; запросить у пользователя новое значение 
; элемента массива
callchangeItem; изменить значение элемента массива
callshowArray; вывести значения элементов массива
callgetParityCode; рассчитать контрольное число
callshowParityCode
cmpparityCode, eax
jeparityCode_notChanged
parityCode_Changed: 
movdx, offset errorMsg; сообщение об изменении кода четности
callshowString
jmpmain_exit
parityCode_notChanged: 
movdx, offset okMsg; сообщение о неизменности кода четности
callshowString
main_exit: 
callwriteLine; перевод строки
callwriteLine; перевод строки
movdx, offset byeMsg; до свидания
callshowString
callwriteLine; перевод строки
movax, 4c00h; завершение выполнения программы
int21h
; - ---------------------------------------------------------------------------------------
; 
; Заполнить массив случайными данными. 
; 
; Параметры: нет
; 
; Возвращаемое значение: нет
; 
; Модификация регистров: нет
; 
; Глобальные переменные: 
; [ref] dataArray - массив данных для заполнения
; [in] ARRAYSIZE - размер массива
; 
; - ---------------------------------------------------------------------------------------
fillArrayproc
pusheax
pushcx
pushedi
movedi, offset dataArray; указатель на массив данных
movcx, ARRAYSIZE; размер массива
fillArray_loop: 
callrand; генерировать случайное число в eax
cld; направление записи - вперед
stosd; записать в очередной элемент массива
loopfillArray_loop
popedi
popcx
popeax
ret
fillArrayendp
; - ----------------------------------------------------------------------------------------
; Генерация случайного числа. 
; 
; Параметры: нет
; 
; Возвращаемое значение: 
; eax - случайное положительное 32-битное число (от 0 до 2^31 - 2) 
; 
; Модификация регистров: 
; eax
; 
; Глобальные переменные: 
; [in] rand_a – коэффициент a
; [in] rand_m – коэффициент m
; [ref] seed – последнее случайное число
; 
; Примечание: 
; Используется алгоритм, описанный в [Зубков С.В.] на стр.238. 
; Линейный конгруэнтный генератор описывается формулой: 
; 
; I [j + 1] = (a * I [j] + c) mod m
; 
; При правильно выбранных числах a и c эта последовательность возвращает
; все числа от нуля до m - 1 псевдослучайным образом и ее периодичность
; сказывается только на последовательностях порядка m. 
; Классический стандартный генератор Льюиса, Гудмана и Миллера
; использует a = 16807 (7^5) при m = 2^31 - 1. 
; Генераторы Парка и Миллера используют a = 48271 и a = 69621
; при том же m. 
; Используем последний вариант. 
; Значения a и m задаются в глобальных переменных rand_a и rand_m. 
; - ---------------------------------------------------------------------------------------
randproc
pushedx
moveax, dword ptr seed; считать последнее случайное число
testeax, eax; проверить его
jsfetch_seed; если не - 1, функция еще ни разу не вызывалась
; и надо создать начальное значение
randomize: 
muldword ptr rand_a; умножить на число a
divdword ptr rand_m; взять остаток от деления на 2^31 - 1
moveax, edx
movdword ptr seed, eax; сохранить для следующих вызовов
popedx
ret
fetch_seed: 
pushds
push0040h
popds
moveax, dword ptr ds: 006Ch; считать двойное слово из области данных BIOS
; по адресу 0040: 006C - текущее число тактов таймера
popds
jmpshort randomize
randendp
; - ----------------------------------------------------------------------------------------
; Рассчитать контрольное число элементов массива и сохранить в переменной. 
; 
; Параметры: 
; cx - размер массива
; ds: si - указатель на начало массива
; es: di - указатель на переменную-получатель
; 
; Возвращаемое значение: нет
; 
; Модификация регистров: нет
; - -----------------------------------------------------------------------------------------
saveParityCodeproc
pusheax
callgetParityCode; рассчитать контрольное число
mov [di], eax; сохранить результат
popeax
ret
saveParityCodeendp
; - ----------------------------------------------------------------------------------------
; Рассчитать контрольное число четности элементов массива. 
; Если размер массива больше 32 байт, контрольное число
; рассчитывается методом суммирования - см. getParitySum
; Если размер массива не более 32 байт, контрольное число
; рассчитывается методом битовых масок - см. getParityBits
; 
; Параметры: 
; cx - размер массива
; ds: si - указатель на начало массива
; 
; Возвращаемое значение: 
; eax - 32-битное контрольное число
; 
; Модификация регистров: 
; eax
; - ----------------------------------------------------------------------------------------
getParityCodeproc
cmpcx, 32
jagetParityCode_sum
callgetParityBits
ret
getParityCode_sum: 
callgetParitySum
ret
getParityCodeendp
; - -----------------------------------------------------------------------------------------
; Рассчитать контрольное число четности элементов массива методом битовых масок. 
; Используется для массивов размером не более 32 байт. 
; Для каждого байта определяется количество битов. Если оно четное, соответствующий
; бит контрольного числа устанавливается в 1, если нечетное - в 0. 
; Нулевому байту массива соответствует нулевой бит контрольного числа и т.д. 
; 
; Параметры: 
; cx - размер массива
; ds: si - указатель на начало массива
; 
; Возвращаемое значение: 
; eax - 32-битное контрольное число
; 
; Модификация регистров: 
; eax
; - ----------------------------------------------------------------------------------------
getParityBitsproc
pushebx
pushcx
pushsi
xorebx, ebx; обнулить результат
std; направление чтения - назад
addsi, cx; установить указатель на последний элемент массива
decsi
getParityBits_loop: 
lodsb; прочитать байт данных в al
testal, al; проверить четность
jpgetParityBits_parity; если четность, перейти к установке флага cf
clc; сброс флага cf
jmpshort getParityBits_shift; перейти к формированию результата
getParityBits_parity: 
stc; установить флаг cf
getParityBits_shift: 
rclebx, 1; сдвиг влево на 1 бит с учетом флага cf
loopgetParityBits_loop
moveax, ebx; записать результат в eax
popsi
popcx
popebx
ret
getParityBitsendp
; - -----------------------------------------------------------------------------------------
; Рассчитать контрольное число четности элементов массива суммированием. 
; Используется для массивов размером более 32 байт. 
; Для каждого байта определяется количество битов. Если оно четное, 
; контрольное число увеличиваем на 1. 
; 
; Параметры: 
; cx - размер массива
; ds: si - указатель на начало массива
; 
; Возвращаемое значение: 
; eax - 32-битное контрольное число
; 
; Модификация регистров: 
; eax
; 
; - ----------------------------------------------------------------------------------------
getParitySumproc
pushebx
pushcx
pushsi
xorebx, ebx; обнулить результат
cld; направление чтения - вперед
getParitySum_loop: 
lodsb; прочитать байт данных в al
testal, al; проверить четность
jnpgetParitySum_next; если не четность, продолжить
incebx; увеличить результат на 1
getParitySum_next: 
loopgetParitySum_loop
moveax, ebx; записать результат в eax
popsi
popcx
popebx
ret
getParitySumendp
; - -----------------------------------------------------------------------------------------
; Вывод на экран элементов массива. 
; 
; Параметры: нет
; 
; Возвращаемое значение: нет
; 
; Модификация регистров: нет
; 
; Глобальные переменные: 
; [in] dataMsg – сообщение
; [in] dataArray – массив данных
; [ref] buffer – буфер преобразования числа в строку
; [in] itemSeparator – разделитель элементов массива
; [in] ARRAYSIZE - размер массива
; - ----------------------------------------------------------------------------------------
showArrayproc
pusheax
pushcx
pushdx
pushsi
pushdi
movdx, offset dataMsg; сообщение
callshowString
 
xoreax, eax; обнулить аккумулятор
movsi, offset dataArray; читать данные из массива данных
movdi, offset buffer
movcx, ARRAYSIZE * 4; размер массива, байт
showArray_loop: 
cld; направление чтения - вперед
lodsb; прочитать байт данных в al
callint2dec; преобразовать в строку
movdx, offset buffer
callshowString; вывести на экран
movdx, offset itemSeparator
callshowString; вывести пробел
loopshowArray_loop
callwriteLine; перевод строки
popdi
popsi
popdx
popcx
popeax
ret
showArrayendp
; - ---------------------------------------------------------------------------------------
; Вывод на экран контрольного кода четности. 
; 
; Параметры: 
; eax - контрольное число
; 
; Возвращаемое значение: нет
; 
; Модификация регистров: нет
; 
; Глобальные переменные: 
; [in] codeMsg – сообщение
; [ref] buffer – буфер преобразования числа в строку
; - -----------------------------------------------------------------------------------------
showParityCodeproc
pushdx
pushdi
movdx, offset codeMsg; сообщение
callshowString
movdi, offset buffer
callint2dec; преобразовать в строку
movdx, di
callshowString; вывести на экран
callwriteLine; перевод строки
popdi
popdx
ret
showParityCodeendp
; - ----------------------------------------------------------------------------------------
; Запросить у пользователя номер элемента массива для изменения. 
; 
; Параметры: нет
; 
; Возвращаемое значение: нет
; 
; Модификация регистров: нет
; 
; Глобальные переменные: 
; [in] ARRAYSIZE - размер массива
; [in] numberMsg – запрос на ввод номера элемента массива
; [in] uncorrectMsg – сообщение об ошибке
; [out] changeValueNo – результат ввода
; - ----------------------------------------------------------------------------------------
inputValueNoproc
pushbx
pushcx
pushdx
pushsi
pushdi
movbx, ARRAYSIZE * 4 - 1; максимально допустимое значение
movcl, 2; максимально допустимое количество символов
movdx, offset numberMsg; запрос на ввод номера элемента массива
movsi, offset uncorrectMsg; сообщение об ошибке
movdi, offset changeValueNo; запомнить результат ввода в changeValueNo
callinputNumber
popdi
popsi
popdx
popcx
popbx
ret
inputValueNoendp
; - -----------------------------------------------------------------------------------------
; Запросить у пользователя новое значение элемента массива. 
; 
; Параметры: нет
; 
; Возвращаемое значение: нет
; 
; Модификация регистров: нет
; 
; Глобальные переменные: 
; [in] valueMsg - запрос на ввод нового значения элемента массива
; [in] uncorrectMsg – сообщение об ошибке
; [out] changeValue – результат ввода
; - -----------------------------------------------------------------------------------------
inputValueproc
pushbx
pushcx
pushdx
pushsi
pushdi
movbx, 255; максимально допустимое значение
movcl, 3; максимально допустимое количество символов
movdx, offset valueMsg; запрос на ввод нового значения элемента массива
movsi, offset uncorrectMsg; сообщение об ошибке
movdi, offset changeValue; запомнить результат ввода в changeValue
callinputNumber
popdi
popsi
popdx
popcx
popbx
ret
inputValueendp
; - -----------------------------------------------------------------------------------------
; Изменить значение элемента массива. 
; 
; Параметры: нет
; 
; Возвращаемое значение: нет
; 
; Модификация регистров: нет
; 
; Глобальные переменные: 
; [ref] dataArray – массив данных
; [in] changeValueNo – номер элемента массива для изменения
; [in] changeValue – новое значение элемента массива
; - -----------------------------------------------------------------------------------------
changeItemproc
pushax
pushbx
pushsi
movbx, offset dataArray
xorax, ax
moval, changeValueNo
movsi, ax
moval, changeValue
mov [bx + si], al
popsi
popbx
popax
ret
changeItemendp
; - ----------------------------------------------------------------------------------------
; Запрос у пользователя числа. 
; Вводятся беззнаковые целые числа в диапазоне 0. .65535. 
; 
; Параметры: 
; bx - максимально допустимое значение
; cl - максимально допустимое количество символов
; dx - указатель на строку-приглашение для ввода
; si - указатель на сообщение об ошибке
; di - указатель на байтовую переменную-получатель
; 
; Возвращаемое значение: нет
; 
; Модификация регистров: нет
; 
; Глобальные переменные: 
; [ref] buffer – буфер преобразования строки в число
; - -----------------------------------------------------------------------------------------
inputNumberproc
pushax
pushdi
inputNumber_input: 
callshowString; вывод строки-приглашения для ввода
movdi, offset buffer; указатель на буфер ввода
calldo_inputNumber
callwriteLine; перевод строки
jncinputNumber_exit; если нет ошибки ввода, выход
inputNumber_error: 
pushdx
movdx, si; сообщение об ошибке
callshowString
popdx
jmpshort inputNumber_input
inputNumber_exit: 
popdi
mov [di], al; запомнить результат ввода в переменной-получателе
popax
ret
inputNumberendp
; - -----------------------------------------------------------------------------------------
; Ввод числа. 
; Вводятся беззнаковые целые числа в диапазоне 0. .65535. 
; 
; Параметры: 
; bx - максимально допустимое значение
; cl - максимально допустимое количество символов
; es: di - указатель на буфер ввода
; первый байт буфера резервируется для записи максимально допустимого количества символов
; второй байт буфера резервируется для записи количества реально введенных символов
; 
; Возвращаемое значение: 
; ax - результат ввода
; ch - количество введенных символов
; cf - 
; = 0 в случае успешного преобразования
; = 1 в случае ошибки преобразования
; 
; Модификация регистров: 
; ax, cx, flags. cf
; - -----------------------------------------------------------------------------------------
do_inputNumberproc
pushdx
pushsi
andcx, 0Fh; обнуление ch (длины введенной строки) 
clc; сброс флага ошибки
inccl
mov [di], cl; максимальное количество символов для ввода
deccl
movdx, di; настройка указателя на начало буфера ввода
movah, 0Ah; ввод с клавиатуры
int21h
movch, [di + 1] ; количество введенных символов
cmpch, 0; если = 0, ошибка
jedo_inputNumber_error1
 
movsi, di; подготовим указатель на первый введенный символ
incsi; для последующего преобразования строки в число
incsi
pushcx; преобразование десятичного числа
movcl, ch
andcx, 0Fh
calldec2int
popcx
jcdo_inputNumber_error1; если ошибка преобразования, выход с ошибкой
cmpbx, ax
jcdo_inputNumber_error2; если превышение лимита, выход с ошибкой 
; без очистки результата
jmpdo_inputNumber_exit; если не превышает лимит, выход без ошибки
do_inputNumber_error1: ; ошибка преобразования
xorax, ax; обнулить результат
do_inputNumber_error2: ; ошибка преобразования
stc; установить флаг ошибки
do_inputNumber_exit: 
popsi
popdx
ret
do_inputNumberendp
; - -----------------------------------------------------------------------------------------
; Вывод строки на экран. 
; 
; Параметры: 
; dx - адрес строки для вывода, строка должна заканчиваться символом $
; 
; Возвращаемое значение: нет
; 
; Модификация регистров: нет
; - ----------------------------------------------------------------------------------------
showStringproc
pushax
movah, 9h; вызов функции DOS
int21h
popax
ret
showStringendp
; - -----------------------------------------------------------------------------------------
; Перевод строки. 
; 
; Параметры: нет
; 
; Возвращаемое значение: нет
; 
; Модификация регистров: нет
; 
; Глобальные переменные: 
; [in] writeln – коды перевода строки
; - -----------------------------------------------------------------------------------------
writeLineproc
pushdx
movdx, offset writeln; вывод символов перевода строки
callshowString
popdx
ret
writeLineendp
; - -----------------------------------------------------------------------------------------
; Преобразование строки, содержащей десятичные символы, в число. 
; Строка должна содержать строковое представление целого числа в диапазоне 0. .65535. 
; 
; Параметры: 
; ds: si - указатель на первый обрабатываемый символ исходной строки
; cx - количество символов (беззнаковое число) 
; 
; Возвращаемое значение: 
; ax - результат преобразования
; cf - 
; = 0 в случае успешного преобразования
; = 1 в случае ошибки преобразования
; 
; Модификация регистров: 
; ax, flags. cf
; - -----------------------------------------------------------------------------------------
dec2intproc
pushbx
pushcx
pushdx
pushsi
cmpcx, 0; проверка: количество символов 1. .5
jedec2int_error
cmpcx, 5
jadec2int_error
xorax, ax; обнуление результата
xorbx, bx; обнуление регистра-приемника
clc; сброс флага ошибки
dec2int_loop: ; цикл обработки символов исходной строки
movbl, byte ptr [si] ; читать очередной символ
cmpbl, '0'; если меньше 0, ошибка
jbdec2int_error
cmpbl, '9'; если больше 9, ошибка
jadec2int_error
subbl, '0'; вычесть код символа 0
movdx, ax; умножение на 10 содержимого ax: 
shlax, 1; ax = 2x
jcdec2int_error
shlax, 1; ax = 4x
jcdec2int_error
addax, dx; ax = 4x + x = 5x
jcdec2int_error
shlax, 1; ax = 10x
jcdec2int_error
addax, bx; добавить промежуточный результат преобразования
jcdec2int_error
incsi; перейти к следующему символу
loopdec2int_loop
jmpdec2int_exit
dec2int_error: ; ошибка преобразования
xorax, ax; обнулить результат
stc; установить флаг ошибки
dec2int_exit: 
popsi
popdx
popcx
popbx
ret
dec2intendp
; - ----------------------------------------------------------------------------------------
; Преобразование числа в десятичное строковое представление. 
; Полученная строка завершается символом $. 
; 
; Параметры: 
; eax - исходное число
; es: di - указатель на первый символ буфера для выходной строки
; 
; Возвращаемое значение: 
; выходная строка
; 
; Модификация регистров: нет
; - ----------------------------------------------------------------------------------------
int2decproc
pusheax
pushebx
pushcx
pushedx
pushdi
xorebx, ebx
movbl, 10; множитель
xorcx, cx; обнуление счетчика символов
int2dec_loop: ; начало цикла преобразования
xoredx, edx; обнуление промежуточного результата преобразования
divebx; деление ax на 10, в dl - остаток от деления
adddl, '0'; перевод в ASCII
pushdx; сохранение результата в стеке
inccx; увеличить счетчик символов
testeax, eax; проверить ax на 0
jnzint2dec_loop; если что-то осталось, 
; продолжить цикл преобразования
cld; направление обработки строк - вперед
int2dec_store: ; цикл формирования конечного результата
popax; восстановить цифру из стека
stosb; записать в результат
loopint2dec_store; проверка окончания цикла
movbyte ptr [di], '$'; добавить символ завершения строки
popdi
popedx
popcx
popebx
popeax
ret
int2decendp
; - -------------------------------------------------------------------------------------- - end start; конец программы
;
0
student_5
0 / 0 / 0
Регистрация: 26.05.2010
Сообщений: 16
29.12.2010, 12:43  [ТС] 3
Добрый день!
помогите пожалуйста (подскажите как) написать программу. (на языке Ассемблера или Delphi )
или какие нибудь Листинги..(алгоритмы)


"Разработать программу печати выбранного текстового файла через параллельный интерфейс. Программа должна быть устойчива к ошибкам печати и иметь возможность задания тайм-аута."

или по другому вопрос выглядит так:

"Разработать программу исключения промахов из выборки измерительных данных."

спасибо...заранее !
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2010, 12:43

Погрешности измерительных рассогласований
Подскажите, какие бывают типы погрешностей измерительных рассогласований на...

программa обработки строки
Дана строка, содержащая полное имя файла, то есть имя диска, список каталогов...

Схема без измерительных приборов
Из этого: ...


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

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

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