In questa foto si vede il programma funzionare ma per un errore sul puntatore di fine stringa viene mostrato anche il contenuto della memoria....una cosa che succedeva in ASM su MS-DOS |
Come indicato nella memoria e' disponibile solo COMMAND.COM e non ci sono comandi MS-DOS esterni quindi nemmeno EDLIN od altri editor piu' complessi e non era disponibile nemmeno un compilatore (tipo GW-Basic).....il problema e' che volevo provare a farci girare un mio programma.
Il problema di non avere un editor e' stato risolto con il comando interno DOS
COPY CON nome_file
Dopo aver dato invio tutti gli input da tastiera vengono inviati al file. Per terminare CTRL+Z ed Invio
Per creare un programma eseguibile si puo' usare COPY CON ed inputare codici in linguaggio macchina. Per esempio si prende un semplice programma Assembler
org 0x100 ; .com files always start 256 bytes into the segment
; int 21h is going to want...
mov dx, msg ; the address of or message in dx
mov ah, 9 ; ah=9 - "print string" sub-function
int 0x21 ; call dos services
mov dl, 0x0d ; put CR into dl
mov ah, 2 ; ah=2 - "print character" sub-function
int 0x21 ; call dos services
mov dl, 0x0 ; put LF into dl
mov ah, 2 ; ah=2 - "print character" sub-function
int 0x21 ; call dos services
mov ah, 0x4c ; "terminate program" sub-function
int 0x21 ; call dos services
Lo si compila su una macchina ospite e con un editor esadecimale si legge il risultato che e' qualcosa del tipo
Fino a qui la cosa potrebbe anche funzionare ma ci si ferma subito perche' si vede che alcuni codici non sono presenti sulla tastiera...come fare l'input di tali codici?? Mi sono ricordato che ai tempi del Turbo Pascal 5.0 su M24 per fare le parentesi graffe (non presenti sulla tastiera italiana) all'epoca usavo la conbinazione ALT+123.
Cosi convertendo in decimale l'output esadecimale del compilatore e digitando ognuno dei numeri seguenti preceduti da ALT ed usando COPY CON si puo' creare un file .COM eseguibile
--------------------------------------------------------
186
23
1
180
9
205
33
178
13
180
2
205
33
178
5
180
2
205
33
180
76
205
33
76
117
99
97
36
--------------------------------------------------------
complicato ma funzionante