Language: Assembly

Author: Ben Olmstead
Notes: x86/MS-DOS


bits 16
org 256
mov ah,64
mov bx,1
mov cx,720
mov dx,b+16
int 33
mov cx,90
mov si,b+16
c:push cx
mov ah,64
mov bx,1
mov cx,6
mov dx,b
int 33
mov cx,7
a:push cx
mov al,[si]
shr al,4
add al,48
cmp al,58
jb g
add al,39
g:mov [b+8],al
lodsb
and al,15
add al,48
cmp al,58
jb e
add al,39
e:mov [b+9],al
mov ah,64
mov bx,1
mov cx,5
mov dx,b+6
int 33
pop cx
loop a
mov al,[si]
shr al,4
add al,48
cmp al,58
jb h
add al,39
h:mov [b+8],al
lodsb
and al,15
add al,48
cmp al,58
jb n
add al,39
n:mov [b+9],al
mov ah,64
mov bx,1
mov cx,4
mov dx,b+6
int 33
pop cx
loop c
mov ah,64
mov bx,1
mov cx,5
mov dx,b+11
int 33
mov ah,76
int 33
b   db 13,10,' db 0x  ,',13,10,'end'
 db 0x62,0x69,0x74,0x73,0x20,0x31,0x36,0x0d
 db 0x0a,0x6f,0x72,0x67,0x20,0x32,0x35,0x36
 db 0x0d,0x0a,0x6d,0x6f,0x76,0x20,0x61,0x68
 db 0x2c,0x36,0x34,0x0d,0x0a,0x6d,0x6f,0x76
 db 0x20,0x62,0x78,0x2c,0x31,0x0d,0x0a,0x6d
 db 0x6f,0x76,0x20,0x63,0x78,0x2c,0x37,0x32
 db 0x30,0x0d,0x0a,0x6d,0x6f,0x76,0x20,0x64
 db 0x78,0x2c,0x62,0x2b,0x31,0x36,0x0d,0x0a
 db 0x69,0x6e,0x74,0x20,0x33,0x33,0x0d,0x0a
 db 0x6d,0x6f,0x76,0x20,0x63,0x78,0x2c,0x39
 db 0x30,0x0d,0x0a,0x6d,0x6f,0x76,0x20,0x73
 db 0x69,0x2c,0x62,0x2b,0x31,0x36,0x0d,0x0a
 db 0x63,0x3a,0x70,0x75,0x73,0x68,0x20,0x63
 db 0x78,0x0d,0x0a,0x6d,0x6f,0x76,0x20,0x61
 db 0x68,0x2c,0x36,0x34,0x0d,0x0a,0x6d,0x6f
 db 0x76,0x20,0x62,0x78,0x2c,0x31,0x0d,0x0a
 db 0x6d,0x6f,0x76,0x20,0x63,0x78,0x2c,0x36
 db 0x0d,0x0a,0x6d,0x6f,0x76,0x20,0x64,0x78
 db 0x2c,0x62,0x0d,0x0a,0x69,0x6e,0x74,0x20
 db 0x33,0x33,0x0d,0x0a,0x6d,0x6f,0x76,0x20
 db 0x63,0x78,0x2c,0x37,0x0d,0x0a,0x61,0x3a
 db 0x70,0x75,0x73,0x68,0x20,0x63,0x78,0x0d
 db 0x0a,0x6d,0x6f,0x76,0x20,0x61,0x6c,0x2c
 db 0x5b,0x73,0x69,0x5d,0x0d,0x0a,0x73,0x68
 db 0x72,0x20,0x61,0x6c,0x2c,0x34,0x0d,0x0a
 db 0x61,0x64,0x64,0x20,0x61,0x6c,0x2c,0x34
 db 0x38,0x0d,0x0a,0x63,0x6d,0x70,0x20,0x61
 db 0x6c,0x2c,0x35,0x38,0x0d,0x0a,0x6a,0x62
 db 0x20,0x67,0x0d,0x0a,0x61,0x64,0x64,0x20
 db 0x61,0x6c,0x2c,0x33,0x39,0x0d,0x0a,0x67
 db 0x3a,0x6d,0x6f,0x76,0x20,0x5b,0x62,0x2b
 db 0x38,0x5d,0x2c,0x61,0x6c,0x0d,0x0a,0x6c
 db 0x6f,0x64,0x73,0x62,0x0d,0x0a,0x61,0x6e
 db 0x64,0x20,0x61,0x6c,0x2c,0x31,0x35,0x0d
 db 0x0a,0x61,0x64,0x64,0x20,0x61,0x6c,0x2c
 db 0x34,0x38,0x0d,0x0a,0x63,0x6d,0x70,0x20
 db 0x61,0x6c,0x2c,0x35,0x38,0x0d,0x0a,0x6a
 db 0x62,0x20,0x65,0x0d,0x0a,0x61,0x64,0x64
 db 0x20,0x61,0x6c,0x2c,0x33,0x39,0x0d,0x0a
 db 0x65,0x3a,0x6d,0x6f,0x76,0x20,0x5b,0x62
 db 0x2b,0x39,0x5d,0x2c,0x61,0x6c,0x0d,0x0a
 db 0x6d,0x6f,0x76,0x20,0x61,0x68,0x2c,0x36
 db 0x34,0x0d,0x0a,0x6d,0x6f,0x76,0x20,0x62
 db 0x78,0x2c,0x31,0x0d,0x0a,0x6d,0x6f,0x76
 db 0x20,0x63,0x78,0x2c,0x35,0x0d,0x0a,0x6d
 db 0x6f,0x76,0x20,0x64,0x78,0x2c,0x62,0x2b
 db 0x36,0x0d,0x0a,0x69,0x6e,0x74,0x20,0x33
 db 0x33,0x0d,0x0a,0x70,0x6f,0x70,0x20,0x63
 db 0x78,0x0d,0x0a,0x6c,0x6f,0x6f,0x70,0x20
 db 0x61,0x0d,0x0a,0x6d,0x6f,0x76,0x20,0x61
 db 0x6c,0x2c,0x5b,0x73,0x69,0x5d,0x0d,0x0a
 db 0x73,0x68,0x72,0x20,0x61,0x6c,0x2c,0x34
 db 0x0d,0x0a,0x61,0x64,0x64,0x20,0x61,0x6c
 db 0x2c,0x34,0x38,0x0d,0x0a,0x63,0x6d,0x70
 db 0x20,0x61,0x6c,0x2c,0x35,0x38,0x0d,0x0a
 db 0x6a,0x62,0x20,0x68,0x0d,0x0a,0x61,0x64
 db 0x64,0x20,0x61,0x6c,0x2c,0x33,0x39,0x0d
 db 0x0a,0x68,0x3a,0x6d,0x6f,0x76,0x20,0x5b
 db 0x62,0x2b,0x38,0x5d,0x2c,0x61,0x6c,0x0d
 db 0x0a,0x6c,0x6f,0x64,0x73,0x62,0x0d,0x0a
 db 0x61,0x6e,0x64,0x20,0x61,0x6c,0x2c,0x31
 db 0x35,0x0d,0x0a,0x61,0x64,0x64,0x20,0x61
 db 0x6c,0x2c,0x34,0x38,0x0d,0x0a,0x63,0x6d
 db 0x70,0x20,0x61,0x6c,0x2c,0x35,0x38,0x0d
 db 0x0a,0x6a,0x62,0x20,0x6e,0x0d,0x0a,0x61
 db 0x64,0x64,0x20,0x61,0x6c,0x2c,0x33,0x39
 db 0x0d,0x0a,0x6e,0x3a,0x6d,0x6f,0x76,0x20
 db 0x5b,0x62,0x2b,0x39,0x5d,0x2c,0x61,0x6c
 db 0x0d,0x0a,0x6d,0x6f,0x76,0x20,0x61,0x68
 db 0x2c,0x36,0x34,0x0d,0x0a,0x6d,0x6f,0x76
 db 0x20,0x62,0x78,0x2c,0x31,0x0d,0x0a,0x6d
 db 0x6f,0x76,0x20,0x63,0x78,0x2c,0x34,0x0d
 db 0x0a,0x6d,0x6f,0x76,0x20,0x64,0x78,0x2c
 db 0x62,0x2b,0x36,0x0d,0x0a,0x69,0x6e,0x74
 db 0x20,0x33,0x33,0x0d,0x0a,0x70,0x6f,0x70
 db 0x20,0x63,0x78,0x0d,0x0a,0x6c,0x6f,0x6f
 db 0x70,0x20,0x63,0x0d,0x0a,0x6d,0x6f,0x76
 db 0x20,0x61,0x68,0x2c,0x36,0x34,0x0d,0x0a
 db 0x6d,0x6f,0x76,0x20,0x62,0x78,0x2c,0x31
 db 0x0d,0x0a,0x6d,0x6f,0x76,0x20,0x63,0x78
 db 0x2c,0x35,0x0d,0x0a,0x6d,0x6f,0x76,0x20
 db 0x64,0x78,0x2c,0x62,0x2b,0x31,0x31,0x0d
 db 0x0a,0x69,0x6e,0x74,0x20,0x33,0x33,0x0d
 db 0x0a,0x6d,0x6f,0x76,0x20,0x61,0x68,0x2c
 db 0x37,0x36,0x0d,0x0a,0x69,0x6e,0x74,0x20
 db 0x33,0x33,0x0d,0x0a,0x62,0x20,0x20,0x20
 db 0x64,0x62,0x20,0x31,0x33,0x2c,0x31,0x30
 db 0x2c,0x27,0x20,0x64,0x62,0x20,0x30,0x78
 db 0x20,0x20,0x2c,0x27,0x2c,0x31,0x33,0x2c
 db 0x31,0x30,0x2c,0x27,0x65,0x6e,0x64,0x27
