Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты данной рассылки Номер выпуска: | 1455 | Дата выхода: | 31.05.2011, 03:30 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 215 / 64 | Вопросов / ответов: | 4 / 4 | Вопрос № 183340: Здравствуйте! Прошу помощи в следующем вопросе: создать и переименовать файл. С созданием файла справился, а вот с переименованием не получается. Условия: DOS, TASM, COM-программа. В чем ошибся? Текст программы прилагаю. Вопрос № 183347: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: помогите ,пожалуйста , написать программу, считающую количество запятых в файле. Имя файла ввести с клавиатуры или передать как параметр командной строки. Чтение из файла орга... Вопрос № 183348: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: требуется написать 3 варианта заданной подпрограммы ( на встроенном ассемблере, с использованием модели памяти PASCAL (листинг) и без использования директивы MODEL (листинг... Вопрос № 183357: Уважаемые эксперты! У меня приближается сессия  . Из-за своего курсовика по тоэ, который я решил делать сам, у меня появились проблемы с другими предметами, в том числе предмет "Органи... Вопрос № 183340: Здравствуйте! Прошу помощи в следующем вопросе: создать и переименовать файл.
С созданием файла справился, а вот с переименованием не получается. Условия: DOS, TASM, COM-программа. В чем ошибся? Текст программы прилагаю.
Код : CSEG segment ASSUME CS:CSEG,DS:CSEG,ES:CSEG,SS:CSEG org 100h begin: mov ah,3Ch ;функция создания файла mov cx,00000000b ;указываем аттрибуты создаваемого файла: обычный файл mov dx,offset filename int 21h ;jc Error_create ;если файл не создан - сразу завершение программы ;call Ok_msg_create ;mov handle,ax xor ax,ax ;пауза int 16h mov ah,56h mov dx,offset filename mov ax,offset new_filename mov di,ax int 21h jc Error_rename call Ok_msg_rename jmp Quit_prog Error_rename: mov ah,09h mov dx,offset msg_error_rename int 21h jmp Quit_prog Ok_msg_rename proc mov ah,09h mov dx,offset msg_ok_rename int 21h ret Ok_msg_rename endp Quit_prog: ;mov al,32 mov ah,04ch int 21h ;int 20h filename db '_file.txt',0 new_filename db '_file1.txt',0 handle dw 0 msg_error_rename db 'Error! File not renamed.',0ah,0dh,'$' msg_error_create db 'Error! File not created.',0ah,0dh,'$' msg_ok_create db 'File created.',0ah,0dh,'$' msg_ok_rename db 'File renamed.',0ah,0dh,'$' CSEG ends end begin Отправлен: 25.05.2011, 10:32 Вопрос задал: Ханинёв Пётр Валерьевич (1-й класс) Всего ответов: 1 Страница вопроса » Отвечает Павел Юрьевич (10-й класс) : Здравствуйте, Ханинёв Пётр Валерьевич! В коде переименования файла Вы затираете AH. Вот так должно быть: Код : mov dx,offset filename mov ax,offset new_filename mov di,ax mov ah,56h int 21h Хоть автор ответа и дал ответ на непосредственный вопрос, но он не указал на существенную ошибку в программе, а именно, файл после создания/открытия необходимо закрывать. Привожу фрагмент кода, предоставленный в мини-форуме экспертом Зенченко Константином Николаевичем
Код : mov ah,3Ch;функция создания файла xor cx,cx;указываем аттрибуты создаваемого файла: обычный файл mov dx,offset filename int 21h mov handle,ax mov dx,offset msg_error_create jc Error_create;если файл не создан - сразу завершение программы mov dx,offset msg_ok_create Error_Create: call msg mov bx,handle mov ah,3eh int 21h xor ax,ax;пауза int 16h Редактирование ответа ----- • Отредактировал: Лысков Игорь Витальевич (Старший модератор) • Дата редактирования: 25.05.2011, 12:10 (время московское) Ответ отправил: Павел Юрьевич (10-й класс) Ответ отправлен: 25.05.2011, 10:40 Номер ответа: 267361 Россия, Челябинск ICQ # 197232777
Оценка ответа: 4 Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267361 на номер 1151 (Россия) | Еще номера » | Вопрос № 183347: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: помогите ,пожалуйста , написать программу, считающую количество запятых в файле. Имя файла ввести с клавиатуры или передать как параметр командной строки. Чтение из файла организовать блоком. Размер блока- по усмотрению. Желательны подробные комментарии. АСС-TASM. Заранее спасибо, с уважением Canijke. Отправлен: 25.05.2011, 14:22 Вопрос задал: Canijke Всего ответов: 1 Страница вопроса » Отвечает Зенченко Константин Николаевич (Модератор) : Здравствуйте, Canijke! Смотрите приложение. Имя файла можно ввести как в командной строке, так и в самой программе. вопросы задавайте в мини-форум.Удачи! Приложение: ----- Итерация от человека. Рекурсия — от Бога. — Л. Питер Дойч Ответ отправил: Зенченко Константин Николаевич (Модератор) Ответ отправлен: 26.05.2011, 17:54 Номер ответа: 267400 Украина, Киев Тел.: +38-097-238-60-03 Адрес: Украина, Киев Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267400 на номер 1151 (Россия) | Еще номера » | Вопрос № 183348: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: требуется написать 3 варианта заданной подпрограммы ( на встроенном ассемблере, с использованием модели памяти PASCAL (листинг) и без использования директивы MODEL (листинг)). Программу, вызывающую эти подпрограммы с указанием автора и варианта задания (5-ый). Задание- копирование строк. АСС- TASM. Очень рассчитываю на Вашу помощь ... Отправлен: 25.05.2011, 14:31 Вопрос задал: Canijke Всего ответов: 1 Страница вопроса » Отвечает Зенченко Константин Николаевич (Модератор) : Здравствуйте, Canijke! Программа на паскале(ТР7): Код : var a,b,c,d:string; procedure CopyStrA(var x,y:string);external; {$L q183348a} procedure CopyStrB(var x,y:string);external; {$L q183348b} procedure CopyStrC(var x,y:string); begin asm cld lds si,dword ptr x les di,dword ptr y lodsb stosb mov cl,al xor ch,ch rep movsb end end; begin Writeln('Canijke'); repeat write('Enter string:'); readln(d) until length(d)>0; CopyStrA(d,a); writeln('Result A:',a); CopyStrB(d,b); Writeln('Result B:',b); CopyStrC(d,c); writeln('Result C:',c); readln; end. С директивой MODEL и упрощенным описанием сегментов: Код : model small,pascal code public CopyStrA proc CopyStrA push bp mov bp,sp cld mov di,[bp+04] mov es,[bp+06] mov si,[bp+08] mov ds,[bp+10] lodsb stosb mov cl,al xor ch,ch rep movsb pop bp ret 8 endp end Полное описание сегмента: Код : _TEXT segment word public 'CODE' public CopyStrB assume cs:_TEXT proc CopyStrB push bp mov bp,sp cld mov di,[bp+04] mov es,[bp+06] mov si,[bp+08] mov ds,[bp+10] lodsb stosb mov cl,al xor ch,ch rep movsb pop bp ret 8 endp _TEXT ends end Компилятор TASM 2.0. вопросы задавайте в минифорумУдачи! ----- Итерация от человека. Рекурсия — от Бога. — Л. Питер Дойч Ответ отправил: Зенченко Константин Николаевич (Модератор) Ответ отправлен: 26.05.2011, 14:16 Номер ответа: 267396 Украина, Киев Тел.: +38-097-238-60-03 Адрес: Украина, Киев Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267396 на номер 1151 (Россия) | Еще номера » | Вопрос № 183357: Уважаемые эксперты! У меня приближается сессия . Из-за своего курсовика по тоэ, который я решил делать сам, у меня появились проблемы с другими предметами, в том числе предмет "Организация ЭВМ" . Поэтому очень прошу вас помочь с программой... Задание такое: Нужно написать собственное прерывание. 05h - прерывание, генерируемое при нажатии клавиш Shift+PrintScr;
действия, реализуемые программой обработки прерываний: Выдача звукового сигнала(печать символа с кодом 07h); Заранее огромное спасибо! Отправлен: 26.05.2011, 02:17 Вопрос задал: Митиоглов Борис (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич (Старший модератор) : Здравствуйте, Митиоглов Борис ! Вот Вам программа, которая устанавливает на время своей работы свой обработчик вектора 5 Обратите внимание, что если ее просто так запустить под ХР, то программа не будет работать, как надо!!! Это связано с тем, что система некоторые комбинации клавиш и просто клавиши, в том числе PrintScreen, считает служебными и не желает отдавать их программам. Но клавишу PrintScreen можно попросить у системы, если создать PIF-файл для EXE-программы. И там, в свойствах, на вкладке "Разное" выключить checkbox "PrtSc". Запускать программу надо будет с помощью PIF-файла. Код : .model small assume cs:code, ds:data, ss:AStack AStack segment stack dw 1024 dup (?) AStack ends data segment sPress db 0dh,0ah,'Press ESC for exit...$' Off_05 dw ? ;указатель на старый обработчик вектора 1ch Seg_05 dw ? data ends code segment main proc mov ax, data mov ds, ax ;ds = data mov ax, 3505h int 21h ;узнаем вектор 05h в es:bx mov Off_05, bx ;сохраним старый адрес в сегменте данных mov Seg_05, es push ds lea dx, new_05 ;установим новый адрес push cs ;обработчика прерывания 05h pop ds ;ds:dx mov ax, 2505h int 21h pop ds lea dx, sPress ;выведем приглашение нажать ESC mov ah, 9 int 21h wait_ESC: mov ah, 0 ;ждем int 16h cmp al, 1bh ;выходим по ESC jne wait_ESC ;воcстановим старый обработчик вектора 05h push ds ;ds lds dx, dword ptr Off_05 ;ds:dx - адрес старого вектора mov ax, 2505h int 21h ;восстановим! pop ds ;ds = data sti mov ax, 4c00h int 21h ;выход в ДОС main endp new_05 proc far ;подпрограмма отработки 05h push ax push dx mov dl, 7 ;код 7 "пищит" на спикере" mov ah, 2 int 21h pop dx pop ax ;восстановим регистры iret ;возврат из прерывания new_05 endp code ends end main ----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич (Старший модератор) Ответ отправлен: 26.05.2011, 10:30 Номер ответа: 267388 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Оценка ответа: 5 Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267388 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий