Вопрос № 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
Хоть автор ответа и дал ответ на непосредственный вопрос, но он не указал на существенную ошибку в программе, а именно, файл после создания/открытия необходимо закрывать. Привожу фрагмент кода, предоставленный в мини-форуме экспертом Зенченко Константином Николаевичем
Код :
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 Страница вопроса »
Смотрите приложение. Имя файла можно ввести как в командной строке, так и в самой программе. вопросы задавайте в мини-форум. Удачи!
Приложение:
----- Итерация от человека. Рекурсия — от Бога. — Л. Питер Дойч
Ответ отправил: Зенченко Константин Николаевич (Модератор)
Ответ отправлен: 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 Страница вопроса »
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); Заранее огромное спасибо!
Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, Митиоглов Борис ! Вот Вам программа, которая устанавливает на время своей работы свой обработчик вектора 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 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.