end

Author: Caucci Luca


;Questo programma visualizza il suo codice sorgente.
;Autore: Caucci Luca (e-mail: caucci@cs.unibo.it)

         .model tiny
         .code
         org   0100h

inizio:
         jmp   programma

a_capo   DB    'ww         DB    w', 00h
stringa  DB    ';Questo programma visualizza il suo codice sorgente.w;Autore: Caucci Luca (e-mail: caucci@cs.unibo.it)ww         .model tinyw         .codew         org   0100hwwinizio:w         jmp   programmawwa_capo   DB    w~w, 00hws/'
         DB    'tringa  DB    w~w, 00hwformato  DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 27hw         DW    OFFSET(a_capo)w         DB    27h, 0dh, 27hw         DW    OFFSET(stringa)w         DW    OFFSET(a_capo)w         /'
         DB    'DB    27h, 0dh, 27hw         DW    OFFSET(a_capo)w         DB    27h, 0dh, 27hw         DW    OFFSET(a_capo)w         DB    27h, 0dh, 27hw         DW    OFFSET(a_capo)w         DB    27h, 0dh, 27hw         DW    OFFSET(a_/'
         DB    'capo)w         DB    27h, 0dh, 27hw         DW    OFFSET(a_capo)w         DB    27h, 0dh, 27hw         DW    OFFSET(a_capo)w         DB    27h, 0dh, 27hw         DW    OFFSET(a_capo)w         DB    27h, 0dh, 27hw         /'
         DB    'DW    OFFSET(a_capo)w         DB    27h, 0dh, 27hw         DW    OFFSET(a_capo)w         DB    27h, 0dh, 27hw         DW    OFFSET(a_capo)w         DB    27h, 0dh, 27hw         DW    OFFSET(a_capo)w         DB    27h, 0dh/'
         DB    ', 27hw         DW    OFFSET(a_capo)w         DB    27h, 0dh, 27hw         DW    OFFSET(a_capo)w         DB    27h, 0dh, 27hw         DW    OFFSET(a_capo)w         DB    27h, 0dh, 27hw         DW    OFFSET(a_capo)w        /'
         DB    ' DB    27h, 0dh, 27hw         DW    OFFSET(a_capo)w         DB    27h, 0dh, 27h, 27h, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dhw         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dhw         DB    0dh, 0d/'
         DB    'h, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dhw         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dhw         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dhw         DB    0dh, 0/'
         DB    'dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dhw         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 27h, 0f7hw         DB    27h, 0dh, 0dh, 27h, 7eh, 27h, 0dh, 0dh, 27h, 0afh, 27h, 0dhw         DB    0dh/'
         DB    ', 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dhw         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 27h, 0afhw         DB    27h, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dhw         DB    0/'
         DB    'dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dhwwprogramma:w         lea   ax, [formato]w         push  axw         lea   ax, [stringa]w         push  axw         call  disp_strw         mov   ah, 4chw         int   /'
         DB    '21hwwdisp_str PROCw__indstr EQU   bp + 04hw__param  EQU   bp + 06hww         push  bpw         mov   bp, spw         push  bxw         push  dxw         push  siw         push  diw         cldw         mov   si, [__indstr/'
         DB    ']w         mov   bx, [__param]w         mov   ah, 02hw__leggi_carattere:w         lodsbw         cmp   al, 00hw         je    __fine_stringaw         cmp   al, wwww         je    __caratt_specw         cmp   al, wwww     /'
         DB    '    je    __stringaw         cmp   al, wwww         je    __leggi_caratterew         mov   dl, alw         int   21hw         jmp   __leggi_caratterew__caratt_spec:w         mov   dl, [bx]w         inc   bxw         int  /'
         DB    ' 21hw         cmp   dl, 0dhw         jne   __leggi_caratterew         mov   dl, 0ahw         int   21hw         jmp   __leggi_caratterew__stringa:w         mov   di, [bx]w         add   bx, 0002hw__carattere_succ_stringa:/'
         DB    'w         mov   dl, [di]w         inc   diw         cmp   dl, 00hw         je    __leggi_caratterew         int   21hw         cmp   dl, wwww         jne   __carattere_succ_stringaw         mov   ax, bxw         add   ax,/'
         DB    ' 0002hw         push  axw         push  [bx]w         call  disp_strw         mov   bx, axw         mov   ah, 02hw         jmp   __carattere_succ_stringaw__fine_stringa:w         mov   ax, bxw         pop   diw         po/'
         DB    'p   siw         pop   dxw         pop   bxw         pop   bpw         ret   0004hwdisp_str ENDPww         END   inizioww', 00h
