Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 1
1
FASM

Создать директорию, в ней - файл, записать в него строку, переписать вторую половину строки в другой файл.

18.12.2016, 17:59. Показов 1806. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Надо выполнить задание, создать директорию, в ней создать файл записать в него строку, потом переписать вторую половину строки в другой файл, не могу понять каким образом организовать выделение в первом файле данной половины строки. PS: в примере программа выполняющая подобное задание, прошу помочь с методом process_file
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
use16
org 100h
jmp start
 
;----DATA----
prop_dirname db 'Enter directory name: $'
prop_filename db 'Enter filename: $'
prop_filetext db 'Enter file content: $'
endline db 13,10,'$'
buffer rb 242
proc_buffer rb 242
proc_name db 'proc.txt',0
handle rw 1
;------------
 
start:
 
        call create_directory
        call print_endline
        call create_file
        call print_endline
        call write_file
        call print_endline
        call open_file
        call print_endline
        call process_file
 
jmp exit_app
 
 
;---PROGRAM METHODS---
create_directory:
        call input_dirname
mov ah, 39h ;CREATING DIRECTORY
int 21h
mov ah, 3Bh ;OPEN DIRECTORY
int 21h
        ret
 
create_file:
        call input_filename
mov ah, 3Ch ;CREATING FILE
xor cx, cx
int 21h
mov [handle], ax ;SAVING FILE DESCRIPTOR
        ret
 
write_file:
        call input_filetext
mov bx, [handle] ;GETTING FILE DESCRIPTOR
mov ah, 40h ;WRITING FILE
int 21h
        call close_file
        ret
 
open_file:
mov ah, 3Dh
mov al, 2
        call input_filename
int 21h
mov [handle], ax
 
mov bx, [handle]
mov ah, 3Fh ;OPENING FILE
mov dx, buffer
mov cx, 241
int 21h
        ret
 
process_file:
        add ax, dx
mov bx, dx
inc bx
mov si, proc_buffer
forloop:
cmp bx, ax
jge show_processed
mov cl, [bx]
mov [si], cl
          add bx, 2
inc si
jmp forloop
 
show_processed:
        call write_processed
mov byte[si], '$'
mov di, proc_buffer
        call print_str
        ret
 
write_processed:
mov dx, proc_name
mov ah, 3Ch
xor cx, cx
int 21h
mov bx, ax
mov ah, 40h
mov dx, proc_buffer
mov cx, si
        sub cx, proc_buffer
int 21h
        ret
 
input_dirname:
mov di, prop_dirname
        call print_str
        call input_str
        ret
 
input_filename:
mov di, prop_filename
        call print_str
        call input_str
        ret
 
input_filetext:
mov di, prop_filetext
        call print_str
        call input_str
        ret
 
;---SERVICE METHODS---
close_file:
mov ah, 3Eh
mov bx, [handle]
int 21h
        ret
 
exit_app:
mov ax, 4C00h
int 21h
 
print_str:
        push ax
mov ah, 9
xchg dx, di
int 21h
xchg dx, di
        pop ax
        ret
 
print_endline:
        push di
mov di,endline
call print_str
        pop di
        ret
 
input_str:
        push ax
mov ah, 0Ah
mov [buffer], 240
mov byte[buffer+1], 0
mov dx, buffer
int 21h
xor ax, ax
mov al, [buffer+1]
        add ax, dx
        add ax, 2
mov si, ax
mov al, 0
mov [si], al
mov cl, [buffer+1]
add dx, 2
pop ax
ret
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.12.2016, 17:59
Ответы с готовыми решениями:

Дан файл. Удалить из него третью строку. Результат записать в другой файл
Дан файл. Удалить из него третью строку. Результат записать в другой файл. Формат входных...

Имеется текстовый файл. Удалить из него третью строку. Результат записать в другой файл
Имеется текстовый файл. Удалить из него третью строку. Результат записать в другой файл.

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

Создать новый файл, записав в него каждую вторую строку исходного файла
Дан текстовый файл,создать новый записав в него каждую вторую строку исходного файла

