Ehdollinen if-lauseke PHP:ssä. Kone- ja kokoonpanokieliohjelmointi Huomautuksia pinotoiminnoista

Usein on kätevää pystyä lopettamaan silmukka aikaisin, kun tietyt olosuhteet täyttyvät. Taukooperaattori tarjoaa tämän mahdollisuuden. Se toimii rakenteilla, kuten: while, do while, for, foreach tai switch.

Break-lause voi sisältää valinnaisen numeerisen argumentin, joka kertoo, kuinka monta sisäkkäistä rakennetta lopetetaan. Numeerisen argumentin oletusarvo on 1, joka päättää nykyisen silmukan. Jos kytkinkäskyä käytetään silmukassa, break/break 1 poistuu vain kytkinkonstruktiosta.

\n"; break 1; /* Poistu vain kytkinkonstruktiosta. */ case 10: echo "Iteraatio 10; mennään ulos
\n"; break 2; /* Poistu kytkinkonstruktiosta ja while-silmukasta. */ ) ) // toinen esimerkki ($bar1 = -4; $bar1< 7; $bar1++) { // проверка деления на ноль if ($bar1 == 0) { echo "Выполнение остановлено: деление на ноль невозможно."; break; } echo "50/$bar1 = ",50/$bar1,"
"; } ?>

Tietenkin joskus haluat mieluummin ohittaa yhden silmukan iteraatioista sen sijaan, että suoritat silmukan, jolloin tämä tehdään jatka-käskyllä.

jatkaa

Jos haluat lopettaa nykyisen koodilohkon käsittelyn silmukan rungossa ja siirtyä seuraavaan iteraatioon, voit käyttää jatka-käskyä. Se eroaa break-operaattorista siinä, että se ei pysäytä silmukkaa, vaan siirtyy yksinkertaisesti seuraavaan iteraatioon.

Jatka-operaattori, kuten break, voi ottaa valinnaisen numeerisen argumentin, joka osoittaa, kuinka monella sisäkkäisen silmukan tasolla loput iteraatiosta ohitetaan. Numeerisen argumentin oletusarvo on 1, joka ohittaa vain jäljellä olevan osan nykyisestä silmukasta.

"; jatka; ) echo "50/$bar1 = ",50/$bar1,"
"; } ?>

Huomaa, että silmukan ollessa käynnissä $laskurimuuttujan nolla-arvo ohitettiin, mutta silmukka jatkui seuraavalla arvolla.

mene

goto on ehdoton hyppyoperaattori. Sitä käytetään siirtymiseen ohjelmakoodin toiseen osaan. Paikka, johon sinun täytyy mennä ohjelmassa, on merkitty etiketillä (yksinkertainen tunniste), jota seuraa kaksoispiste. Jatkamiseksi sijoitetaan haluttu otsikko goto-lauseen perään.

Yksinkertainen esimerkki goto-lauseen käytöstä:

Goto-lauseella on joitain rajoituksia sen käytölle. Kohdetunnisteen on oltava samassa tiedostossa ja samassa kontekstissa, mikä tarkoittaa, että et voi hypätä funktion tai menetelmän rajojen ulkopuolelle, etkä yhdenkään niistä sisään. Et myöskään voi hypätä minkään silmukan tai vaihtokäskyn sisään. Mutta sitä voidaan käyttää pakenemaan näistä rakenteista (silmukoista ja kytkinkäskyistä). Tyypillisesti goto-lausetta käytetään monitasoisten break-lauseiden sijasta.

"; ) echo "silmukan jälkeen - ennen merkkiä"; // käskyä ei suoriteta end: echo "Jälkeen merkki"; ?>

Kuten muissakin ohjelmointikielissä, PHP:llä on valintalausekkeita. Niitä on yhteensä kolme:

  • ehdollinen lause if...else ;
  • kytkin kytkin ;
  • ehdollinen toiminta (?);

On syytä huomata, että PHP:ssä ei ole ehdotonta hyppyä goto-tunnisteessa, mutta tästä huolimatta goto-avainsana on varattu.

Tässä opetusohjelmassa tarkastellaan if...else-lausetta ja ehdollisia operaatioita, ja seuraavassa opetusohjelmassa käsitellään kytkinkytkintä.

If...else syntaksi on sama kuin C:ssä:

