Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.05.2015
Сообщений: 1
1

Не записывает данные в файл

22.05.2015, 17:05. Показов 1204. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Я только начал изучать ассемблер. Помогите пожалуйста разобраться почему не хотят записываться данные и время в файл. Все остальное вроде работает как надо: ввод чисел, нахождение максимального, создание файла.
Вот код:

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
model small
 .stack 400h 
.data
    c10     dw  10
    c6  equ 6
    h   db  ?           ; часы
    m   db  ?           ; минуты
    s   db  ?           ; секунды
    massiv  dw  10 dup(?)
    msg1    db  13,10,"Vvedite  10 chisel cherez probel razmernost'u 000...255 ",13,10, "Posle najmite enter", 13,10,"$"
    msg2    db  13,10,"Maksimal'noe chislo = $"
    msg3    db  13,10,"Massiv: "
    msg4    db  13,10,"Vremya: "
    msg5    db  13,10,"Yazik programmirovania: Assembler"
    msg6    db  ":"
    msg7    db  13,10,"Rezultat zapisan v fail << rezult.txt >>",13,10,"PROBEL dlya vihoda",'$'
    f_n db  'prim.txt',0        ; имя файла в который сохранится ответ
    w_s db  c6 dup (?), ' ' ; строка для вывода цифр в файл
    
    
.code
start:
    mov ax,@data
    mov ds,ax
    mov ah,09h      ; вывод приглашения для ввода чисел
    lea dx,msg1
    int 21h
    mov di,0            ; в di - max
    ; Ввод массив с клавиатуры
        xor cx,cx               ; обнуляем cx
    xor dx,dx           ; в dx - очередное число
input_loop:
    mov ah,01h      ; ввод символа
    int 21h
    cmp al,0dh          
    je chislo           
    cmp al,20h          ; если пробел
    je chislo           ; то занести число в массив
    sub al,30h          ; вычитаем '0'
    mov cl,al           
    mov ax,dx           
    mul c10         ; умножаем на 10
    xor ch,ch
    add ax,cx           ; добавляем цифру из al
    mov dx,ax           ; число снова в dx
    jmp input_loop  ; снова вводим число
chislo:
    mov bx,cx           
    shl bx,1            
    mov massiv[bx],dx   
    inc cx          
    
    cmp dx,di           ; сравниваем число с максиальным
    jg maximum      ; если оно больше, то jmp на maximum
    jmp chislo_cont     ; иначе jmp на chislo_cont
    
maximum:
    mov di,dx           ; запоминаем максимальное число в di
chislo_cont:
    xor dx,dx           ; dx в ноль
    cmp cx,20           
    je end_input        
    cmp al,0dh          ; если был нажат enter
    je end_input        ; то конец ввода
    jmp input_loop
end_input:
    mov ah,09h      ; вывод на экран msg2
    lea dx,msg2
    int 21h
    mov ax,di           
    call output         ; выводим это число
    jmp outputfail              ; выводим результат в файл
    
    mov ah,4ch          ; завершение программы
    int 21h
output proc             ; процедура вывода числа, находящегосы в ax
    xor cx,cx           ; счетчик цифр
div_loop:
    xor dx,dx           ; подготовка к делению
    div c10         ; деление
    add dx,30h          ; в dx - ASCII-код остатка от деления
    push dx         ; сохраняем его в стеке
    inc cx          ; инкремент счетчика
    cmp ax,0            ; деление, покуда частное не нулевое
    je out_loop
    jmp div_loop
    
    ; Процедура записи времени
time:
        mov ah,2Ch          ; функция возврата времени
        int 21h         ; выводим время
        mov h,ch            ; в h часы
        mov m,cl            ; в m минуты
        mov s,dh            ; в s  секунды
    ret                 ; возвращаемся к основной программе       
    
