Консультация № 178288
08.05.2010, 19:01
0.00 руб.
0 1 1
В файле file.txt хранится следующая информация: DIR (команда MS DOS). Выполнить эту команду при запуске программы. (Для чтения файла использовать формулу 14)

Приложение:
32-х разрядная операционная система Vista. Пооцессор AMD. Не знаю какой ассемблер мы используем, могу тока часть от одной из программ выслать вам. Microsoft Windows [Версия 6.0.6002]
(C) Корпорация Майкрософт, 2006. Все права защищены.

C:\Users\Администратор>debug
-a100
17C0:0100 jmp 12d
17C0:0102 db 03 {диск C}
17C0:0103 db 'file' {имя файла}
17C0:0107 db 'txt' {расширение}
17C0:010A dw 0000 {номер блока}
17C0:010C dw 0000 {размер записи}
17C0:010E dw 0000,0000 {размер файла}
и т.д.

Обсуждение

давно
Посетитель
7438
7205
09.05.2010, 02:45
общий
это ответ
Здравствуйте, Джамалудинов Рустам.
Вот Вам программа, читающая из файла file.txt в текущем каталоге первые три байта (там должно быть 'dir')
Чтение выполняется при помощи функций, использующих FCB
Затем выполняется command.com c параметром '/c dir'
Код:
;В файле file.txt хранится следующая информация: DIR (команда MS DOS). 
;Выполнить эту команду при запуске программы.
;(Для чтения файла использовать формулу 14)
.model tiny
.code
.startup
jmp start
;FCB для операции чтения файла
FCB: db 03h ;диск C
db 'file ' ;имя файла
db 'txt' ;расширение
dw 0 ;номер блока
RecSize dw 0 ;размер записи
dw 0,0 ;размер файла
dw 0 ;дата
db 10 dup (0) ;резерв
CurRec dw 0 ;блоковый номер записи
dw 0,0 ;файловый номер записи

;путь командного интерпретатора, которого будем запускать
command db 'c:\windows\system32\command.com',0
;строка параметров (первый байт - длина параметров)
parm db 6,'/c '
;сюда скопируем три первых байта (dir) из файла
comstr db ' ',0dh
;блок EPB для запуска command.com
EPB dw 0
comline dw 0, 0
FCB1 dw 0, 0
FCB2 dw 0, 0

sErrOpen db 'Open error$'
sErrRead db 'Read error$'

start:
lea dx, FCB ;открываем файл
mov ah, 0fh
int 21h
cmp al, 0
jne ErrorOpen ;проверка на ошибку

mov RecSize, 3 ;читаем 3 байта в DTA по адресу 80h
mov ah, 14h ;dx - открытый FCB
int 21h
cmp al, 0
jne ErrorRead ;проверка на ошибку

mov ah, 10h ;закрываем FCB
int 21h

;перед тем, как запустить command.com,
;необходимо урезать свою память
mov bx, 1000h ;оставляем себе 64к
mov ah, 4ah
int 21h

mov si, 80h ;адрес DTA (команда из файла)
lea di, comstr ;место в строке параметров
mov cx, 3 ;длина - 3 байта
rep movsb ;копируем

mov comline, offset parm ;вставляем в EPB длинный указатель
mov comline+2, cs ;на строку параметров

lea dx, command ;ds:dx - указатель на программу
lea bx, EPB ;es:bx - указатель на EPB
mov ax, 4b00h ;функция запуска программы
int 21h
Exit:
mov ax, 4c00h ;выход в ДОС
int 21h

;обработка ошибок
ErrorOpen:
lea dx, sErrOpen
jmp Print
ErrorRead:
lea dx, sErrRead
Print:
mov ah, 9
int 21h
jmp Exit

end
5
мы пользуемся немного другими командами, но видимо это уже наша вина. Спасибо за помощь, выручили!
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа