648 ; Example of how to use the EXEC function c_start: jmp start fcb1 : db 40 dup 0 fcb2 : db 40 dup 0 parmblk: dw 0 ; Segment address of environment string dd 0 ; Pointer to command line dd 0 ; Pointer to default FCB to be passed at PSP+5CH dd 0 ; Pointer to default FCB to be passed at PSP+6CH ;cmdline: db 6,'/C mn',13 cmdline: db 0 stackspace db 512 dup 0 newstack: dw 0 com_spc : db 'COMSPEC=',0 ;Compare string com_val: db 128 dup 0 ;Buffer for COMSPEC value start: push ds mov ds,w[02C] ;Fetch environment mov si,0 one_more: es mov di,com_spc l1: ;Compare strings cmpsb je l1 sub si,1 es cmp di,com_val ;All characters match? je getval ;Yes, fetch value of COMSPEC next: inc si ;Search for next environmental variable ds cmp b[si],0 jne next inc si ds cmp b[si],0 jne one_more getval: movsb ds cmp b[si-1],0 jne getval pop ds mov bp,parmblk mov [bp+2],cmdline mov [bp+4],CS mov [bp+6],fcb1 mov [bp+8],CS mov [bp+10],fcb2 mov [bp+12],CS mov SP,newstack mov ah,4AH ; Mshrink, shrink memory mov bx,c_end-c_start mov es,cs ; shrink Code Segment int 21H mov ah,4BH ; EXEC mov al,00H ; Load and Execute mov dx,com_val mov bx,parmblk int 21H mov ax,04c00 int 21H c_end: . 0