//jos uslovie on totta, niin pääsemme tänne operaattori1; //yhden operaattorin tapauksessa operaattori2; ... ) muuten // valinnainen {//jos uslovie on väärä, niin mennään tänne operaattori3; //yhden operaattorin tapauksessa operaattori4; //kiharat aaltosulkeet ovat valinnaisia ... } ?>

Huomautuksia:

  • muu ei ole pakollinen osa, mutta sitä käytetään useimmiten siksi Logiikka vaatii sitä.
  • Kuten koodin kommenteissa todettiin, kiharat aaltosulut () eivät ole välttämättömiä, jos meillä on vain yksi lause. Koska ehto voi olla joko tosi (1) tai epätosi (0), joko operaattori1, operaattori2 jne. tai operaattori3, operaattori4 jne. suoritetaan.

Tässä on erityinen esimerkki PHP:stä:

//Aseta muuttujan arvot$num1 = 10; $num2 = 7; jos ($num1 > $num2) ( //ehto on totta, mikä tarkoittaa, että olemme perillä echo "Ehto on tosi, koska 10 > 7
"; $num1+=$num2; // lisää muuttuja $num2 arvoon $num1; echo "\$num1 = ". $num1; // tulokseksi tulee 17) else echo "Koska tilanne on positiivinen, emme pääse tänne"; // On vain yksi muu lause, joten kiharoita ei ole ?>

Tässä on esimerkki, jossa else-lause on jätetty pois ja ehto koostuu kahdesta ehdosta:

6) echo "Ehdot ovat totta"; //Toinen esimerkki: if ($num1 == 10 || $num2 >= 100) echo "Ehdot ovat totta"; //Kaikissa tapauksissa ehdot ovat totta ?>

Sisäkkäiset olosuhteet

Kuten C-kielessä, PHP sallii sisäkkäisten ehtojen käytön:

//jos uslovie1 ja uslovie2 ovat totta, niin pääsemme tähän) muu ( //jos uslovie1 on totta ja uslovie2 on epätosi, olemme täällä) muu ( //jos uslovie1 ja uslovie2 ovat vääriä, niin pääsemme tähän } ?>

Voit kirjoittaa niin monta jos sisäkkäistä, jos haluat, mutta tällaiset rakenteet ovat erittäin monimutkaisia, joten niiden ymmärtäminen ohjelman virheenkorjauksessa on melko vaikeaa. Tässä on esimerkki sisäkkäisistä if-lauseista:

// tämän skriptin tulos on viesti: // $lippu1 on tosi ja $lippu2 on epätosi ?>

Sisäkkäiset ehdot käyttämällä if...elseif...else

PHP pystyy yhdistämään ehdolliset lauseet käyttämällä kaavaa: if...elseif...else . Tämä on paljon kätevämpää kuin tehdä ensin joukko ehtoja ja sitten lisätä niihin joukko muita. If...elseif...else-rakenteen syntaksi on seuraava:

Tällaisessa konstruktiossa else voidaan kirjoittaa vain kerran, mutta elseif voidaan kirjoittaa niin monta kertaa kuin haluat. Katsotaan myös, että yllä oleva malli on huonompi kuin kytkinkytkin.

Käytä endif-operaattoria

Lähes kaikki PHP:llä luodut moottorit käyttävät endif-operaattoria. Tämän operaattorin rakenne on esitetty alla:

... html-tunnisteet ja sisältö; ... ... html-tunnisteet ja sisältö; ...

Tämän suunnittelun mukavuuteen kannattaa kiinnittää huomiota kuin jos tuottaisimme kaiken sisällön kaiun kautta. Älä unohda laittaa kaksoispiste tilan jälkeen!

Ehdollisten operaattoreiden käyttäminen (?)

Ehdollisten operaattoreiden käyttö ei ole yleinen lähestymistapa paitsi PHP:ssä myös muissa vastaavissa kielissä, mutta niitä ei pidä unohtaa. Ehdollisen toiminnon syntaksi on seuraava:

Ensin tulee jokin ehto. Jos se on tosi, niin operaattori_1 suoritetaan, muuten operaattori_2 suoritetaan. Mielestäni rakenne ei ole kovin selkeä, joten kannattaa antaa pari PHP-esimerkkiä selventämiseksi. Esimerkiksi ehdollista operaattoria käyttämällä voit helposti toteuttaa luvun moduulin:

