Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2010, 13:30   #1
den-nokia
Новичок
Джуниор
 
Регистрация: 12.05.2010
Сообщений: 1
Печаль Вывод в файл подходящих по условию строк матрицы

Как осуществить вывод в новый (второй) файл оценки троечников. Вывод осуществлял в процедуре с помощью цикла, но выводит неправильно. Ниже представлен год программы для подсчёта всех троечников (хотя бы одна тройка, но без двоек) в матрице из 10 строк и 4 столбцов – оценки 10 сту-дентов группы за сессию (4 экзамена в сессии). Где данные матрицы сначала заносятся в файл, затем считываются из файла. В конец файла дописывается число троечников. И необходимо создать второй файл и записать в него всех троечников.

Код:
.386 
.model flat, stdcall 
option casemap:none 
include windows.inc 
include kernel32.inc 
includelib user32.lib 
includelib kernel32.lib 
NOFDIG equ 40 
DSIZE equ 4 
BSIZE equ 40
DIGSZ equ 20
ExitProcess proto:DWORD
.data 
fName BYTE "text_file",0 
fmt BYTE "%d",0
fHandle DWORD ? 
stdout DWORD ? 
cRead DWORD ?
cWritten DWORD ?
cWrite DWORD ?
x BYTE ? ; количество троек у студента
buf BYTE BSIZE dup (?) 
dig2sim BYTE DIGSZ dup (?) 
digs BYTE 1,2,3,4, 
                   5,4,3,5, 
                   5,3,4,3, 
                   4,4,3,5,
                   5,5,4,3,
                   1,2,3,4, 
                   5,4,3,2, 
                   5,3,4,3, 
                   4,4,3,3,
                   5,5,2,2 
.code
start:

                        invoke CreateFile, ADDR fName, 
                        GENERIC_WRITE, 
                        0, NULL, CREATE_ALWAYS, 
                        FILE_ATTRIBUTE_ARCHIVE, 0 
                        mov fHandle, eax 
                        invoke WriteFile, fHandle, ADDR digs,BSIZE, 
                        ADDR cWritten, NULL 
                        invoke CloseHandle, fHandle

                        invoke GetStdHandle, STD_OUTPUT_HANDLE 
                        mov stdout, eax 
                        invoke CreateFile, ADDR fName, 
                        GENERIC_READ, 
                        0, NULL, OPEN_EXISTING, 
                        FILE_ATTRIBUTE_NORMAL, 0
                        mov fHandle, eax 
                        invoke ReadFile, fHandle, ADDR buf,
                        BSIZE, ADDR cRead, NULL 
                        mov ecx, NOFDIG 
                        mov esi, 0 
nxt: 
            push ecx 
                                movzx eax,buf[esi]
                        invoke wsprintf, ADDR dig2sim,
                        ADDR fmt,  eax
                        invoke WriteConsoleA, stdout, 
                        ADDR dig2sim,
                        DIGSZ, ADDR cWritten, NULL 
                        add esi, 1 
                        pop ecx 
                        loop nxt 
                        invoke CloseHandle, fHandle

                        xor eax, eax
                        xor ebx, ebx
                        xor ecx, ecx
                        xor edx, edx
                        xor esi, esi
                        mov al, 0 ; количество строешников (строк)

                        mov ecx, 10 ; счётчик внешнего цикла
                        lea ebx, digs ; смещение
L:
                                                push ecx 

            mov ecx, 4 ; задание счётчика внут. цикла
            xor edx,edx
L1:           
                        cmp [ebx+ecx-1], byte ptr 2
                        ja bolse
                                                inc dh                                                                  
bolse:                      cmp [ebx+ecx-1], byte ptr 3
                        jne L2 ; если равно, то переходим
                        inc dl
            L2:         LOOP L1 ; внутренний цикл 4 раза
                                pop ecx
                                test dh,dh
                                jnz L3
                                test dl,dl
                                jz L3
                                inc x
L3:                                             add ebx,4
                                                loop L

            invoke CreateFile, ADDR fName, 
                        GENERIC_READ+GENERIC_WRITE, 
                        0, NULL, OPEN_EXISTING, 
                        FILE_ATTRIBUTE_NORMAL, 0 
                        mov fHandle, eax 
                        invoke SetFilePointer, fHandle, 41, 
                        NULL,FILE_BEGIN
                        invoke ReadFile, fHandle, ADDR buf, 
                        BSIZE, ADDR cRead, NULL 
                        invoke SetFilePointer, fHandle, 41, 
                        NULL,FILE_BEGIN 
                        invoke WriteFile, fHandle, ADDR x, 
                        1, ADDR cWrite, NULL 
                        invoke WriteFile, fHandle, ADDR buf, 
                        cRead, ADDR cWrite, NULL 
                        invoke CloseHandle, fHandle

invoke ExitProcess, 0 
end start
den-nokia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод матрицы в файл и на консоль С++ sir.andrey Помощь студентам 2 21.10.2010 13:38
Скрытие строк по условию MaxxVer Microsoft Office Excel 11 09.04.2010 05:55
вывод в DBGrid по условию Sergey2 БД в Delphi 13 01.03.2010 21:41
Перекрашивание строк DBGrid по условию ГОСЕАН БД в Delphi 4 11.05.2009 23:19
Удаление строк массива по условию Lexakazanskij Паскаль, Turbo Pascal, PascalABC.NET 9 12.09.2007 20:32