Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
А на Паскале это гораздо проще 01.12.02 20:18 Число просмотров: 1318
Автор: :-) <:-)> Статус: Elderman Отредактировано 01.12.02 20:21 Количество правок: 1
|
Я в том сообщении обновил бинарник ({$M 4096,0,0} - урезал heap, а то client32.nlm в конце вис. Сейчас вроде все нормально)
> 1. Поправь меня (помоги перевевти места, где вопрос стоит > ,- или на слолвах объясни, что там делается). > Для начала найди Ральфа Брауна в поисковике. Там для написания этой проги инфы достаточно.
> #include <dos.h> > > REGS rg;
Тут в первом байте строк должна быть длина строки (см. Ральфа Брауна), а BP это делает автоматом
> char CmdLine[100], * Cmd="LOAD", TMPCmdLine[100];
"\4LOAD"
> > union { > unsigned char far * p_line; > unsigned int a[2]; > } Un; > > > void main (int argc,char*argv[]) { > > // ? Move(Mem[PrefixSeg:$80], CmdLine, > Mem[PrefixSeg:$80]+1);
Переписывем командую строку из PSP:0x80 (см. описание PSP, 1-й байт - ее длина) в CmdLine.
char far *p = (char far*) MK_FP(_psp, 0x80);
memcpy(CmdLine, p, *p+1);
> unsigned int a=0,b=0; > // CmdLine := #80 + Cmd + CmdLine + #13; > TMPCmdLine[a++]=80; > while (Cmd[b]!=0) TMPCmdLine[a++]=Cmd[b++]; b=0; > while (CmdLine[b]!=0) TMPCmdLine[a++]=CmdLine[b++]; > TMPCmdLine[a]=13; > > // R.ax := $AE01; > rg.x.ax=0xAE01; > > // ? R.cx := Mem[PrefixSeg:$80];
rg.cx = *p; //Длина командной строки
> > // R.dx := $FFFF; > rg.x.dx=0xFFFF; > > // R.ds := Seg(Cmd); > Un.p_line=(unsigned char far *) Cmd; a=Un.a[1]; > > // R.bx := Ofs(CmdLine); > Un.p_line=(unsigned char far *) TMPCmdLine; > rg.x.bx=Un.a[0]; > > // R.si := Ofs(Cmd); > Un.p_line=(unsigned char far *) Cmd; > rg.x.si=Un.a[0]; > > _asm { > mov ax, a > mov ds, ax > } > > // Intr($2F, R); > int86 (0x2f, &rg, &rg); > > } > > > ЗЫ 1: Ссылку на Ralf Brown's IntList (или другую доку на > основе которой ты свою прогу писал) > > не мог бы дать . > ЗЫ 2: Если твой дамп - экзешник, то где у него сигнатура MZ > ?
|
|
|