Ehdollisia operaatioita voi olla hyödyllistä käyttää joissakin lyhyissä lausekkeissa, joissa sinun on muutettava vain yhden muuttujan arvoa ehdosta riippuen.

Siirtymiä tarvitaan, jotta voidaan siirtyä pois ohjelman peräkkäisestä suorituksesta ja aloittaa lohkon suorittaminen toisesta paikasta. Nämä komennot vastaavat suurelta osin BASIC GO TO -komentoja.

Siirtymiä on:

· ehdollinen ja ehdoton;

· suhteellinen ja absoluuttinen.

Ehdollinen siirto suoritetaan (tai ei suoriteta) riippuen siitä, onko jokin ehto tosi vai ei. Samanlainen BASIC-muotoilu näyttää tältä:

JOS ......... SIIRRY SIITÄ ........

Ehdoton siirtymä suoritetaan aina, kun se tapahtuu ohjelmassa. Häntä ei sido mitkään ehdot.

Ehdoton siirto suoritetaan määritettyyn osoitteeseen. Osoite (kaksi tavua) määritetään toimintakoodin jälkeen.

Suhteellinen siirto suoritetaan useita vaiheita eteenpäin tai taaksepäin hyppykomentoa seuraavan komennon sisältävästä osoitteesta. Tässä mahdollisten siirtymien valikoima on rajoitettu. Se voi vaihdella -128 - +127 tavua, ja sitä kutsutaan offsetiksi. Yksitavuinen offset-arvo s on määritetty toimintakoodin jälkeen. Se annetaan aina kahden komplementin binäärimuodossa.

Absoluuttinen hyppykomentomuisti alkaa aina J.P.(hyppy), ja suhteellinen siirtymä - kanssa JR(hyppy suhteellinen - suhteellinen hyppy).

Tässä ryhmässä on kaikkiaan 17 joukkuetta ja tarkastelemme niitä neljässä alaryhmässä.

5.9.1. Ehdottomat hyppykomennot.

Muistitekniikka

Koodi

Muistitekniikka

Koodi

J.P.nn

C3 n n

JP (HL)

JP (IX)

DD E9

JP (IY)

FD E9

Tiimi J.P.nn aiheuttaa hypyn kahdella tavulla määritettyyn osoitteeseen nn. Tämä osoite ladataan automaattisesti ohjelmalaskuriin (rekisteripari PC) ja ohjelma jatkuu tästä osoitteesta alkaen.

Joukkueet JP (HL), JP (IX), JP (IY) käytä epäsuoraa osoitetta. Siis esimerkiksi käskystä JP (HL) siirrytään HL-rekisteriparin sisältämään osoitteeseen.

5.9.2. Suhteellinen ehdoton hyppy.

Tässä alaryhmässä on vain yksi joukkue: JRs, - sen koodi on 18, jota seuraa offset-arvo s-128 - +127, määritelty kahden komplementin binäärimuodossa. Muistetaan, että esimerkiksi tässä muodossa FE (254) ei tarkoita 254 tavua eteenpäin, vaan 2 tavua taaksepäin, ts. (-2).

Toinen suhteellisen siirtymän ominaisuus on se, mistä eteenpäin tai taaksepäin siirtyminen alkaa. Muista, että sitä ei lasketa osoitteesta, jossa komento sijaitsi JR, vaan siitä, jossa sitä seuraava operaatiokoodi sijaitsee, koska kun joukkue tapasi JR, ohjelmointilaskuriin PC Seuraavan komennon alun osoite on jo lähetetty ja lähtölaskenta alkaa siitä. Esimerkiksi:

Muistitekniikka

Osoite (kymmenen)

Kommentti

LD A,FF

Lataa numero 255 akkuun

JOULUKUU A

Pienennä A 1:llä

JR FD

Hyppää kolme tavua taaksepäin

NOP

Suhteellisten siirtymien käyttö tarjoaa lukuisia arvokkaita etuja absoluuttisiin verrattuna sekä ohjelmia kirjoitettaessa että ohjattaessa. Huomaa, että yllä olevassa esimerkissä ei ole osoitteita. Sijoitimme sen osoitteesta 60000 alkaen, mutta jos sijoitamme sen muualle, se toimii täsmälleen samoin suorittaen samat toiminnot.

