2 / 2 / 0
Регистрация: 11.04.2018
Сообщений: 61
1

Написать программу, которая создает файл и заполняет его. Дополняет его записями. Редактирует записи в нем

27.02.2020, 18:07. Показов 2375. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, товарищи. Начал изучать ассемблер и первая лаба выпала - написать программу для создания файла и его заполнения. Далее написать программу для добавления записи в этот файл и вывод всего содержимого файла на экран. Далее редактирование содержимого файла.
Помогите пожалуйста!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2020, 18:07
Ответы с готовыми решениями:

Файл: Напишите программу, которая создает текстовый файл и заполняет его тремя или более строками некоторого текста.
Напишите программу, которая создает текстовый файл и заполняет его тремя или более строками...

Написать программу, которая создает, редактирует, перезаписывает, удаляет текстовый файл и производит поиск
В программе должно быть комментарии в тексте программы и сделать очистку всех объектов ввода...

Напишите программу, которая создает двухмерный массив и заполняет его по следующему принципу
2. Напишите программу, которая создает двухмерный массив и заполняет его по следующему принципу:...

Составьте программу, которая создаёт список и заполняет его случайными числами из диапазона -50.+50
Вывести результаты работы функций на страницу: Составьте программу, которая создаёт список и...

5
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
27.02.2020, 18:43 2
Если будете работать - я помогу. Делать за вас не буду, т.к. объём программы достаточно велик и трудозатрыты на такую программу легко превысят 1 рабочий день.

По некоторым признакам ощущение, что в задании требуется организовать подобие списка или базы данных на основе типа struc. Этот список требуется вводить, редактировать, сохранять в файле, выводить на экран.
Что-то вроде http://www.cyberforum.ru/asm-b... 39157.html

Это не сложно, но трудоёмко.

Попробуйте начать.
0
2 / 2 / 0
Регистрация: 11.04.2018
Сообщений: 61
28.02.2020, 15:19  [ТС] 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
; masm dos exe #
.286
.model small
.stack 100h
.data
file_name db 'lab1.txt',0
string1 db "qwerty ----------- qwerty",0dh,0ah
size1 dw $-string1
string2 db "qwerty ------------"
size2 dw $-string2
buf db 99 dup('$')
bufsize dw $-buf
buflen dw ?
Handel dw ?
newline db 13,10,'$'
.code
start:  
    mov ax,@data
    mov ds,ax
    mov es,ax
 
    mov ah,3Ch
    mov dx,offset file_name
    mov cx,0
    int 21h
    mov Handel,ax
 
    mov ah,40h
    mov bx,Handel
    mov cx,size1
    mov dx,offset string1
    int 21h
 
    mov ah,40h
    mov bx,Handel
    mov cx,size2
    lea dx, string2
    int 21h
 
    mov ah,3Eh
    mov bx,Handel
    int 21h
    
    mov ah,3Dh
    mov dx,offset file_name
    mov al,0
    int 21h
    mov Handel,ax
 
    mov ah,3Fh
    mov bx,Handel
    mov cx,bufsize
    lea dx,buf
    int 21h
    mov buflen,ax
 
    mov ah,3Eh
    mov bx,Handel
    int 21h
    
 
    mov ah,40h
    mov bx,1
    mov cx,buflen
    lea dx,buf
    int 21h 
 
    mov ah,09h
    lea dx,newline
    int 21h
    
 
    mov ah,40h
    mov bx,1
    mov cx,16-10+1 
    lea dx,buf+10-1
    int 21h
 
    mov ah,09h
    lea dx,newline
    int 21h
 
    mov ah,40h
    mov bx,1
    mov cx,49-44+1
    lea dx,buf+44-1
    int 21h
 
    mov ah,09h
    lea dx,newline
    int 21h
 
    mov ah,4Ch
    int 21h
end start
1
Эксперт CЭксперт С++
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
28.02.2020, 15:32 4
Лучший ответ Сообщение было отмечено 4Simple как решение

Решение

4Simple, давайте я дам направление, куда двигаться. Есть такая функция LSEEK:
Код
AH = 42h
BX = handle of file
CX:DX = distance to move file pointer
AL = 0 move pointer to start of file + CX:DX
   = 1 move pointer to current position + CX:DX
   = 2 move pointer to end of file + CX:DX
Если после открытия файла сделать:
Assembler
1
2
3
4
5
mov ax, 4202h
xor cx, cx
xor dx, dx
mov bx, handle
int 21h
То установим указатель файла ровно на конец файла.
Дальнейшая запись будет вестись туда, куда надо
4
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
29.02.2020, 09:53 5
Лучший ответ Сообщение было отмечено 4Simple как решение

Решение

4Simple, как понимаю, у вас должно получиться три отдельные программы:
- для создания файла и его заполнения
- для добавления записи в этот файл и вывод всего содержимого файла на экран
- редактирование содержимого файла

В принципе, вы все правильно делаете.

Наверное есть смысл определиться с принципами работы с файлом и сделать некоторую заготовку.
Чтобы было меньше проблем с пониманием причин логических ошибок программы, каждое действие при работе с файлом будем проверять на корректность и в случае ошибки выводить диагностическое сообщение.
При чтении описаний файловых функций 3Dh, 3Ch, 40h, 42h и других, видно, что при ошибке взводится флаг CY.

