Вобщем хочу написать простенькую маленькую прогу чтобы при запуске она копировала файл из одной папки в другую (позже усовершенствовать (с одного компьютера на другой)) Прочесть файл могу А вот записать как-то не получается Думаю это 40h функция 21го прерывания Вот только не работает нифига Код частично передрал с книги Калашникова (а откуда он так точно CX определяет тоже не понимаю) Заранее благодарен если поможете CSEG segment assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG org 100h BEGIN: mov ax,3D02h mov dx,offset file_open int 21h jc bad mov Handle,ax mov bx,ax mov ah,3fh mov cx,0fde8h mov dx,offset Buffer int 21h mov ah,3eh mov bx,Handle int 21h mov ax,4002h mov bx,handle mov cx,0FDE8h mov dx,offset file_save int 21h jc bad mov dx,offset mess1 mov ah,9 int 21h int 20h bad: mov dx,offset mess2 jmp quit good: mov dx,offset mess1 jmp quit quit: mov ah,9 int 21h int 20h Handle dw 0 file_open db 'd:\hiew\license.txt',0 file_save db 'd:\license.txt',0 mess1 db 'OK!$' mess2 db 'NOT!$' Buffer equ $ CSEG ends end BEGIN
Дык ведь у Калашникова про writefile и прочее не написано Вот и попробовал А где еще такую же простую и доступную инфу взять? Потом почемубы и в этом не разобраться... хотя если сильно геморно тогда оно конечно можно и более простой вариант поискать (Вот только где искать то)
To OlegA11 Вообще не в тему : Автор топика хотел узнать про запись в файл в досу (смотря на его код) а вы ему подсовываете винду с ее апишками.. Для этого надо создать файл и записать в него то, что тебе надо для создания файла : mov ah,3ch mov cx, ;- атрибуты файла. а так же в DSХ поместить указатель на имя файл в виде строки ASCIIZ int 21h Возвращает, в случае успешного завершения, в AX дескриптор файла Для записи в файл : mov ah,40h mov bx, ;- дескриптор файла mov cx, ;- число байт которых надо записать а так же в DSX указатель на буфер , где находится инфа для записи. int 21h При успешном завершении в AX возвратится число байт. во первых советую вначале делать так : push cs pop ds код приблизительно такой mov ah,3ch mov cx,0 mov dx,offset filename ; ИМЯ А не полный путь, filename db 'file.txt',0 int 21h mov [handle],ax ... mov bx,[handle] mov cx, 10 ;(10 byte или измеряй типа Strlen = $-Str ) mov dx,offset str mov ah,40h int 21h .. ret
Спасибо TermoSINteZ Именно это и надо было )) OlegA11 Win Подождет Разберусь сначала с Дос но все равно спасибо
Win Подождет Разберусь сначала с Дос но все равно спасибо Да умер он уже, что его копать... Да и сложнее это намного. Под Win32 легче писать на MASM'e
OlegA11 Да умер он уже, что его копать... Ну и что что умер. Я вот тож под уже умерший дос 4 месяца писал и не жалею. Да и сложнее это намного. Да нет там ничего сложного. А для начинающего возможностей в ос покопаться больше. Никтож там ничего не запрещает.
mov ax,3D00h mov dx,offset file_open int 21h mov handle2,ax jc bad В данной конструкции на открытие есть сбой или нет ? Если нет то почему после выполнения выполняется jc bad Заранее спасибо
значит так.. если имя файла верно и такой файл есть, то ты открываешь файл на чтение.. возможные коды ошибок : 01h,02h,03h,04h,05h,0Ch (возвращаемое значение в AX если не забыл) jc - если перенос (флаг CF = 1) при чем тут эта проверка - я не пойму
Попробуй почитать книгу С.Зубкова там все написано,ну а вообще запись реализуется через функцию 13h,что кладется в другие регистры уже не помню.
2 brat315 13h это функция удаления файла В остальном разобрался и код выглядит в итоге так создаю файл mov ah,3ch mov cx,0 mov dx,offset file_save int 21h jc bad mov handle,ax Открываю существующий файл mov ax,3d00h xor cx,cx mov dx,offset file_open int 21h mov handle2,ax jc bad Читаю файл mov ah,3fh mov bx,handle2 mov cx,9999 int 21h cmp ax,0 Записываю прочтенное в созданный mov ah,40h mov bx,handle mov cx,9999 mov dx,offset file_open int 21h jc bad cmp ax,cx Вопрос теперь в том как записывать файлы размером больше 9999 ? (ну того что в cx) Может за loop'ить как то надо ?
2 brat315 13h это функция удаления файла В остальном разобрался и код выглядит в итоге так создаю файл mov ah,3ch mov cx,0 mov dx,offset file_save int 21h jc bad mov handle,ax Открываю существующий файл mov ax,3d00h xor cx,cx mov dx,offset file_open int 21h mov handle2,ax jc bad Читаю файл mov ah,3fh mov bx,handle2 mov cx,9999 int 21h cmp ax,0 Записываю прочтенное в созданный mov ah,40h mov bx,handle mov cx,9999 mov dx,offset file_open int 21h jc bad cmp ax,cx Вопрос теперь в том как записывать файлы размером больше 9999 ? (ну того что в cx) Может за loop'ить как то надо ?