Absoluuttisten hyppyjen puuttuminen tekee aliohjelmasta siirrettävän (siirrettävän). Jos sen sisällä on absoluuttisia siirtymiä, siitä tulee uudelleensijoittamaton. Emme kuitenkaan saa unohtaa, että siirretty menettely ei välttämättä salli kutsuja siihen ohjelman muista osista (katso 5.12), tai ennen tällaista kutsua on ilmoitettava, missä tämä menettely sijaitsee. Voidaan varata erityinen ohjelmamuuttuja, joka ilmaisee proseduurin sijainnin.

Siirrettävyys on kätevää kirjoitettaessa, koska sinun ei tarvitse miettiä, missä menettely sijaitsee. Ja käytön aikana voit varata sille ne muistialueet, jotka ovat sinulle sopivia, riippuen toisesta ympäristöstä [huomautus 5].

5.9.3. Absoluuttiset ehdolliset hyppykomennot.

Näitä komentoja käyttämällä suoritetaan hyppy tiettyyn osoitteeseen, jos jokin ehto täyttyy. Z-80-käskyjärjestelmässä tämä ehto liittyy rekisterilippujen tilaan F, nimittäin: kantaa lippua ( C), nolla lippu ( Z), merkkilippu ( S), ja ylivuoto/pariteettilippu ( P/V).

Muistitekniikka

Kommentti

JP C,nn

D.A. n n

Siirtyminen tiettyyn osoitteeseen suoritetaan, jos siirtolippu on päällä.

JP NC,nn

D2 nn

Siirtyminen tiettyyn osoitteeseen suoritetaan, jos siirtolippu tyhjennetään.

JP Z,nn

C.A. nn

Siirtyminen tiettyyn osoitteeseen suoritetaan, jos nollalippu on päällä.

JR NZ,nn

C2 nn

Siirtyminen tiettyyn osoitteeseen suoritetaan, jos nollalippu tyhjennetään.

JR P,nn

F2 nn

Siirtyminen tiettyyn osoitteeseen suoritetaan, jos merkkilippu on päällä.

JR M,nn

FA. nn

Siirtyminen tiettyyn osoitteeseen suoritetaan, jos merkkilippu tyhjennetään.

J.P.O.nn

E2 nn

Hyppy tiettyyn osoitteeseen suoritetaan, jos pariton määrä bittejä on kytketty päälle tai jos ylivuotoa ei ole.

JP P.E.nn

E.A. nn

Hyppy tiettyyn osoitteeseen suoritetaan, jos parillinen määrä bittejä on kytketty päälle tai jos on ylivuoto.

5.9.4. Suhteelliset ehdolliset hyppykomennot.

Nämä komennot liikkuvat eteenpäin tai taaksepäin tietyn määrän tavuja lippujen tilasta riippuen C Ja Z.

Muistitekniikka

Kommentti

JR C,s

38 s

Mene s tavua jos lippu C mukana.

JR N.C.s

30 s

Mene s tavua jos lippu

C nollaa.

JR Z,s

28 s

Mene s tavua jos lippu Z mukana.

JR NZ,s

20 s

Mene s tavua jos lippu Z nollaa.

5.9.5. Kommentti lippujen kanssa työskentelemisestä.

Kanna lippua (KANSSA). Tämä lippu sijaitsee rekisterin nollabitissä F. Se osoittaa, onko akku ylivuodonnut absoluuttisessa binääriaritmetiikassa (eli onko yhteenlaskutulos suurempi kuin 255 vai vähennyksen tulos pienempi kuin 0). Kaikki komennot eivät vaikuta tämän lipun tilaan. Voit selventää komentojen vaikutusta eri lippuihin käyttämällä "Hakemistomme" taulukoita.

Pähkinänkuoressa:

1) Kaikki yhteen-, vähennys- ja vertailukomennot LISÄTÄ, ADC,SUB, SBC, C.P. vaikuttaa kantolippuun. Se syttyy, jos yhteenlaskettaessa tapahtui ylivuoto, vähennyksen aikana lainaa tai jos vertailussa operandin sisältö osoittautui suuremmiksi kuin akun sisältö.

2) Kaikki logiikkakomennot JA, TAI, XOR nollaa kantolippu.

3) Vaihtokomennot (katso Kohta 5.14.) vaikuttavat siirtolippuun.

Nolla lippu (Z). Tämä lippu on rekisterin kuudennessa bitissä F. Se syttyy, jos edellisen toiminnon tulos oli nolla, muuten se sammuu.