formato  DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(stringa)
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h, 27h, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 27h, 0f7h
         DB    27h, 0dh, 0dh, 27h, 7eh, 27h, 0dh, 0dh, 27h, 0afh, 27h, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 27h, 0afh
         DB    27h, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh

programma:
         lea   ax, [formato]
         push  ax
         lea   ax, [stringa]
         push  ax
         call  disp_str
         mov   ah, 4ch
         int   21h

disp_str PROC
__indstr EQU   bp + 04h
__param  EQU   bp + 06h

         push  bp
         mov   bp, sp
         push  bx
         push  dx
         push  si
         push  di
         cld
         mov   si, [__indstr]
         mov   bx, [__param]
         mov   ah, 02h
__leggi_carattere:
         lodsb
         cmp   al, 00h
         je    __fine_stringa
         cmp   al, 'w'
         je    __caratt_spec
         cmp   al, '~'
         je    __stringa
         cmp   al, '/'
         je    __leggi_carattere
         mov   dl, al
         int   21h
         jmp   __leggi_carattere
__caratt_spec:
         mov   dl, [bx]
         inc   bx
         int   21h
         cmp   dl, 0dh
         jne   __leggi_carattere
         mov   dl, 0ah
         int   21h
         jmp   __leggi_carattere
__stringa:
         mov   di, [bx]
         add   bx, 0002h
