Blokovska struktura programa. Modularna struktura programa

Često veliki programi koriste potprograme za implementaciju pomoćnih algoritama. U JA, potprogrami su formalizirani u obliku procedura.

Opis postupaka

(naziv procesa) PROC (parametar) (tijelo procesa) (naziv procesa) ENDP gdje (naziv procesa) – mora se ponoviti dva puta i koristi se za upućivanje na proceduru; (parametar) može uzeti jednu od dvije vrijednosti - (zadano) ili . Blisko povezanoj (internoj) proceduri može se pristupiti samo iz segmenta naredbe gdje je opisana. Dalekoj (vanjskoj) proceduri može se pristupiti iz bilo kojeg segmenta programske naredbe, uključujući i onaj u kojem je opisana. Nazivi i oznake opisani u proceduri nisu lokalizirani unutar nje, stoga moraju biti jedinstveni u programu . Iako je moguće opisati jedan postupak unutar drugog u AY, to ne daje nikakvu korist i obično se ne koristi.

Postupci pozivanja

U YA, sve prijelaze između glavnog programa i procedure morate organizirati sami. Ako se procedura može vratiti u DOS, tada se može pozvati naredbom skoka na ime procedure JMP (ime procesa). ime).Tada tijelo procedure mora sadržavati povratnu naredbu RET Postoji još jedna mogućnost: zapamtite povratnu adresu korištenjem stoga i organizirajte povratak korištenjem skok naredbi. Kada pozivate proceduru, trebali biste uzeti u obzir parametre proslijeđene proceduri i njenu lokaciju u odnosu na točku poziva, tj. tip prijelaza u naredbi CALL određuje se automatski, Na primjer(za postupak p). P CALL P Ako je ovo bliski poziv (BLIZU), tada se izvode sljedeće akcije: Stack:= AB, IP:= offset P gdje je AB povratna adresa, tj. efektivna adresa naredbe koja slijedi nakon poziva; Daleki poziv (FAR) pruža radnje: Stack:= CS, Stack:= AB, CS:= seg P, IP:= offset P Ako je opis procedure u segmentu ispod naredbe poziva, tada atribut grananja mora biti navedeno s PTR izjavom. Na primjer, ZOVI DALEKO PTR P; međugradski poziv P

Položaj postupaka u segmentu

    Interni postupci nalaze se u istom segmentu kao i pozivni program.
U ovom slučaju moguće su 3 opcije postavljanja: a) Sve procedure se postavljaju ispred glavnog (pozivnog) programa, koji se također može formatirati kao procedura. Na primjer: Tekst SEGMENT 'kod' PRETPOSTAVI CS: tekst, DS: podaci, SS: stog A1 PROC … RET A1 ENDP Glavni PROC MOV AX, podaci MOV DS, AX … CALL A1 … MOV AX, C400h INT 21h Glavni ENDP Tekst ZAVRŠAVA SEGMENT podataka … Podaci ZAVRŠAVA SEGMENT stoga 'skup' … Stog ZAVRŠAVA KRAJ Glavni b) sve procedure su ispod gornje točke. c) procedure - unutar glavne procedure, čak je moguće da je procedura unutar neke druge procedure (iako to ne donosi nikakvu korist) Na primjer,… Glavni PROC … CALL A1 … MOV AX, C400h INT 21h A1 PROC … RET A1 ENDP Glavni ENDP Tekst ENDS 2) Vanjski postupci koji se nalaze u drugim segmentima ili u drugim datotekama. Na primjer p, tekst glavnog programa nalazi se u datoteci P.asm Text SEGMENT public 'code' ; sekvencijalno kombiniranje modula; na opći segment PRETPOSTAVI CS: tekst, DS: podaci, SS: stog EXTRN stop: proc; deklaracija vanjskog imena Main PROC ... CALL Stop ... Main ENDP Text ENDS Data SEGMENT ... Data ENDS Stack SEGMENT 'stack' ... Stack ENDS END Main Izvorni tekst procedure je u datoteci P1.asm Tekst SEGMENT javni 'kod' PRETPOSTAVI CS: tekst PUBLIC stop; učiniti ime dostupnim izvana Stop proc ...