Huomioi muistiinpano ristiriita. Nollalippu on käytössä ja ei ole yhtä kuin nolla kun leikkauksen tulos yhtä kuin nolla.

1)Yksittäisten rekisterien kanssa työskenneltäessä nollalippuun vaikuttavat summaustoimintojen tulokset ( LISÄTÄ, ADC, INC), vähennys ( SUB, SBC, DEC), vertailut ( C.P.), sekä logiikka ( JA, TAI, XOR).

2) Rekisteriparin kanssa työskennellessä nollalippuun vaikuttavat vain aritmeettiset operaatiot ADC Ja SBC.

3) Rekisteröi latauskomennot LD eivät vaikuta nollalippuun, lukuun ottamatta erittäin harvinaisia ​​Spectrumin komentoja LD A, I; LD A,R.

4) Nollalippuun vaikuttavat myös komennot, joihin tulemme tutustumaan hieman myöhemmin: vaihtokomennot (osio 5.14.); bitin tarkistuskomennot (5.15.); lohkohakukomennot (5.16.).

Lipun merkki (S). Tämä lippu on rekisterin merkittävimmässä (seitsemännessä) bitissä F. Se syttyy, jos tulos on negatiivinen, ja nollautuu, jos se on positiivinen.

Mielenkiintoista on, että binäärikomplementtiaritmetiikassa suoritetuissa operaatioissa se on yhtä suuri kuin akun merkitsevin (seitsemäs) bitti, joka myös määrittää sisällön etumerkin.

Avainominaisuudet:

1)Yksittäisten rekisterien kanssa työskennellessä lisäystoimintojen tulokset vaikuttavat merkkilippuun ( ADD, ADC, INC), vähennys ( SUB, SBC, DEC), vertailut ( C.P.), sekä logiikka ( JA, TAI, XOR).

2) Kun työskentelet rekisteriparin kanssa, vain toiminnot vaikuttavat merkkilippuun ADC Ja SBC.

3) Rekisteröi latauskomennot LD eivät vaikuta merkkilippuun, paitsi komentoihin LD A, I; LD A,R.

4) Merkin lippuun vaikuttavat myös komennot, joihin tutustumme hieman myöhemmin: vaihtokomennot (luku 5.14.); lohkohakukomennot (5.15.).

Ylivuoto/pariteettilippu (P/V). Tämä lippu löytyy F-rekisterin toisesta bitistä. Sillä on kaksi tarkoitusta. Joillekin käskyille se osoittaa pariteetin läsnäolon sisällytettyjen bittien lukumäärässä, toisille se osoittaa ylivuodon komplementaarisessa binääriaritmetiikassa toiminnon seurauksena.

Selitys: Pariteetin käsite ei viittaa tässä akussa olevaan numeroon, vaan sen sisältämien bittien määrään. Esimerkiksi numerossa 33 (0011 0011) on neljä bittiä päällä ja siksi lippu on päällä, kun taas numerossa 34 (0011 0100) on kolme bittiä päällä ja lippu on pois päältä.

Termi "ylivuoto" viittaa tässä binäärikomplementtiaritmetiikkaan. Lippu kytkeytyy päälle, jos yhteenlaskutoiminnon seurauksena tapahtuu siirtymä luvusta välillä 00...7F numeroon välillä 80...FF tai vähennettäessä päinvastoin. Sanalla sanoen se kytkeytyy päälle, jos komplementaarisen binaariaritmeettisen säännön mukaan akun sisällön etumerkki muuttuu riippumatta siitä, mihin suuntaan.

Voit määrittää tarkalleen, mitkä toiminnot vaikuttavat tähän lippuun pariteettilippuna, mitkä vaikuttavat ylivuotolippuun ja millä ei ole vaikutusta ollenkaan käyttämällä “Viitekirjan...” taulukoita.

5.10. Toiminnot silmukassa

Hyvin usein ohjelmissa on tarpeen toistaa jokin laskutoimituslohko n kerran. BASICissa silmukkaoperaattoria käytetään näihin tarkoituksiin:

FOR i= 1 TO n

..............

SEURAAVA i

Kaikki FOR- ja NEXT-lauseiden välissä toistetaan n kerran. Tässä tapauksessa parametri i, jota kutsutaan silmukkaparametriksi, kasvaa yhdellä jokaisella siirrolla ja kun se saavuttaa n, silmukan suoritus keskeytyy ja ohjelma jatkuu NEXT-käskystä.

