ребят есть программа работает всё норм только нужно маленькое усовершенствование не могу сделать ((((
введите имя сохраняемого файла:_!
если нет, сохранить в itog.dat и вывести на экран имя файла
если есть кто сможет попробывать сделать кину код проги!!!
((((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((
Код:
CLICK DB 'нажмите… <ENTER> для продолжения...$'
_SEG_IN DB 0dh, 0ah,'введите адрес сегмента в 16-ой системе счисления:$'
_OFF_IN DB 'Введите смещение в сегменте :$'
_rd_num DB 'Количество байт для чтения:$'
out_FAIL DB 0dh, 0ah,'распечатать в файл : y/n ? $'
error DB 'Ошибка повторите заново ...$'
_BASIS DB '-------------Дапм памяти -----------------',0dh, 0ah, '$'
TABLEHEX DB '0123456789abcdef'
DB '0123456789ABCDEF', 0
char_buff DB 0 ; временный буфер
tempstr DB 25 dup(0), '$' ;строка буфера (начальное смещение)
dump_seg DW ? ; Начальный адрес сегмента памяти
dump_off DW ? ; Начальное смещение в сегменте памяти
dump_num DW ? ; количество байт для чтения
file_name DB 'ITOG.dat', 0
stream DW 1 ; (t.e. by default)
new_line DB 0dh, 0ah, '$'
lines DB 0
Need DB 0
;; code part of program
pcode:
СамаПрограмма ;
Starting:
LEA dx, new_line ; адрес строки с кодами перевода на * new line
CALL OUTPUT_STRING ; на новую строку
@rep:
CALL CLEARE_SCR
;----------------------------------------------------------------------------------------------------------
MOV dx, offset _seg_in ; запрос на ввод адреса сегмента
CALL OUTPUT_STRING ; сообщение об этом
CALL input_hex ; ввод числа в hex формате
JC @error ; если ввели недопустимое число
MOV dump_seg, ax ;иначе запоминаем адрес сегмента
;------------------------------------------------------------------------------------------------------------
MOV dx, offset _off_in ; запрос на ввод смещения сегмента
CALL OUTPUT_STRING ; сообщение об этом
CALL input_hex ; ввод числа в hex формате
JC @error ; если ввели недопустимое значение
MOV dump_off, ax ; иначе запоминаем адрес смещения
;-------------------------------------------------------------------------------------------
MOV dx, offset _rd_num ; запрос на ввод числа вывод. байт
CALL OUTPUT_STRING ; сообщение об этом
CALL input_hex ; ввод числа в hex формате
JC @error ; если ввели недопустимое число
MOV dump_num, ax ; иначе запомнить количество байт
LEA dx, out_FAIL ; запрос о пути следования дампа
CALL OUTPUT_STRING ; сообщение об этом
CALL getch ; считаем символ с клавиатуры
CMP al, 'Y' ;
JE file_stream ;
CMP al, 'y' ;
JE file_stream ;
file_stream:
LEA dx, file_name ; загрузка имени файла для ввода
CALL fopen ; открываем но не проверяем
MOV stream, ax ; новый номер для ввода
;------------------------------------------------------------------------------------------------------------------
;==============================================================;
;создание файла ;
; ds:dx - адрес ASCII-строки с именем файла ;
; ax-тип открытия (запись) ;
; returns: ax – номер файла если всё впорядке ??????? ;
;==============================================================;
fopen PROC
PUSH cx ; cx -> стек
MOV ah, 3ch ; открываем файл для записи
MOV cx, 20h ; количество записываемых байт
INT 21h
POP cx ; стек -> cx
RET ; выход
fopen ENDP
;=========================;
; закрытие файйла ;
; ax –файловый handler ;
;=========================;
fclose PROC
PUSH bx ; bx -> стек
MOV bx, ax ; bx = ax
MOV ah, 3eh ; функция закрытия файла
INT 21h
POP bx
RET ; выход
fclose ENDP
;=========================;
; чтение символа с консоли ;
; return: ah - zero ;
; al - read char ;
;=========================;
getch PROC
MOV ah, 07h ; считываем символ с клавиатуры
INT 21h
XOR ah, ah ; ah = 0
RET
getch ENDP