Сделал небольшую прогу - она должна запускать программу в зависимости от некоторых условий. Работает только как-то непонятно.
Если ввести имя проги с клавиатуры - то все нормально работает - нужный файл загружает.А если прописать ее в autoexec.bat - то при загрузке выдает ошибку и не грузит ничего (в AX 0001h). Это я на своем домашнем компе проверял. А сегодня на рабочем проверил - тоже самое!!!!!!!!!!!!!
В интернете искал подобное - нашел даже исходники от разных умных людей - и таже самая история! Проверял на Win98 SE.
text segment 'code'
assume cs:text,ds:text
org 100h
> В интернете искал подобное - нашел даже исходники от разных > умных людей - и таже самая история! Проверял на Win98 SE.
взял твой исходник, построил, кинул в корень, туда же кинул ARJ.EXE которого обозвал PROC.COM, в autoexec.bat дописал
test.com
pause
перезагрузился - все работает, показывает список ключей ARJ
так что все у тебя правильно
может у тебя PROC.COM не в корне - так укажи к нему полный путь
PS: windows 98 SE RUS
Люди умные подскажите15.10.01 14:41 Автор: Rook <Alex Sergeev> Статус: Member
Мне кажется, что это из-за не заданной рабочей директории, в при запуске из автоэкзека раб. дир. - это корень.
Попробуй прописать в path=c:\путь\к\программе.
Что-то подобное было сказано ниже, но там как то тяжеловесно.
> Сделал небольшую прогу - она должна запускать программу в > зависимости от некоторых условий. Работает только как-то > непонятно. > Если ввести имя проги с клавиатуры - то все нормально > работает - нужный файл загружает.А если прописать ее в > autoexec.bat - то при загрузке выдает ошибку и не грузит > ничего (в AX 0001h). Это я на своем домашнем компе > проверял. А сегодня на рабочем проверил - тоже > самое!!!!!!!!!!!!! > > В интернете искал подобное - нашел даже исходники от разных > умных людей - и таже самая история! Проверял на Win98 SE. > > text segment 'code' > assume cs:text,ds:text > org 100h > > main_ proc > mov ah,4ah > mov bx,100 > int 21h > > to_: > mov ax,offset com_line > mov bx,offset params > mov [bx]+2,ax > mov ax,cs > mov [bx]+4,ax > > mov ah,4bh > mov al,0 > > mov bx,offset params > mov dx,offset fname > > int 21h > > mov ax,4c00h > int 21h > > fname db 'proc.com',0 > com_line db 0,13 > params dw 7 dup (0) > > main_ endp > text ends > end main_
Люди умные подскажите15.10.01 11:45 Автор: Chingachguk <Chingachguk> Статус: Member
Попробуй int 2eh !
> Сделал небольшую прогу - она должна запускать программу в > зависимости от некоторых условий. Работает только как-то > непонятно. Насколько я понял, ты хочешь запускать внешнюю прогу. Но !
- Не забывай, что программе (твоей) отводиться ВСЯ память (не тока 64K) вплоть до 640K - Поэтому перед запуском ее неплохо было бы освободить(ф-ции 4ah):
.286
NewProgramSize equ 1000h
text segment byte public
assume cs:text,ds:text
org 100h
begin:
mov sp,NewProgramSize
mov ah,4ah
mov bx,sp
inc bx ; bx = NewSize + 16 bytes, es=Our PSP
int 21h
jnc @RunProg
call @Error
jmp short @Exit
@RunProg:
- К тому же вместо стандартных досовых ф-ций запуска программ рекомендую использовать прерывание 2eh. Почему ? Потому, что для стандартных ф-ций надо настраивать окружение дочерней программы итд, что не вызывает желания потратить кучу тайма на изучение всего этого... Вот как я запускаю внешнюю программу интом 2eh:
@RunProg:
mov si,offset CMD
; ds:si = to command line (смотри ниже)
pusha
push ds
push es
; Сохранили все регистры
mov word ptr cs:@SS+1,ss
mov word ptr cs:@SP+1,sp
; После вызова int 2eh даже стек будет разрушен !!!
int 2eh ; Выполнить внешнюю прогу, не загружая копию command.com
@SS: mov ax,0000h ; Здесь будет mov ax,Твой сегмент стека
mov ss,ax
@SP: mov ax,0000h ; А здесь - твой sp
mov sp,ax
; Теперь со старого стека восстанавливаем твои регистры
pop es
pop ds
popa
; А теперь маленькая тонкость !!! После выполнения программы управление передасться command.com !!! И тебе надо будет написать ему EXIT, чтобы работать дальше ... Ну так сделаем это :
mov si,offset Keys
call PutKeys
;...
PutKeys proc near
cld
@Key:
lodsw
test ax,ax
jnz @NoEnd
retn
@NoEnd:
mov ah,05h
int 16h ; Положим в буфер клавы клавиши ...
jmp short @Key
PutKeys endp
; Что-то типа ASCII-Z строки
Keys db 'e',12h,'x',2dh,'i',17h,'t',14h,0dh,1ch,0,0
; Собственно, CMD
CMD db 8,'test.bat',0dh ; Типа pas-строки, в конце обязательно код 0dh,
; В начале длина команды в байтах.
; Так что можешь запускать не тока com, но и bat -файлики ;
Chingachguk.
[ASM] Попробуй настрой DS15.10.01 09:43 Автор: Cyril <sc> Статус: Member
> Короче я стормозил - напрасно ваше время только отнял. > Надо было полный путь указать к файлу - и все заработало.
да ну мелочи 5 минут и все дела
а интересно мне стало кстати потому что я в свое время кодил прогу по заказу одной биржи - слежка за сотрудниками, кто какие проги запускает и т.п. и помню что COMMAND.COM при работе AUTOEXEC.BAT и в шелле по-разному работает немного ну и думаю - может чел нарвался на эту ситуевину, так он тут засядет, там противная отладка т.к. только на загрузке можно ловить, но у тебя все обошлось
успехов!