Konekoodeissa käytetään voimakasta komentoa tähän tarkoitukseen DJNZ s. Tämä ohje viittaa prosessorin B-rekisteriin. Kun prosessori kohtaa tämän käskyn, se vähentää rekisterin B sisältöä, tarkistaa nollan ja jos nolla saavutetaan, hyppää s tavua Hyvityssumma s annetaan binäärikomplementtimuodossa ja siirtymä voi olla joko eteenpäin tai taaksepäin, mutta useammin tietysti taaksepäin. Laskutoimituksia toistetaan, kunnes rekisterissä B saavutetaan 0.

Mnemoniikka - DJNZs; Koodi - 10 s.

Selitetään tämä esimerkillä.

Tiedät jo sen, kun prosessori kohtaa komennon NOP, se ei tee mitään, ts. on vain tauko. Sen kesto on 4 kellojaksoa. Jakson kesto riippuu tietokoneesi pääkvartsin taajuudesta ja voi vaihdella hieman koneesta toiseen. Mutta koska se on noin 3,5 MHz, yhden jakson kesto on mikrosekunnin murto-osa. Oletetaan, että haluat prosessorin pysähtyvän noin 200 kellojakson ajaksi. Voit tietysti laittaa 50 komentoa peräkkäin NOP, mutta tämä on erittäin epäkohteliasta ja lisäksi aiheuttaa suurta vahinkoa vapaan RAM-muistin määrälle.

Hyödynnetään tilaisuus järjestää laskutoimitusjakso ja toistetaan komento useita kertoja NOP. "Hakemiston..." taulukoista näet, että komennon suoritusaika on DJNZ kestää 13 kellojaksoa, jos rekisteri S ei 0 ja 8 sykliä, jos 0.

Kaikkiaan, jotta tauko kestää noin 200 tikkua, sinun on toistettava komento NOP 12 kertaa:

12*4 + 11*13 + 1*8 = 48 + 143 + 8 = 199

Sitten menettely näyttää tältä:

Muistitekniikka

Kommentti

NOP

DJNZ 253

Vähennä rekisterin sisältöä B yksikköä kohti

ja hyppää 3 tavua taaksepäin.

5.11. Pinoa komennot

Näiden ohjeiden avulla ohjelmoija voi kopioida rekisteriparien sisällön pinoon ja päinvastoin kutsua ne sieltä prosessorille. Tällöin lähetetään kaksi tavua kerralla, ts. kaksitavuinen numero (yleensä osoite, mutta ei aina). Lisäksi samassa ryhmässä on komentoja, joiden avulla voit vaihtaa joidenkin prosessorirekisterien sisältöä.

Tarkastellaan kolmea joukkueiden alaryhmää tässä ryhmässä.

5.11.1. Komennot tietojen tallentamiseksi pinoon.

Nämä komennot alkavat muistomerkillä TYÖNTÄÄ, joka sopii hieman kevytmieliseen venäläiseen vastineeseen "push" (kaukaiseen laatikkoon). Joten niitä käytetään, kun rekisteriparien sisältö on tilapäisesti tallennettava, kunnes sitä tarvitaan.

Muistitekniikka

Koodi

Muistitekniikka

Koodi

PUSH AF

PUSH HL

PUSH BC

PUSH DE

TYÖNTÄ IX

DD E5

TYÖNTÄ IY

FD E5

Ensimmäinen tavu työnnetään pinoon ja sen jälkeen alhainen tavu. PUSH-toiminnon jälkeen pinoosoitin (rekisteröi SP) pienenee kahdella yksiköllä. Se pienenee, koska pino "kasvaa" ylhäältä alas. Olemme jo puhuneet tästä.

5.11.2. Komennot datan kutsumiseen pinosta.

Nämä komennot poistavat tiedot pinosta ja lataavat sen vaadittuun rekisteriin. On syytä korostaa, että pinossa olevia tietoja ei ole sidottu mihinkään rekisteriin. Riippumatta siitä, mistä rekisteristä ne on purettu, ne voidaan ladata mihin tahansa muuhun rekisteriin, eikä fyysistä tapaa yleensä saada selville, mistä rekisteristä tiedot on purettu. Jos tämä on tärkeää, ohjelmoijan on itse valvottava sitä.