__carattere_succ_stringa:
         mov   dl, [di]
         inc   di
         cmp   dl, 00h
         je    __leggi_carattere
         int   21h
         cmp   dl, '/'
         jne   __carattere_succ_stringa
         mov   ax, bx
         add   ax, 0002h
         push  ax
         push  [bx]
         call  disp_str
         mov   bx, ax
         mov   ah, 02h
         jmp   __carattere_succ_stringa
__fine_stringa:
         mov   ax, bx
         pop   di
         pop   si
         pop   dx
         pop   bx
         pop   bp
         ret   0004h
disp_str ENDP

         END   inizio


Author: Luca Caucci

;Questo programma visualizza il suo codice sorgente.
;Autore: Luca Caucci (e-mail: caucci@cs.unibo.it)

         .model tiny
         .code
         org   0100h

inizio:
         jmp   programma

a_capo   DB    '         DB    ', 00h
stringa  DB    ';Questo programma visualizza il suo codice sorgente.;Autore: Luca Caucci (e-mail: caucci@cs.unibo.it)         .model tiny         .code         org   0100hinizio:         jmp   programmaa_capo   DB    ~, 00hs'
         DB    'tringa  DB    ~, 00hformato  DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 27h         DW    OFFSET(a_capo)         DB    27h, 0dh, 27h         DW    OFFSET(stringa)         DW    OFFSET(a_capo)         '
         DB    'DB    27h, 0dh, 27h         DW    OFFSET(a_capo)         DB    27h, 0dh, 27h         DW    OFFSET(a_capo)         DB    27h, 0dh, 27h         DW    OFFSET(a_capo)         DB    27h, 0dh, 27h         DW    OFFSET(a_'
         DB    'capo)         DB    27h, 0dh, 27h         DW    OFFSET(a_capo)         DB    27h, 0dh, 27h         DW    OFFSET(a_capo)         DB    27h, 0dh, 27h         DW    OFFSET(a_capo)         DB    27h, 0dh, 27h         '
         DB    'DW    OFFSET(a_capo)         DB    27h, 0dh, 27h         DW    OFFSET(a_capo)         DB    27h, 0dh, 27h         DW    OFFSET(a_capo)         DB    27h, 0dh, 27h         DW    OFFSET(a_capo)         DB    27h, 0dh'
         DB    ', 27h         DW    OFFSET(a_capo)         DB    27h, 0dh, 27h         DW    OFFSET(a_capo)         DB    27h, 0dh, 27h         DW    OFFSET(a_capo)         DB    27h, 0dh, 27h         DW    OFFSET(a_capo)        '
         DB    ' DB    27h, 0dh, 27h         DW    OFFSET(a_capo)         DB    27h, 0dh, 27h, 27h, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh         DB    0dh, 0d'
         DB    'h, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh         DB    0dh, 0'
         DB    'dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 27h, 0f7h         DB    27h, 0dh, 0dh, 27h, 7eh, 27h, 0dh, 0dh, 27h, 0afh, 27h, 0dh         DB    0dh'
         DB    ', 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 27h, 0afh         DB    27h, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh         DB    0'
         DB    'dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dhprogramma:         lea   ax, [formato]         push  ax         lea   ax, [stringa]         push  ax         call  disp_str         mov   ah, 4ch         int   '
         DB    '21hdisp_str PROC__indstr EQU   bp + 04h__param  EQU   bp + 06h         push  bp         mov   bp, sp         push  bx         push  dx         push  si         push  di         cld         mov   si, [__indstr'
         DB    ']         mov   bx, [__param]         mov   ah, 02h__leggi_carattere:         lodsb         cmp   al, 00h         je    __fine_stringa         cmp   al,          je    __caratt_spec         cmp   al,      '
         DB    '    je    __stringa         cmp   al,          je    __leggi_carattere         mov   dl, al         int   21h         jmp   __leggi_carattere__caratt_spec:         mov   dl, [bx]         inc   bx         int  '
         DB    ' 21h         cmp   dl, 0dh         jne   __leggi_carattere         mov   dl, 0ah         int   21h         jmp   __leggi_carattere__stringa:         mov   di, [bx]         add   bx, 0002h__carattere_succ_stringa:'
         DB    '         mov   dl, [di]         inc   di         cmp   dl, 00h         je    __leggi_carattere         int   21h         cmp   dl,          jne   __carattere_succ_stringa         mov   ax, bx         add   ax,'
         DB    ' 0002h         push  ax         push  [bx]         call  disp_str         mov   bx, ax         mov   ah, 02h         jmp   __carattere_succ_stringa__fine_stringa:         mov   ax, bx         pop   di         po'
         DB    'p   si         pop   dx         pop   bx         pop   bp         ret   0004hdisp_str ENDP         END   inizio', 00h
