Area Assembly

Introduzione al progetto
Questa area del sito è dedicata al linguaggio Assembly. Preannuncio che non ne so molto pertanto non troverete questo granchè almeno per il momento. Tuttavia possono esserci comunque dei contenuti.
Cosa è l'Assembly
L'Assembly (o asm) è un linguaggio di basso livello, adottato per le architetture Intel e compatibili. Ogni processore ha una sua particolare versione dell'Assembly, solitamente simili nelle caratteristiche di base come le istruzioni e l'uso dei registri. Il linguaggio è strutturato in modo tale che ogni operazione asm corrispondi in modo univoco a una operazione in linguaggio macchina. Il vantaggio è innanzitutto una semplificazione per il programmatore che senza vedersi codici esadecimali o binari da scrivere a memoria può tenersi a mente piccole parole di due, tre lettere chiamate istruzioni mneomoniche.
Sfatiamo un paio di leggende metropolitane...
...per non dire altro. Punto primo: si chiama assembly e non assembler. L'assembler è un assemblatore, assembly il linguaggio!!. Punto secondo. Non è difficile, è la più grande sciocchezza dopo che è stato inventato il Visual Basic. L'importante è immedesimarsi in uno stile di pensiero diverso da quello usato normalmente con linguaggi come il C++. I punti favorevoli poi sono la velocità d'esecuzione, le dimensioni ridotte dell'eseguibile ed un controllo completo sul vostro computer. Non serve altro! Arrivati a questo punto è ora che mostri qualcosa...
Un piccolo Hello World!
Non mi soffermerò direttamente su ogni passo del codice per vari motivi. Se vi serve un tutorial di base e avanzato fino a che non ne scriverò uno qui, guardate su giobe2000. Ecco il codice:
org 100h

; setta la modalità video    
mov ax, 3     ; modalità testo 80x25, 16 colori, 8 pagine (ah=0, al=3)
int 10h       ; passa alla modalità

; cancel blinking and enable all 16 colors:
mov ax, 1003h
mov bx, 0
int 10h


; setta il segmento nel registro
mov     ax, 0b800h
mov     ds, ax

; scrive "hello world"
; la locazione 02h per esempio indica il carattere 03h il colore

mov [02h], 'H'

mov [04h], 'e'

mov [06h], 'l'

mov [08h], 'l'

mov [0ah], 'o'

mov [0ch], ','

mov [0eh], 'W'
 
mov [10h], 'o'

mov [12h], 'r'

mov [14h], 'l'

mov [16h], 'd'

mov [18h], '!'




; colora tutti i caratteri
mov cx, 12  ; numero di caratteri
mov di, 03h ; parte dal bit dopo 'a'

c:  mov [di], 11101100b   ; definisce lo sfondo
    add di, 2 ; passa al prossimo carattere nella ram.
    loop c

; aspetta la pressione di un qualsiasi tasto
mov ah, 0
int 16h

ret
Ecco un esempio che funzionerà correttamente sul simulatore emu8086, quello che uso per fare le prove. Non fatevi spaventare da questa matassa di codice, non è necessario comprenderla, è inserita a puro scopo esemplificativo. 17.01.08 da prosegure...