Tietoa pinosta hakevien komentojen muistiinpano alkaa sanalla POP("työntää ulos")

Muistitekniikka

Koodi

Muistitekniikka

Koodi

POP AF

POP HL

POP B.C.

POP DE

POP IX

DD E1

POP IY

FD E1

5.11.3. Joukkueetvaihtokanssapino.

Näitä joukkueita on kolme. Ne alkavat muistotekniikalla EX(vaihto - vaihto) ja palvelevat rekisteriparin sisällön lähettämistä pinoon ja pinon yläosan sisällön lähettämistä tälle rekisteriparille. Saman voi tehdä käyttämällä toista rekisteriä väliaikaisena tallennuspaikkana, mutta tätä helpottaa Exchange-komentojen avulla.

Muistitekniikka

Koodi

EX (SP), HL

EX (SP), IX

DD E3

EX (SP),IY

FD E3

5.11.4. Huomautuksia pinotoiminnoista.

Prosessoripino on konepino. Sitä ei pidä sekoittaa GO SUB -pinoon, joka on järjestetty BASICissa työskennellessä ja se muistaa rivinumeron, josta aliohjelma kutsuttiin. Sitä ei myöskään pidä sekoittaa laskimen pinoon. Spectrumissa on laskin, jota ohjaavat ROM-muistissa olevat rutiinit ja jota voidaan käyttää konekoodiohjelmointiin. Tutustumme häneen melko syvällisesti osiossa 5.13.

Konepino palvelee enemmän kuin vain tarjoamaan ohjelmoijalle kätevän paikan tallentaa tietoja tilapäisesti. Sen päätarkoitus on tallentaa osoitteet, joista aliohjelmia kutsutaan. Tämä on tarpeen, jotta prosessori tietää aliohjelman valmistuttua minne sen on palattava jatkaakseen laskelmia. Tältä osin sinun on oltava varovainen, kun työskentelet pinon kanssa.

Jos olet aliohjelmassa, kaikki pinoon laittamasi on poksattava ennen kuin aliohjelma poistuu kutsuvaan ohjelmaan. Toisaalta, koska tulos suoritetaan osoitteessa, joka sijaitsee kahdessa tavussa pinon päällä, voit taidokkaasti ohjata ohjelman logiikkaa manipuloimalla pinon päällä olevia numeroita, erityisesti tämä on kuinka monimutkaiset laskelmat järjestetään ohjelmissa.

5.12 Aliohjelmien kutsuminen

BASICissa aliohjelmat kutsuttiin GO SUB -käskyllä ​​ja paluu aliohjelman suorittamisen jälkeen suoritettiin RETURN-komennolla.

Konekoodissa ne vastaavat komentoja PUHELU– "haaste" ja RET- "paluu".


5.12.1. Kutsu komentoja.

Kutsu voi olla ehdoton tai siihen voi liittyä jokin rekisterilippujen tilan tarkistamiseen liittyvä ehto F. Aliohjelmien kutsumiseen on yhteensä 9 komentoa.

Muistitekniikka

). Jokainen tagi (osio) täytyy olla pari (/osio). Vaaditut parametrit ovat nimi Ja silmukka. Jakson (osion) nimi voi olla mikä tahansa kirjaimista, numeroista ja alaviivoista koostuva. Pyörät (osio) voidaan sisäkkäin ja sisäkkäisten osien nimien on oltava yksilöllisiä toisilleen. Muuttuva silmukka(yleensä arvojen joukko) määrittää silmukan iteraatioiden lukumäärän. Kun tulostetaan muuttujia osion sisällä, osion nimi on kirjoitettava muuttujan nimen viereen hakasulkeisiin. (osio) suoritetaan, jos parametri silmukka ei sisällä arvoja.

Ominaisuuden nimi Tyyppi Edellytetään Oletus Kuvaus
nimi merkkijono Joo n/a Osion nimi
silmukka sekoitettu Joo n/a Arvo, joka määrittää silmukan iteraatioiden määrän.
alkaa kokonaisluku Ei 0 Sen sijainnin indeksi, josta silmukka alkaa. Jos arvo on negatiivinen, aloituskohta lasketaan taulukon lopusta. Esimerkiksi, jos silmukkamuuttujassa on 7 elementtiä ja aloitusattribuutin arvo on -2, aloitusindeksi on 5. Virheelliset arvot (arvot taulukon ulkopuolella) leikataan automaattisesti lähimpään kelvolliseen arvoon.
askel kokonaisluku Ei 1 Askelarvo, jota käytetään taulukon läpikulkuun. Esimerkiksi askel=2 ilmaisee taulukon läpikulkua elementeillä 0,2,4... Jos askel on negatiivinen, niin taulukon läpi ajetaan vastakkaiseen suuntaan.
max kokonaisluku Ei 1 Silmukan iteraatioiden enimmäismäärä.
näytä boolean Ei totta Osoittaa, näytetäänkö tämä osio vai ei

