and al, 0fh
mov ah, 10
mul ah
mov dx, ax
lodsb
cmp al, '0'
jl GetNum2_error
cmp al, '9'
jg GetNum2_error
and ax, 0fh
add ax, dx
clc
;end GetNum2
jc EnterNewTimeDate_error
cmp ax, 12
jg EnterNewTimeDate_error
test ax, ax
je EnterNewTimeDate_error
shl ax, 5
or di, ax
lea si, InData+6
;call GetNum 4
;call GetNum 2
lodsb
cmp al, '0'
jl GetNum2_error
cmp al, '9'
jg GetNum2_error
and al, 0fh
mov ah, 10
mul ah
mov dx, ax
lodsb
cmp al, '0'
jl GetNum2_error
cmp al, '9'
jg GetNum2_error
and ax, 0fh
add ax, dx
clc
;end GetNum2
jc GetNum4_ret
mov bp, 100
mul bp
push ax
;call GetNum2
lodsb
cmp al, '0'
jl GetNum2_error
cmp al, '9'
jg GetNum2_error
and al, 0fh
mov ah, 10
mul ah
mov dx, ax
lodsb
cmp al, '0'
jl GetNum2_error
cmp al, '9'
jg GetNum2_error
and ax, 0fh
add ax, dx
clc
;end GetNum2
pop bp
jc GetNum4_ret
add ax, bp
clc
;end GetNum4
jc EnterNewTimeDate_error
sub ax, 1980
jl EnterNewTimeDate_error
cmp ax, 119
jg EnterNewTimeDate_error
shl ax, 9
or di, ax
lea dx, MessageEnterTime
mov ah, 9
int 21h
lea dx, InBuffer
mov ah, 0ah
int 21h
cmp byte ptr InCount, 8
jne EnterNewTimeDate_error
lea si, InData
;call GetNum2
lodsb
cmp al, '0'
jl GetNum2_error
cmp al, '9'
jg GetNum2_error
and al, 0fh
mov ah, 10
mul ah
mov dx, ax
lodsb
cmp al, '0'
jl GetNum2_error
cmp al, '9'
jg GetNum2_error
and ax, 0fh
add ax, dx
clc
;endGetNum2
jc EnterNewTimeDate_error
cmp ax, 23
jg EnterNewTimeDate_error
shl ax, 11
mov cx, ax
lea si, InData+3
;callGetNum2
lodsb
cmp al, '0'
jl GetNum2_error
cmp al, '9'
jg GetNum2_error
and al, 0fh
mov ah, 10
mul ah
mov dx, ax
lodsb
cmp al, '0'
jl GetNum2_error
cmp al, '9'
jg GetNum2_error
and ax, 0fh
add ax, dx
clc
;end GetNum2
jc EnterNewTimeDate_error
cmp ax, 59
jg EnterNewTimeDate_error
shl ax, 5
or cx, ax
lea si, InData+6
;call GetNum2
lodsb
cmp al, '0'
jl GetNum2_error
cmp al, '9'
jg GetNum2_error
and al, 0fh
mov ah, 10
mul ah
mov dx, ax
lodsb
cmp al, '0'
jl GetNum2_error
cmp al, '9'
jg GetNum2_error
and ax, 0fh
add ax, dx
clc
;end GetNum2
jc EnterNewTimeDate_error
cmp ax, 59
jg EnterNewTimeDate_error
shr ax, 1
or cx, ax
mov dx, di
clc
;end EnterNewTimeDate
jc MError
mov ax, 5701h
int 21h
lea si, MessageNew
;call PrintTimeDate
push dx
mov dx, si
mov ah, 9
int 21h
pop dx
push dx
push cx
mov ax, dx
and ax, 001fh
aam
or ax, '00'
mov day_pos, ah
mov day_pos+1, al
mov ax, dx
and ax, 01e0h
shr ax, 5
aam
or ax, '00'
mov month_pos, ah
mov month_pos+1, al
mov ax, dx
shr ax, 9
add ax, 1980
mov cl, 100
div cl
push ax
aam
or ax, '00'
mov year_pos, ah
mov year_pos+1, al
pop ax
mov al, ah
aam
or ax, '00'
mov year_pos+2, ah
mov year_pos+3, al
pop cx
mov ax, cx
shr ax, 11
aam
or ax, '00'
mov hours_pos, ah
mov hours_pos+1, al
mov ax, cx
and ax, 07e0h
shr ax, 5
aam
or ax, '00'
mov minutes_pos, ah
mov minutes_pos+1, al
mov al, cl
and al, 1fh
shl al, 1
aam
or ax, '00'
mov seconds_pos, ah
mov seconds_pos+1, al
lea dx, MessageDateTime
mov ah, 9
int 21h
pop dx
;end PrintTimeDate
mov ah, 3eh
int 21h
;jnc NoError
MError:
lea dx, Error
mov ah,09h
int 21h
NoError:
mov ax,4c00h
int 21h
EnterNewTimeDate_error:
stc
ret
GetNum4_ret:
ret
GetNum2_error:
stc
ret
FINISH_PRG:
END BEGIN

Старые значения даты и времени файла MYFILE.txt

Новые значения даты и времени файла MYFILE.txt

В ходе данной расчетно-графической работе были изучены возможности операционной системы MS-DOS и основы системного программирования с помощью ассемблера. В результате разработки данной работы была создана программа, позволяющая изменить дату и время создания файла MYFILE.txt и вывести их старые и новые значения.
Абель П. Ассемблер. Язык и программирование для IBM PC / Пер. с англ. – К.: Век+, М.: ЭНТРОП, 2005. – 736 с.
Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT: Пер. с англ./Предисл. Н.В.Гайского. - М.: Финансы и статистика, 1991.- 544 с.: ил.
Шнайдер А. Язык ассемблера для персонального компьютера фирмы IBM: Пер. с англ.- М.: Мир, 1988 2, 0 - 406 с., ил.