formato  DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(stringa)
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h
         DW    OFFSET(a_capo)
         DB    27h, 0dh, 27h, 27h, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 27h, 0f7h
         DB    27h, 0dh, 0dh, 27h, 7eh, 27h, 0dh, 0dh, 27h, 0afh, 27h, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 27h, 0afh
         DB    27h, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh
         DB    0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh, 0dh

programma:
         lea   ax, [formato]
         push  ax
         lea   ax, [stringa]
         push  ax
         call  disp_str
         mov   ah, 4ch
         int   21h

disp_str PROC
__indstr EQU   bp + 04h
__param  EQU   bp + 06h

         push  bp
         mov   bp, sp
         push  bx
         push  dx
         push  si
         push  di
         cld
         mov   si, [__indstr]
         mov   bx, [__param]
         mov   ah, 02h
__leggi_carattere:
         lodsb
         cmp   al, 00h
         je    __fine_stringa
         cmp   al, ''
         je    __caratt_spec
         cmp   al, '~'
         je    __stringa
         cmp   al, ''
         je    __leggi_carattere
         mov   dl, al
         int   21h
         jmp   __leggi_carattere
__caratt_spec:
         mov   dl, [bx]
         inc   bx
         int   21h
         cmp   dl, 0dh
         jne   __leggi_carattere
         mov   dl, 0ah
         int   21h
         jmp   __leggi_carattere