Таким образом, сделаем некоторую заготовку во всех файлах - диагностические сообщения
Assembler
1
2
3
4
5
6
7
8
9
.data
        szFileName      db      'data.txt', 0
        hFile           dw      ?
 
        errFileCreate   db      'File create error', '$'
        errFileOpen     db      'File open error', '$'
        errFileLSeek    db      'File lseek error', '$'
        errFileWrite    db      'File write error', '$'
        errFileClose    db      'File close error', '$'
которые будем использовать примерно так
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
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;создать новый файл (если файл существует - усечь его до нулевой длины)
        mov     ah,     3Ch     ;создать новый файл
        mov     cx,     0
        lea     dx,     [szFileName]
        int     21h
        jnc     @@FileCreateOk
        mov     ah,     09h
        lea     dx,     [errFileCreate]
        int     21h
        jmp     @@Exit
@@FileCreateOk:
        mov     [hFile],        ax
 
..................................................................
@@Exit:
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main
Итак, получаем программу для создания файла и его заполнения - привожу, т.к. вы уже подобное реализовали самостоятельно
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
;программа для создания файла и его заполнения
.model small
 
.stack 100h
 
.data
        szFileName      db      'data.txt', 0
        hFile           dw      ?
 
        errFileCreate   db      'File create error', '$'
        errFileOpen     db      'File open error', '$'
        errFileLSeek    db      'File lseek error', '$'
        errFileWrite    db      'File write error', '$'
        errFileClose    db      'File close error', '$'
 
        sString1        db      'String1.', 0Dh, 0Ah
        nStrLen1        =       $-sString1
 
        CrLf    db      0Dh, 0Ah, '$'
 
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;создать новый файл (если файл существует - усечь его до нулевой длины)
        mov     ah,     3Ch     ;создать новый файл
        mov     cx,     0
        lea     dx,     [szFileName]
        int     21h
        jnc     @@FileCreateOk          ;при ошибке выводим сообщение
        mov     ah,     09h             ;и завершаем программу
        lea     dx,     [errFileCreate]
        int     21h
        jmp     @@Exit
@@FileCreateOk:
        mov     [hFile],        ax
 
        ;записать в файл
        mov     ah,     40h
        mov     bx,     [hFile]
        mov     cx,     nStrLen1
        lea     dx,     [sString1]
        int     21h
        jnc     @@FileWriteOk           ;при ошибке записи:
        mov     ah,     3Eh             ; - закрываем файл
        mov     bx,     [hFile]
        int     21h
        mov     ah,     09h             ; - выводим сообщение
        lea     dx,     [errFileWrite]
        int     21h
        jmp     @@Exit                  ; - и завершаем программу
@@FileWriteOk:
 
        ;закрыть файл
        mov     ah,     3Eh
        mov     bx,     [hFile]
        int     21h
        jnc     @@Exit                  ;при ошибке:
        mov     ah,     09h             ; - выводим сообщение
        lea     dx,     [errFileClose]
        int     21h
 
        ;завершение программы
@@Exit:
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main
При открытии файла для дополнения (дозаписи) используют другую функцию открытия файла - 3Dh и перемещения файлового указателя в конец файла - 42h, после чего производят запись - 40h.

Чтобы вывести весь файл на экран, организуют цикл с постусловием, в котором сравнивают количество байт запрашиваемое для чтение и реально считанное - если не равны, то файл закончился и выводить на экран нечего.
Что-то вроде
Assembler
1
2
3
4
5
6
7
8
9
10
@@ShowFile:
  mov ah, 3Fh
  mov bx, [hFile]
  mov cx, BufLen
  lea dx, [Buffer]
  int 21h
  проверка на ошибку чтения
  проверка, что ax (количество реально считанных байт) больше 0
  вывод буфера на экран функцией 40h при bx=1
jmp @@ShowFile  ;здесь можно бы сравнивать реально считанное с BufLen, но так проще записать
1
2 / 2 / 0
Регистрация: 11.04.2018
Сообщений: 61
01.03.2020, 21:24  [ТС] 6
ФедосеевПавел, благодарю. думаю, что разберусь)
0
01.03.2020, 21:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2020, 21:24
Помогаю со студенческими работами здесь

Написать функцию, которая создает файл, заполняя его случайными символами
Помогите чайнику! В общем,задание вроде элементарное: "Написать функцию, которая создает файл,...

Написать программу, которая заполняет двумерный массив размером 4х5 нечетными числами и выводит его на экран.
Написать программу, которая заполняет двумерный массив размером 4х5 нечетными числами и выводит его...

Написать программу, которая запрашивает размерность двумерного массива, заполняет его случайными числами от 5 до 15 и находит максимальный элемент в м
Написать программу, которая запрашивает размерность двумерного массива, заполняет его случайными...

составить программу,которая создает файл, состоящий из 10 значений типа int. прочитать файл и вычислить сумму его элементов
составить программу,которая создает файл, состоящий из 10 значений типа int. прочитать файл и...

Написать программу, которая создает линейный однонаправленный список, печатает его и удаляет заданный элемент
Написать программу, которая создает линейный однонаправленный список, печатает его и удаляет...

Используя записи, написать программу, которая заполняет анкеты студентов
Уважаемые форумчане ,осталось последняя задача ,её нужно сдать завтра ,прошу помогите ,вот задание:...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru