Вывод даты (день месяца) в файл - Assembler
Формулировка задачи:
Всем доброго времени суток.
в бинарный файл выводит дату не так как нужно (N.05.2016)
предполагаю что просто число не "обработано" для вывода (вывод осуществляется в бинарный файл lab8end.txt)
вот собственно и проблемка!
вот файлы для программы :
.model small
.stack 100h
.data
c dw ?
i dw ?
j dw ?
razmer equ 4
razmer_1 equ 9
massiv db 10 dup(?),'$'
min db 10 dup(?),'$'
hor db 4 dup(':'),'$'
tim db 10 dup(?),'$'
time db 10 dup('.'),'$'
mas db 35 dup(?),'$'
sum_1 db 20 dup(' '),'$'
handle dw 0
sum dw 0
hour db 10 dup('.'),'$'
fname db 'lab8end.txt',0
FileName db 'Massiv.txt',0
Ent db 0dh,0ah,10 dup(?),'$'
Summa_2 db 0dh,0ah,'Kolichestvo polojitel elementov: ','$'
FileNamee db 0dh,0ah,'File name: ','$'
Date db 0dh,0ah,'Date: ',5 dup(?),'$'
Timeee db 0dh,0ah,'Time: ',5 dup(?),'$'
Suuum db 0dh,0ah,'Kolichestvo polojitel elementov: ',31 dup(?),'$'
.code
timee proc
mov ah, 2aH
int 21h
ret
timee endp
start:
mov ax,@data
mov ds,ax
mov ah, 3dh
mov al, 0
lea dx, FileName ; открываем файл, в котором находится матрица
int 21h
mov bx, ax
xor cx, cx
xor dx, dx
mov ax, 4200h
int 21h
mov ah, 3fh
mov cx, 40 ; считываем матрицу
lea dx, mas-5
int 21h
mov ah, 09h
lea dx, mas ; выводим матрицу на консоль
int 21h
mov c, 0
mov ah,0
mov bp,0
mov si,0
mov i, 0
mov sum,0
mov j, 0
mov di,-1
summa:
;сумма столбцов
cmp bp, razmer
je exit_1
mov ax,razmer_1
mul i
mov bx,ax
mov al,mas[bx][si]
sub al,30h ; высчитываем сумму столбцов матрицы
mov ah,0
sal ax,15
cmp ax,0
je loop_2
inc bp
inc i
jmp summa
loop_2:
inc bp
inc i
inc c
jmp summa
exit_1:
cmp si, 6
je exit_3
inc si
inc si
mov i, 0
mov bp,0
jmp summa
exit_3:
mov ax, c
mov cx,10
mov dx,-1
push dx
sym_3:
cmp ax,0
je symb_3
mov dx,0
div cx
push dx
jmp sym_3
symb_3:
pop dx
cmp dx, -1
je loop_1
inc di
add dl,30h
mov byte ptr[sum_1+di],dl
jmp sym_3
loop_1:
mov sum,0
inc di
inc si
inc si
mov bp,0
mov i,0
cmp si,razmer+2
jg exit_2
jmp summa
exit_2:
mov ah, 09h
lea dx, Summa_2
int 21h
mov ah, 09h
lea dx, sum_1
int 21h
;День
call timee
add dl,30h ; получаем день, когда был создан файл
mov byte ptr[hour],dl
;Месяц
call timee
add dh,30h ; получаем месяц, когда был создан файл
mov byte ptr[time],dh
;Год
call timee
mov ax,cx
mov cx,10 ; получаем год, когда был создан файл
mov si,-1
mov dx,-1
push dx
sym:
cmp ax,0
je symb
mov dx,0
div cx
push dx
jmp sym
symb:
pop dx
cmp dx, -1
je viv
inc si
add dl,30h
mov byte ptr[tim+si],dl
jmp symb
viv:
;Часы
mov ah, 2ch
int 21h
mov al,ch
mov ah,0 ; получаем часы, когда был создан файл
mov cx,10
mov si,-1
mov dx,-1
push dx
sym_1:
cmp ax,0
je symb_1
mov dx,0
div cx
push dx
jmp sym_1
symb_1:
pop dx
cmp dx, -1
je viv_1
inc si
add dl,30h
mov byte ptr[hor+si],dl
jmp sym_1
viv_1:
;Минуты
mov ah, 2ch
int 21h
mov al, cl
mov ah, 0
mov cx,10 ; получаем минуты, когда был создан файл
mov si,-1
mov dx,-1
push dx
sym_2:
cmp ax,0
je symb_2
mov dx,0
div cx
push dx
jmp sym_2
symb_2:
pop dx
cmp dx, -1
je begin
inc si
add dl,30h
mov byte ptr[min+si],dl
jmp sym_2
Mass proc
mov ah, 40h
mov bx, handle ; процедура вывода
int 21h
ret
Mass endp
begin:
mov ah, 3ch
mov cx, 0
lea dx, fname ; создаём файл
int 21h
mov handle,ax
lea dx, mas
mov cx, 35 ; записываем в файл матрицу
call Mass
lea dx, FileNamee
mov cx, 13
call Mass
lea dx, FileName
mov cx, 11
call Mass ; записываем в файл название файла, где хранится матрица
lea dx, Date
mov cx, 13
call Mass
lea dx, hour
mov cx, 2
call Mass ;дней
lea dx, time
mov cx, 2
call Mass ;месяц
lea dx, tim
mov cx, 5
call Mass ; rog
lea dx, Timeee
mov cx, 13
call Mass
lea dx, hor
mov cx, 3
call Mass ; часы
lea dx, min
mov cx, 5
call Mass ; мину
lea dx, suuum
mov cx, 35
call Mass
lea dx, sum_1
mov cx, 15
call Mass ; записываем в файл сумму нечётных элементов в каждом столбце
mov ah, 3eh ; закрываем файл
mov bx, handle
int 21h
mov ax, 4c00h
int 21h
end start ; конец программыРешение задачи: «Вывод даты (день месяца) в файл»
textual
Листинг программы
day db 10 dup('.'),'$'
Объяснение кода листинга программы
- Переменная
dayсодержит значение 10. - Дубликатор
.повторяет символ '.' 10 раз. - Знак доллара '$' обозначает конец строки.
- В результате в файл выводится строка
..........(10 точек и символ конца строки).