Huomautus

Smarty-versiosta 1.5.0 lähtien istunnon ominaisuusmuuttujan syntaksi (%osionnimi.varmennimi%) on muutettu arvoon ($smarty.osion.osionnimi.varmennimi). Vanhaa syntaksia tuetaan edelleen, mutta näet vain esimerkkejä uudesta syntaksista.

indeksiä käytetään näyttämään taulukon nykyinen indeksi alkaen nollasta (tai aloitusattribuutista, jos sellainen on määritetty) ja kasvaen yhdellä (tai step-attribuutin arvolla, jos sellainen on määritetty).

Tekninen huomautus

Jos step- ja start-attribuutteja ei ole määritetty, indeksi on sama kuin iterointiosion attribuutti, paitsi että se alkaa 0:sta 1:n sijaan.

iteraatiota käytetään näyttämään silmukan nykyinen iteraationumero.

Huomautus

Tämä arvo on riippumaton aloitus-, vaihe- ja max-ominaisuuksista, toisin kuin indeksiominaisuus. Myös iteraatiot alkavat yhdestä, ei nollan kaltaisista indekseistä. rownum on iterointiominaisuuden synonyymi, ne toimivat samalla tavalla.

Esimerkki 7.38. ominaisuuden (osion) iteraatio

assign("custid",$id); ?> (osion nimi=cu loop=$custid start=5 step=2) iteration=($smarty.section.cu.iteration) index=($smarty.section.cu.index) id=($custid)
(/osio)

Tämän esimerkin suorittamisen tulos:

Iteraatio=1 indeksi=5 id=3005
iteraatio=2 index=7 id=3007
iteraatio=3 index=9 id=3009
iteraatio=4 index=11 id=3011
iteraatio=5 index=13 id=3013
iteraatio=6 index=15 id=3015

Tämä esimerkki käyttää iterointiominaisuutta taulukon otsikon tulostamiseen viiden rivin välein (käyttää (if) mod-operaattorilla - jaon loppuosa).

(osion nimi=co loop=$contacts) (jos $smarty.section.co.iteration % 5 == 1) (/jos) (/osio)
Nimi>KotiCellSähköposti
näkymä ($contacts.name) ($contacts.home) ($contacts.cell) ($contacts.email)


$GLOBALS muuttuja. Assosiatiivinen matriisi, joka sisältää viittaukset kaikkiin tällä hetkellä määritettyihin komentosarjan yleisen laajuuden muuttujiin. Muuttujien nimet ovat taulukon avaimia.

Jos haluat ilmoittaa globaalin muuttujan, sijoita se $GLOBALS-taulukkoon

$GLOBALS["testavain2"]="testiarvo2";

Voit näyttää kaikki $GLOBALS-taulukkomuuttujien arvot komennolla print_r($GLOBALS); tai näin:

Foreach ($GLOBALS muodossa $avain=>$arvo) echo "GLOBALS[".$key."] == ".$arvo."
";

$_SERVER muuttuja.

    $_REQUEST muuttuja- assosiatiivinen taulukko (array), joka sisältää oletusarvoisesti muuttujien $_GET, $_POST ja $_COOKIE tiedot. $_REQUEST-taulukon muuttujat välitetään komentosarjalle GET-, POST- tai COOKIE-menetelmillä, joten niihin ei voi luottaa, koska etäkäyttäjä olisi voinut muuttaa niitä. Niiden läsnäolo ja järjestys, jossa tietoja lisätään vastaaviin taulukoihin, määräytyy variables_order-direktiivin mukaan (GPCS on oletuksena asetettu).

    $_SESSION muuttuja

    $_ENV muuttuja. Täytetään, jos komentosarja käynnistettiin komentoriviltä. $_SERVER-taulukko sisältää kaikki muuttujat $_ENV-taulukosta.

    $http_response_header-muuttuja