Retrieve the program name (Undocumented)

The following Assembly source code will retrieve its own name and path

Assemble with NBASM

.model tiny
.code
    org	100h			; we know that on entry ds=es=cs=ss
    
start:
  mov  ax,es:[002Ch]		; get environment address from 'PSP'
  mov  es,ax			; es:di = environment
  xor  di,di			; start at beginning
  xor  al,al			; clear AL
  mov  cx,-1			; cx = -1
p1_loop1:	
  repne
    scasb			; Find double zero
  scasb				;
  jne	short p1_loop1		;
  push	ds			; save data seg
  push	ds			; swap es,ds
  push	es			;
  pop	ds			;
  pop	es			;
  lea	si,[di+2]		; DS:SI = string
  mov	di,offset buffer	; ES:DI = buffer
p1_loop2:	
  lodsb				; Copy the string
  stosb
  or	al,al
  jnz	short p1_loop2
  mov	al,36			; put a '$' for service 09 below
  stosb				;
  pop	ds			; restore Data Seg

  mov	dx,offset Buffer	; DOS print string service
  mov	ah,09			;
  int	21h			;

  int	20h			; exit to DOS

Buffer:						; we don't need to define the len
.end	start


To assembly it:
- NBASM progname

This example shows how to retrieve the programs name and path (dir) where it is located on the disk.