Stop ENDP tekst ENDS END ; kraj datoteke bez ulazne točke Spajanje ovih datoteka događa se u koraku povezivanja, tj. potrebno zasebno emitiranje. Na primjer, za MASM MASM/ZI PR MASM/ZI P1 gdje je ZI opcija koja vam omogućuje da ga smjestite u objektnu datoteku pune informacije o brojevima linija i simbolima izvornog modula (IM). Nakon što se formiraju PR.obj i P1.obj potrebno ih je objediniti u jedan datoteka za pokretanje LINK/C0 ​​​​PR P1, COMPOZ gdje je C0 opcija koja prenosi simboličke informacije u datoteku za pokretanje, omogućujući CV debuggeru da prikaže cijeli tekst MI-a, uključujući oznake i komentare. Modul COMPOZ.exe je spreman za izvođenje. Može uključite postupak iz knjižnice. Da biste to učinili, direktiva INCLUDE (naziv datoteke biblioteke) postavlja se ispred IM segmenata Na primjer p, za povezivanje datoteke IO.asm trebali biste napisati INCLUDE IO.asm S SEGMENT 'stack' … S ENDS D SEGMENT 'data' … D ENDS C SEGMENT 'code' PRETPOSTAVITE CS:C, SS:S, DS:D Početak : … …C KRAJ KRAJ Početak

Prijenos parametara između procedura (organizira se na zahtjev programera)

    Prolazak parametara kroz MP registre
Vrijednosti stvarnih parametara mogu se prenijeti kroz MP registre na zahtjev programera. Na primjer, ; postupak izračuna AX:= max (AX, BX) max proc far CMP AX, BX JGE Max1 MOV AX, BX Max1: RET max endp … ; u glavnom postupku ... MOV AX, A ; priprema parametara MOV BX, B ; za poziv procedure CALL max MOV C, AX ; spremanje rezultata...
    Prosljeđivanje parametara prema referenci znači prosljeđivanje adrese (naziva) memorijske lokacije koja odgovara stvarnom parametru (pronošenje imenovane vrijednosti iz asemblera u Pascal). Da biste to učinili, možete koristiti naziv memorijske lokacije ili učitati adresu u registar (BX, BP, SI ili DI) prije pozivanja procedure, budući da procedura može koristiti te registre za adresiranje.
Na primjer, tim LEA BX, B CALL……
    Prijenos parametara preko stoga.
Prolazak parametara kroz registre ograničen je na mali broj njih. Ako postoji mnogo parametara (više od 5), oni se prosljeđuju kroz stog na sljedeći način: - Glavni program zapisuje stvarne parametre (vrijednosti ili adrese) na stog; - Procedura koristi parametre zapisane na stog. Na primjer:; call p(a1,…, ak) PUSH a1 … PUSH ak CALL p … U proceduri se može koristiti dodatni pokazivač steka BP, ali na početku procedure treba pohraniti vrijednost BP koja je korištena u pozivnom programu, tj. ; početak postupka P P proc PUSH BP ; spremiti BP MOV BP, SP ; postavljanje BP-a na vrh stoga...Tada se može koristiti osnovno adresiranje. Na primjer, za zatvoreni poziv, povratna adresa, automatski gurnuta na stog, je adresa posljednjeg parametra ak. Prije povratka iz procedure, trebali biste vratiti BP naredbom POP BP, zatim očistiti stog proslijeđenih parametara kako se ne bi preopteretio pri višestrukom pozivanju procedura, tj. postavite SP na vrijednost 2*k veću nego što je bila nakon pozivanja procedure. Postoje 2 mogućnosti ispravnog povratka sa zahvata. a) podesite SP u pozivnom programu
; kraj postupka; u programu pozivanja
POP BPZVATI str
RETDODAJ SP, 2*k ; SP korekcija
PENDP
b) koristite naredbu return s restauracijom stoga, koja ima oblik za zatvoriti poziv RET (cnt) gdje je (cnt) brojač (konstantni izraz), veličina riječi. Naredba izvodi sljedeće akcije: IP:= Stack SP:= SP + (cnt) Tada kraj procedure izgleda ovako: POP BP RET 2*k p ENDP Za dugi poziv procedure povratna naredba izgleda kao RET (cnt) i izvodi sljedeće radnje: IP:= Stog CS:= Stog SP:= SP + (cnt) S ovim povratkom iz procedure, nije potrebna nikakva dodatna radnja u pozivnom programu.
    Problem sa spremanjem registara prilikom pozivanja procedure