out_loop:               
    pop dx          
    mov ah,02h      ; и выводим его на экран
    int 21h
    loop out_loop       
    ret
    
    outputfail:
    ; Создаём файл
        mov ah,3Ch          ; функция создания файла в текущем каталоге
        lea dx,f_n          ; в dx имя создаваемого файла
        xor cx,cx           ; обнуляем cx
        int 21h         
        mov bx,ax               
        ; Записываем в файл
        mov ah,40h          ; функция записи в файл
        mov cx,msg3-msg2        
        lea dx,msg2         
        int 21h         ; записываем в файл
    mov ax,di       ; в ax цифру которую надо вывести
    mov ah,40h          ; функция записи в файл
        mov cx,c6           
        lea dx,w_s          ; в dx адрес буфера, содержащего записываемые данные
        int 21h         ; записываем в файл  
        
        ;new
        mov ah,40h          ; функция записи в файл
        mov cx,msg4-msg3        ; число записываемых байтов в cx
        lea dx,msg3         
        int 21h         ; записываем в файл      
    
    write:
        push    cx          
        mov ax,massiv[di]       ; записываем в ax элемент массива
    
            mov ah,40h      ; функция записи в файл
            mov cx,c6+1     ; число записываемых байтов в cx
            lea dx,w_s      
            int 21h     
        add di,2            ; di+1
        pop cx          ; извлекаем сx из стека
    loop write              ; повторяем цикл
        mov ah,40h          ; функция записи в файл
        mov cx,msg5-msg4        ; число записываемых байтов в cx
        lea dx,msg4         ; в dx адрес буфера, содержащего записываемые данные
        int 21h         
        
    call    time                ; записываем время
    mov al,h                
    mov ah,0                
    
        mov ah,40h          ; функция записи в файл
        mov cx,2            
        lea dx,w_s+4        
        int 21h         
        mov ah,40h          
        mov cx,msg7-msg6        
        lea dx,msg6         
        int 21h         
    mov al,m                
    mov ah,0                
    
        mov ah,40h          ; функция записи в файл
        mov cx,2            
        lea dx,w_s+4        
        int 21h         
        mov ah,40h          
        mov cx,msg7-msg6        
        lea dx,msg6         
        int 21h         
    mov al,s                
    mov ah,0                
    
        mov ah,40h          ; функция записи в файл
        mov cx,2            ; число записываемых байтов в cx
        lea dx,w_s+4        
        int 21h         ; записываем в файл
        mov ah,40h          
        mov cx,msg6-msg5        
        lea dx,msg5         ; в dx адрес буфера, содержащего записываемые данные
        int 21h         ; записываем в файл
 
        ; Закрываем файл
    mov ah,3Eh              ; функция записи в файл
    int 21h             ; закрываем файл
wait_exit:
    mov ah,09h              ; функция вывода на экран
    lea dx,msg7             ; помещаем в dx сообщение, которое надо вывести
    int 21h             ; прерывание дос (выводит на экран сообщение)
    ; Закрываем окно программы
spacebar:
    mov ah,0                ; записываем в ah 0
    int 16h             ; принемаем нажатия кнопки клавиатуры
    cmp al,20h              
    jne spacebar            
exit:
    mov ax,4C00h            
    int 21h             
 output endp
end start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2015, 17:05
Ответы с готовыми решениями:

Не записывает данные в файл
Здравствуйте, использую PHP 5.5.38 в связке с VkAPI. Собственной вот листинг нерабочего кода. ...

Не записывает данные в файл
не могу понять почему ничего в файле не меняется. данные в файле: BSUIR petia 16 BSUIR petrov...

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

Функция не записывает в файл данные
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

1
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
22.05.2015, 17:20 2
Цитата Сообщение от junia20 Посмотреть сообщение
mov al,m
mov ah,0
mov ah,40h ; функция записи в файл
Вот подобного рода сочетания говорят о том, что ты не особо думаешь, что делаешь.
Стоило в ah записывать ноль, чтобы тут-же затереть этот ноль числом 40h ?

Добавлено через 1 минуту
Цитата Сообщение от junia20 Посмотреть сообщение
mov ax,di ; в ax цифру которую надо вывести
mov ah,40h ; функция записи в файл
Еще пример того-жа самого. В ax засунем цифру (или что у тебя там ?) и тут-же затрем у нее старший байт. Типа выкрасим и выбросим.

Добавлено через 3 минуты
Что-то меня пробивает на де-жа-вю. Ты с Ruta не в одной группе числишься ?
Просто там тоже было
Цитата Сообщение от junia20 Посмотреть сообщение
msg4 db 13,10,"Vremya: "
msg5 db 13,10,"Yazik programmirovania: Assembler"
Вот эта тема
Вычислите среднее арифметическое элементов массива. Числа представлены в формате с фиксированной точкой
Вот я там намучился.

Добавлено через 3 минуты
Можешь смело драть оттуда.
0
22.05.2015, 17:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2015, 17:20
Помогаю со студенческими работами здесь

Программа не записывает данные в файл
Программа не записывает данные в файл помогите исправить #include&lt;iostream&gt; #include &lt;stdio.h&gt;...

fstream не записывает данные в файл
Если к примеру открываю файл так : fstream io; io.open(&quot;test.txt&quot;); то читает из файла хорошо,...

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

Функция addTextFile неправильно записывает данные в файл
Здраствуйте, проблема с функцией addTextFile, при выборе должно додавать данные в начало / конец...


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

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