; PREREQUISITI: conoscere anche sommariamente il concetto di API per un OS org 0100h ; set program start to 0100h; necessario per i file .COM (IP risulta pre-caricato con 0100h) ; primo programma per provare istruzioni assembly 8086 ; SEZIONE A ; questo esempio utilizza API del BIOS API_BIOS: ; esempio di "label" ovvero etichetta/segnaposto che marca un punto/indirizzo; NON E' UN'ISTRUZIONE ; stampa di un carattere sullo schermo mov al, 33h ; 33h = '3' mov ah, 0eh ; numero del "servizio" o "sottofunzione" int 10h ; API per la gestione del video ; volendo stampare un altro carattere basta cambiare AL, e richiamare l'API mov al, 'D' ; il carattere deve essere codificato ASCII. OK i singoli apici come in C mov ah, 0eh ; numero del "servizio" o "sottofunzione" int 10h ; API per la gestione del video ; EX: modificare il codice precedente e stampare il carattere 'A' prima, poi il carattere ' ' (spazio); provare a stampare il carattere con codice ASCII=1: cosa si ottiene sullo schermo? ; acquisizione di un carattere dalla tastiera mov ah, 00 ; numero del "servizio" o "sottofunzione" int 16h ; API per la gestione della tastiera ; il programma si arresta, in attesa della pressione del tasto -> E' UNA CHIAMATA "BLOCCANTE" ! ; NOTA BENE: una volta premuto il tasto, il suo codice ASCII verra' deposto nel registro AL ; implementazione del "codice di Cesare" add al,3 ; cifrario di Cesare con chiave = +3 mov ah, 0eh ; numero del "servizio" o "sottofunzione" int 10h ; API per la gestione del video ; notare che il carattere digitato NON viene stampato sullo schermo ret ; return to the operating system ; PREREQUISITI: conoscere anche sommariamente il concetto di API per un OS org 0100h ; set program start to 0100h; necessario per il file .COM ; primo programma per provare istruzioni assembly 8086 ; SEZIONE A ; questo esempio utilizza API del BIOS ; stampa di un carattere sullo schermo mov al, 33h ; 33h = '3' mov ah, 0eh ; numero del "servizio" o "sottofunzione" int 10h ; API per la gestione del video ret ; return to the operating system ; volendo stampare un altro carattere basta cambiare AL, e richiamare l'API mov al, 'D' ; il carattere deve essere codificato ASCII. OK i singoli apici come in C mov ah, 0eh ; numero del "servizio" int 10h ; API per la gestione del video ; EX: modificare il codice precedente e stampare il carattere 'A' prima, poi il carattere 'a' ; acquisizione di un carattere dalla tastiera mov ah, 00 ; numero del "servizio" o "sottofunzione" int 16h ; API per la gestione della tastiera ; il programma si arresta, in attesa della pressione del tasto - E' UNA CHIAMATA "BLOCCANTE" ; una volta premuto il tasto, il suo codice ASCII verra' deposto nel registro AL add al,3 ; cifrario di Cesare con chiave = +3 mov ah, 0eh ; numero del "servizio" o "sottofunzione" int 10h ; API per la gestione del video ; notare che il carattere digitato NON VIENE stampato sullo schermo ; INFO: consultare l'help (tasto F1) di emu8086 per documentazione sulle API, alla voce "Interrupts" ret ; return to the operating system ; EX per casa: ; EX1: prova un codice di Cesare "negativo" in cui il carattere codificato e' precedente ; di 3 posti, invece che successivo ; EX2: consultare l'help e trovare significato e sintassi dell'istruzione LOOP ; dopodiche' usarla per utilizzare la codifica di Cesare su 10 caratteri