Kako bi se spriječilo da procedura pokvari vrijednosti registara koji su korišteni u pozivnom programu, u tekstu procedure je potrebno prije korištenja bilo kojeg registra spremiti njegovu “staru” vrijednost na stog, a na kraju postupak vraćanja svih spremljenih vrijednosti. Na primjer, ako procedura koristi CH registar, onda ga treba pohraniti na stog, ali stog pamti samo riječ, pa će procedura sadržavati fragment: PUSH CX ; spremanje “starog” CX MOV CX, 0 ; korištenje CX u postupku...; prije izlaska iz POP CX procedure; vraćanje “starog” CX-a Dakle, dobivamo generaliziranu shemu zatvorene (NEAR) procedure s parametrima koji prolaze kroz registre i kroz stog

(naziv postupka) proc

PUSH BP za održavanje

Mov BP, SP stog

PUSH spremanje registara,

koristi u postupku

tijelo proc.

POP... oporavak registracije

POP BP oporavak BP

Ranije je na Internetu bio raširen tabularni izgled, kojem je ova stranica posvećena. Međutim, s vremenom je ovaj pristup izradi strukture web stranice zastario i zamijenjen blokovskim izgledom.

Razlike između blok izgleda i tabelarnog izgleda

Ako izgled tablice implicira da je sadržaj stranice unutar oznake

, tada se koncept rasporeda blokova temelji na aktivnoj uporabi univerzalnih oznaka
, koji sadrže sadržaj, uključujući druge oznake.

Blokovni raspored nema nedostatke tabelarnog izgleda - tražilice bolje je indeksiran, njegov kod nije toliko raširen, a blokovi

, koje vole nazivati ​​"slojevi", izvorno su bili zamišljeni kao univerzalni, odnosno "za sve", dok
je tablica koja bi trebala služiti za prikaz tabličnih podataka i ništa više.

Jedini primjetan nedostatak blok rasporeda je taj što se stranice napravljene na njemu mogu drugačije prikazati u preglednicima. Kako biste to izbjegli, trebate napraviti izgled "cross-browser", to jest, da ga svaki preglednik prikazuje jednako.

Suština rasporeda blokova

U grafički urednik Izrađuje se izgled web stranice: označava se gdje će se koji dio stranice (zaglavlje, dno, bočna traka, glavni sadržaj) nalaziti i koliko će prostora zauzimati, pripremaju se slike i pozadine.

Svaki dio stranice smješten je u svoj blok

: vrh stranice - u prvom, izbornik - u drugom, sadržaj - u trećem, itd. Svaki blok je ispunjen sadržajem koristeći HTML, a također je postavljen i stiliziran korištenjem CSS oznaka.

Konačni HTML dokument je zbirka blokova

sa sadržajem unutra. Dizajn se često nalazi u zasebnoj CSS datoteci, povezanoj sa stranicom s oznakom , ili barem u kontejneru

2024, applelavka.ru - Proučavanje računala. Samo nešto komplicirano. Naprave