__stringa:
         mov   di, [bx]
         add   bx, 0002h
__carattere_succ_stringa:
         mov   dl, [di]
         inc   di
         cmp   dl, 00h
         je    __leggi_carattere
         int   21h
         cmp   dl, ''
         jne   __carattere_succ_stringa
         mov   ax, bx
         add   ax, 0002h
         push  ax
         push  [bx]
         call  disp_str
         mov   bx, ax
         mov   ah, 02h
         jmp   __carattere_succ_stringa
__fine_stringa:
         mov   ax, bx
         pop   di
         pop   si
         pop   dx
         pop   bx
         pop   bp
         ret   0004h
disp_str ENDP

         END   inizio




Author: Bertram Felgenhauer
Notes: 80x86 TASM. Basically, the program reads it's own code/data segment and converts it
to decimal numbers, seperated by "\nDB ".

MODEL TINY
.CODE
.STARTUP
DB 177
DB 076
DB 186
DB 044
DB 001
DB 172
DB 180
DB 036
DB 179
DB 004
DB 191
DB 080
DB 001
DB 079
DB 136
DB 037
DB 212
DB 010
DB 004
DB 048
DB 134
DB 196
DB 075
DB 117
DB 244
DB 180
DB 009
DB 205
DB 033
DB 178
DB 071
DB 226
DB 228
DB 178
DB 038
DB 205
DB 033
DB 195
DB 013
DB 010
DB 069
DB 078
DB 068
DB 036
DB 077
DB 079
DB 068
DB 069
DB 076
DB 032
DB 084
DB 073
DB 078
DB 089
DB 013
DB 010
DB 046
DB 067
DB 079
DB 068
DB 069
DB 013
DB 010
DB 046
DB 083
DB 084
DB 065
DB 082
DB 084
DB 085
DB 080
DB 013
DB 010
DB 068
DB 066
DB 032
END