TASM , TLINK e TD

Trasformano un file di testo su cui è scritto un programma in assembler x86, in un file eseguibile DOS (*.exe).

TASM : compilatore
Converte un file di testo su cui è scritto un programma in assembler x86 solitamente con estensione .asm ad un file intermedio con estensione .obj 
Se richiesto durante la conversione, tasm produce altri file utili allo sviluppatore per il debugging del proprio programma. Uno dei più noti è .lst

TLINK: linker
Converte un file uno o più files .obj in unico file con estensione .exe o .com.

TD: debugger
Permettere di testare il programma: esecuzione passo-passo, controllo dei registri della CPU, memoria, .....

Formato del file  contenente il sorgente assembly del programma:
E' un comune file di testo con estensione 
.asm il nome deve seguire le specifiche (DOS!). Può essere modificato da qualsiasi editor di testo (notepad,edit..). Esistono degli editor specializzati che mettono in evidenza la sintassi assembler (ultraedit).

  title Test ;Titolo del programma
.model small ;Modello di utilizzo della memoria
.stack ;Occupazione del segmento di stack
.data ;Segmento dati qui si definiscono le variabili utilizzate

messaggio db 'Ciao !',10,13,'$' 

.code ;Segmento codice: da quì in poi si scrive il programma

.startup ;Modulo di inizializzazione prima dello start del programma

mov ah,09h
mov dx,offset messaggio 
int 21h

.exit ;Modulo di chiusura del programma
end


Primo programma esempio:
Realizzare un programma che una volta lanciato scriverà "Ciao!" sullo schermo del PC (il sorgente è  visualizzato qui sopra).
Lista delle operazione da effettuare:

  1. Creare una cartella di lavoro nel proprio PC (ricordarsi del formato DOS).
  2. Lanciare Ultraedit scrivere il programma sopra visualizzato e salvarlo nella cartella di lavoro col nome test.asm
  3. Con la finestra che visualizza il contenuto della vostra cartella di lavoro selezionata aprire una finestra di MS-DOS  (Menu Start->Esegui-> command<invio>).
  4. Compilare test.asm col comando: tasm /la /z /zi  test 
    C:\Documenti\Scuola\asm\doc>tasm /la /z /zi test
    Turbo Assembler Version 4.1 Copyright (c) 1988, 1996 Borland International

    Assembling file: test.ASM
    Error messages: None
    Warning messages: None
    Passes: 1
    Remaining memory: 399k
  5. Eseguire  il link col comando: tlink /v test 
    C:\Documenti\Scuola\asm\doc>tlink /v test
    Turbo Link Version 4.0 Copyright (c) 1991 Borland International
  6. Controllare la presenza nella cartella di lavoro del file test.exe. Se esiste provare a lanciarlo.
  7. Prova eseguire lo stesso file col debugger:  td test
  8. Eseguire il programma passo e verificare il cambiamento dei registri della CPU, localizzare in memoria dove è stata allocata la stringa "Ciao!".

Esercizio 2:
test1.asm

title Test1 ;Titolo del programma
.model small ;Modello di utilizzo della memoria
.stack ;Occupazione del segmento di stack
.data ;Segmento dati qui si definiscono le variabili utilizzate
.code ;Segmento codice: da quindi si scrive il programma

.startup ;Modulo di inizializzazione prima dello start del programma
;Stampa l'intero set di caratteri sullo schermo
mov cx,255
ciclo: 
mov ah,02h
mov dl,cl
int 21h
loop ciclo 
.exit ;Modulo di chiusura del programma
end


Esercizio 3:
test2.asm

title Test2 ;Titolo del programma
.model small ;Modello di utilizzo della memoria
.stack ;Occupazione del segmento di stack
.data ;Segmento dati qui si definiscono le variabili utilizzate

mess_piu_grande db 'Piu'' grande !',10,13,'$' 
mess_piu_piccolo db 'Piu'' piccolo !',10,13,'$'
mess_indovinato db 'Indovinato dopo: ','$'
mess_tentativi db ' tentativi',10,13,'$'
mess_damm_num db 'Dammi un numero: ','$'
acapo db 10,13,'$'
Tentativi db 0 
.code ;Segmento codice: da quindi si scrive il programma
.startup ;Modulo di inizializzazione prima dello start del programma
mov ax,0
mov si,46Ch
push ds
mov ds,ax
mov bx,[si]
pop ds
shl bl,5
shr bl,5
add bl,30h 

ciclo:
mov ah,09
mov dx,offset mess_damm_num
int 21h
mov ah,01
int 21h 
push ax
mov ah,09
mov dx,offset acapo
int 21h
pop ax 
inc Tentativi 
cmp al,bl
ja maggiore
jb minore
mov ah,09
mov dx,offset mess_indovinato
int 21h
mov dl,Tentativi
add dl,30h
mov ah,2
int 21h
mov ah,09
mov dx,offset mess_tentativi
int 21h 
.exit ;Modulo di chiusura del programma
maggiore:
mov ah,09
mov dx,offset mess_piu_piccolo
int 21h
jmp ciclo 
minore:
mov ah,09
mov dx,offset mess_piu_grande
int 21h
jmp ciclo 
end