Segmentarea structurii programelor
Exemplul 1-1. Un program simplu cu trei segmente
Indicăm corespondența dintre registrele segmentate și segmente
; Vom descrie segmentul de comandă
cod segment; Deschideți segmentul de comandă
începe: mov AX, date; Configurați DS
mov DS, AX; pe segmentul de date;
Să afișăm o linie de text
mov AN, 09h; funcția de afișare DOS pe ecran
int 21h; sunați la DOS
mov AX, 4C00h; funcția DOS de terminare a programului
int 21h; sunați la DOS
codul se termină; închideți segmentul de comandă
; Vom descrie segmentul de date
segment de date; Deschideți segmentul de date
msg db "Programul funcționează!"; Șirul de ieșire
datele se termină, închideți segmentul de date
Să descriem segmentul de stivă
stk seg segment; Deschideți segmentul de stivă
db 256 dup (?); alocăm 256 octeți pentru stiva
stk termină, închideți segmentul de stivă
sfârșitul începe; sfârșitul textului cu punctul de intrare
mov AX, date; Configurați DS
mov DS, AX; pe segmentul de date
Comutatorul / z permite afișarea liniilor de cod sursă ale programului în care ansamblul a detectat erori (fără această cheie, căutarea de erori ar trebui să fie făcută prin lista de traduceri).
Comutatorul / zi controlează includerea informațiilor în fișierul obiect care nu este necesar atunci când se execută programul, ci este folosit de depanator.
Comutatorul / n suprimă listarea simbolurilor simbolice în program, ceea ce reduce într-o oarecare măsură conținutul informațiilor
dar dimensiunea sa este redusă.
Parametrii care se confruntă în continuare defini numele de fișier ale originalului (P.ASM), obiect (P.OBJ) și listarea (P.LST). Este posibil să doriți să apelați în compilatorul linie pentru a specifica numele complete de fișiere cu extensiile lor, dar acest lucru nu este necesar, deoarece compilatorul implicit utilizează un extensiile de nume enumerate mai sus.
Linia de apel a linkerului este după cum urmează:
Comutatorul / x suprimă formarea unei liste de layout-uri, care de obicei nu este necesară.
Comutatorul / v trimite informații la fișierul de boot utilizat de depanator. Parametrii de mai jos indică numele modulelor: obiect (R.Ob) și boot (R.EXE).
Ca și în studiul acestei cărți, va trebui să scrie și depana un număr mare de programe, este recomandabil să se creeze un fișier batch (numit, de exemplu, A.VAT) care automatizează executarea de același tip de operațiuni de difuzare și de aspect. Textul fișierului batch în cea mai simplă versiune poate fi acesta (presupunând că calea către directorul cu pachetul TASM a fost specificată în parametrul de comandă PATH):
Executarea unui program pregătit de R.EXE este efectuat de comanda .p.exe sau pur și simplu
Când programul este încărcat, segmentele sunt plasate în memorie, așa cum se arată în Fig. 1.9.
Fig. 1.9. Imaginea programului în memorie.