1
Эксперт Hardware
Эксперт Hardware
6103 / 2347 / 390
Регистрация: 29.07.2014
Сообщений: 3,108
Записей в блоге: 4
18.12.2016, 22:03 2
Лучший ответ Сообщение было отмечено S1oux как решение

Решение

Цитата Сообщение от S1oux Посмотреть сообщение
прошу помочь с методом process_file
Что-то ты запутал там всё..
Чтобы выделить вторую половину строки, достаточно разделить длину на 2,
и прибавать её к указателю начала строки.
Вот пример (метки локальные):
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
org  100h
jmp  start
 
;----DATA----
mes0    db  13,10,'Dir name..: $'
mes1    db  13,10,'File name.: $'
mes2    db  13,10,'String....: $'
err     db  13,10,7,'Error!$'
okey    db  13,10,'--------------------'
        db  13,10,'Create Files OK! ..$'
 
buff    db  80            ; буфер для строки fn.0Ah
len     db  0
string  db  80 dup(0)
 
name    db  32 dup(0)     ; буфер для имени папки/файла
hand1   dw  0             ; хэндлы двух файлов
hand2   dw  0
;------------
 
start:  mov   dx,mes0
        call  Message
        mov   di,name       ; указатель на имя папки
        call  inpName
 
; создать папку
        mov   ah,39h
        mov   dx,name
        int   21h
        jc    Error
 
; читаем имя файла (сразу вложим в папку)
        mov   dx,mes1
        call  Message        ; ES:DI уже установлен
        mov   al,'\'         ; закроем путь
        stosb
        call  inpName        ; имя файла
        mov   si,di
        sub   si,5           ; указатель на последний символ имени (до расширения)
 
; создать сразу два файла
        mov   di,hand1       ; приёмник дескрипторов
        mov   bx,2           ; кол-во файлов
@@:     mov   ah,3Ch
        mov   dx,name
        mov   cx,20h
        int   21h
        stosw                ; запомним хэндл
        inc   byte[si]       ; сменить имя файла
        dec   bx
        jnz   @b             ; на повтор..
 
; читаем текстовую строку юзера
        mov   dx,mes2
        call  Message
        mov   ah,0Ah
        mov   dx,buff
        int   21h
 
; запись в первый файл
        xor   ch,ch
        mov   ah,40h
        mov   bx,[hand1]
        mov   dx,string
        mov   cl,[len]
        int   21h
        jc    Error
; запись во-второй файл
        shr   cx,1           ; разделить длину строки на 2
        add   dx,cx          ; сместить указатель в буфере на вторую половину строки
        mov   ah,40h
        mov   bx,[hand2]
        int   21h
        jc    Error
 
; закроем оба файла
        mov   ah,3Eh
        mov   bx,[hand1]
        int   21h
        mov   bx,[hand2]
        int   21h
 
        mov   dx,okey
        call  Message
exit:   xor   ax,ax
        int   16h
        int   20h            ; выход!
 
;------- Процедуры ------------------------------------//
Message:
        mov  ah,9
        int  21h
        ret
 
Error:  mov   dx,err
        call  Message
        jmp   exit
 
inpName:
        mov   cx,12
        mov   ah,1
@@:     int   21h
        cmp   al,13
        je    @f
        stosb
        loop  @b
@@:     ret
1
18.12.2016, 22:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2016, 22:03
Помогаю со студенческими работами здесь

Из текстового файла считать вторую строку и последнюю. Записать их в другой текстовой файл
Из текстового файла считать вторую строку и последнюю. Записать их в другой текстовой файл. Прошу...

Файл: Если количество строк больше заданного n, то создать новый файл и записать в него строки из данного файла.
Дан файл, содержащий строки. Если количество строк больше заданного n, то создать новый файл и...

Создать файл. Записать в него строку. Считать и вывести на экран
Файл создает и записывает в него текст, но на экран не выводит. В чем может быть ошибка? Помогите...

Открыть файл, имя которого задается с клавиатуры. Посчитать количество байт в этом файле. Первую половину прочитанного файла записать в другой файл.
ребят помогите! плиз!!1. Открыть файл, имя которого задается с клавиатуры. Посчитать и вывести на...


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

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