Asemblerio kalba

Asemblerio kalba - tai programavimo kalba, kuria galima tiesiogiai nurodyti kompiuteriui, ką daryti. Asemblerio kalba beveik visiškai panaši į kompiuteriui suprantamą mašininį kodą, tik vietoj skaičių joje naudojami žodžiai. Kompiuteris iš tikrųjų negali tiesiogiai suprasti asemblerio programos. Tačiau jis gali lengvai pakeisti programą į mašininį kodą, pakeisdamas programos žodžius skaičiais, kuriuos jie reiškia. Tai atliekanti programa vadinama asembleriu.

Asemblerio kalba parašytas programas paprastai sudaro instrukcijos - nedidelės užduotys, kurias kompiuteris atlieka vykdydamas programą. Jos vadinamos instrukcijomis, nes programuotojas jomis nurodo kompiuteriui, ką daryti. Kompiuterio dalis, kuri vykdo instrukcijas, yra procesorius.

Kompiuterio asemblerio kalba yra žemo lygio kalba, o tai reiškia, kad ja galima atlikti tik paprastas užduotis, kurias kompiuteris supranta tiesiogiai. Norint atlikti sudėtingesnes užduotis, reikia kompiuteriui nurodyti kiekvieną iš paprastų užduočių, kurios yra sudėtingos užduoties dalis. Pavyzdžiui, kompiuteris nesupranta, kaip ekrane atspausdinti sakinį. Vietoj to, asembleriu parašyta programa turi jam pasakyti, kaip atlikti visus mažus veiksmus, susijusius su sakinio spausdinimu.

Tokią surinkimo programą sudarytų daugybė instrukcijų, kurios kartu atliktų tai, kas žmogui atrodo labai paprasta ir paprasta. Todėl žmonėms sunku skaityti asemblerio programą. Priešingai, aukšto lygio programavimo kalba gali būti viena instrukcija, pavyzdžiui, PRINT "Sveikas, pasauli!", kuri nurodys kompiuteriui atlikti visas smulkias užduotis už jus.

Asemblerio kalbos kūrimas

Kai kompiuterių mokslininkai pirmą kartą sukūrė programuojamąsias mašinas, jie jas tiesiogiai programavo mašininiu kodu, t. y. skaičių seka, nurodančia kompiuteriui, ką daryti. Rašyti mašininę kalbą buvo labai sunku ir užtruko ilgai, todėl galiausiai buvo sukurta asemblerio kalba. Asemblerio kalbą žmogui lengviau perskaityti ir ją galima parašyti greičiau, tačiau žmogui vis tiek daug sunkiau ja naudotis nei aukšto lygio programavimo kalba, kuria bandoma imituoti žmogaus kalbą.

Programavimas mašininiu kodu

Norėdamas programuoti mašininiu kodu, programuotojas turi žinoti, kaip kiekviena instrukcija atrodo dvejetainiu (arba šešioliktainiu) kodu. Nors kompiuteriui lengva greitai suprasti, ką reiškia mašininis kodas, programuotojui tai sunku. Kiekviena instrukcija gali būti kelių formų, kurios visos žmonėms atrodo tik kaip skaičių krūva. Bet kokia klaida, kurią kas nors padaro rašydamas mašininį kodą, bus pastebėta tik tada, kai kompiuteris atliks neteisingą veiksmą. Išsiaiškinti klaidą sunku, nes dauguma žmonių negali pasakyti, ką reiškia mašininis kodas, pažvelgę į jį. Pavyzdys, kaip atrodo mašininis kodas:

05 2A 00

Šis šešioliktainis mašininis kodas x86 kompiuterio procesoriui nurodo prie kaupiklio pridėti 42. Žmogui labai sunku jį perskaityti ir suprasti, net jei jis išmano mašininį kodą.

Asamblėjos kalbos naudojimas

Asemblerio kalba kiekvieną instrukciją galima užrašyti kaip trumpą žodį, vadinamą mnemoniku, po kurio seka kiti dalykai, pavyzdžiui, skaičiai ar kiti trumpi žodžiai. Mnemonika naudojama tam, kad programuotojui nereikėtų prisiminti tikslių mašininio kodo skaičių, reikalingų pasakyti kompiuteriui, kad šis ką nors padarytų. Asemblerio kalbos mnemonikos pavyzdžiai: add, kuris prideda duomenis, ir mov, kuris perkelia duomenis iš vienos vietos į kitą. Kadangi "mnemonika" yra neįprastas žodis, vietoj jo kartais vartojama frazė instrukcijos tipas arba tiesiog instrukcija, dažnai neteisingai. Po pirmojo žodžio esantys žodžiai ir skaičiai suteikia daugiau informacijos apie tai, ką reikia daryti. Pavyzdžiui, po žodžių junginio add gali būti nurodyta, kokius du dalykus sudėti, o po žodžių mov - ką ir kur perkelti.

Pavyzdžiui, ankstesniame skirsnyje pateiktą mašininį kodą (05 2A 00) galima užrašyti asembleriu taip:

 pridėti ax,42

Asemblerio kalba taip pat leidžia programuotojams paprasčiau užrašyti tikruosius programos naudojamus duomenis. Dauguma asemblerio kalbų palaiko galimybę lengvai įrašyti skaičius ir tekstą. Mašininiame kode kiekvieną skirtingo tipo skaičių, pavyzdžiui, teigiamą, neigiamą ar dešimtainį, tektų rankiniu būdu konvertuoti į dvejetainį, o tekstą reikėtų apibrėžti po vieną raidę kaip skaičius.

Asemblerio kalba yra vadinamoji mašininio kodo abstrakcija. Naudojant asemblerį programuotojams nereikia žinoti, ką skaičiai reiškia kompiuteriui, tai nustato asembleris. Iš tikrųjų asemblerio kalba vis dar leidžia programuotojui naudotis visomis procesoriaus funkcijomis, kurias jis galėtų naudoti naudodamas mašininį kodą. Šia prasme asemblerio kalba pasižymi labai gera, reta savybe: ji turi tokį patį gebėjimą išreikšti dalykus kaip ir tas dalykas, nuo kurio ji abstrahuojasi (mašininis kodas), tačiau ją daug lengviau naudoti. Dėl šios priežasties mašininis kodas beveik niekada nenaudojamas kaip programavimo kalba.

Išardymas ir derinimas

Kai programos baigiamos, jos jau būna paverstos mašininiu kodu, kad procesorius galėtų jas paleisti. Tačiau kartais, jei programoje yra klaida (klaida), programuotojai nori, kad būtų galima pasakyti, ką daro kiekviena mašininio kodo dalis. Išardymo programos - tai programos, kurios padeda programuotojams tai padaryti, nes programos mašininį kodą paverčia atgal į asemblerio kalbą, kurią daug lengviau suprasti. Disassembleriai, kurie mašininį kodą paverčia surinkimo kalba, veikia priešingai nei asembleriai, kurie surinkimo kalbą paverčia mašininiu kodu.

Kompiuterių organizavimas

Norint suprasti, kaip kompiuteriai yra organizuoti, kaip jie veikia labai žemu lygmeniu, reikia suprasti, kaip veikia asemblerio kalbos programa. Pačiu paprasčiausiu lygmeniu kompiuterius sudaro trys pagrindinės dalys:

  1. pagrindinę atmintį arba RAM, kurioje saugomi duomenys ir instrukcijos,
  2. procesorius, kuris apdoroja duomenis vykdydamas instrukcijas, ir
  3. įvesties ir išvesties (kartais sutrumpintai vadinamos I/O), kurios leidžia kompiuteriui bendrauti su išoriniu pasauliu ir saugoti duomenis už pagrindinės atminties ribų, kad vėliau juos būtų galima grąžinti.

Pagrindinė atmintis

Daugumoje kompiuterių atmintis skirstoma į baitus. Kiekviename baite yra 8 bitai. Kiekvienas atminties baitas taip pat turi adresą, kuris yra skaičius, nurodantis, kur atmintyje yra baitas. Pirmasis atminties baitas turi adresą 0, kitas - 1 ir t. t. Padalijus atmintį į baitus, ją galima adresuoti baitais, nes kiekvienas baitas gauna unikalų adresą. Atminties baitų adresų negalima naudoti atskiram baito bitui nurodyti. Baitas yra mažiausia atminties dalis, kurią galima adresuoti.

Nors adresas nurodo konkretų atminties baitą, procesoriai leidžia naudoti kelis atminties baitus iš eilės. Dažniausiai ši funkcija naudojama 2 arba 4 baitams iš eilės vaizduojant skaičių, paprastai sveiką skaičių. Vieni baitai kartais taip pat naudojami sveikiesiems skaičiams atvaizduoti, bet kadangi jie yra tik 8 bitų ilgio, juose galima laikyti tik 2 8arba 256 skirtingas galimas reikšmes. Naudojant 2 arba 4 baitus eilutėje, skirtingų galimų reikšmių skaičius atitinkamai padidėja iki 2 16, 65536 arba 2 32, 4294967296.

Kai programa naudoja baitą ar kelis baitus iš eilės, kad atvaizduotų ką nors, pavyzdžiui, raidę, skaičių ar ką nors kita, šie baitai vadinami objektu, nes jie visi yra to paties dalyko dalis. Nors visi objektai saugomi identiškuose atminties baituose, su jais elgiamasi taip, tarsi jie turėtų "tipą", kuris nurodo, kaip baitai turėtų būti suprantami: arba kaip sveikasis skaičius, arba kaip simbolis, arba kaip koks nors kitas tipas (pvz., neintegralinė reikšmė). Mašininį kodą taip pat galima laikyti tipu, kuris interpretuojamas kaip instrukcijos. Tipo sąvoka yra labai, labai svarbi, nes ji apibrėžia, kokius dalykus galima ir ko negalima daryti su objektu ir kaip interpretuoti objekto baitus. Pavyzdžiui, neigiamo skaičiaus negalima saugoti teigiamo skaičiaus objekte, o trupmenos negalima saugoti sveikojo skaičiaus objekte.

Adresas, nurodantis į daugiabajtį objektą (yra jo adresas), yra to objekto pirmojo baito adresas - baitas, kurio adresas yra mažiausias. Beje, reikia atkreipti dėmesį į vieną svarbų dalyką: pagal adresą negalima nustatyti objekto tipo ar net dydžio. Tiesą sakant, net pažvelgę į objektą negalite pasakyti, kokio tipo jis yra. Asemblerio kalbos programa turi sekti, kuriuose atminties adresuose yra kokie objektai ir kokio dydžio tie objektai yra. Tai daranti programa yra saugi dėl tipo, nes ji su objektais atlieka tik tuos veiksmus, kuriuos saugu atlikti atsižvelgiant į jų tipą. Programa, kuri to nedaro, tikriausiai neveiks tinkamai. Atkreipkite dėmesį, kad dauguma programų iš tikrųjų aiškiai nesaugo, koks yra objekto tipas, jos tiesiog nuosekliai kreipiasi į objektus - tas pats objektas visada laikomas to paties tipo objektu.

Procesorius

Procesorius vykdo (vykdo) instrukcijas, kurios pagrindinėje atmintyje saugomos mašininio kodo pavidalu. Dauguma procesorių turi ne tik prieigą prie atminties, bet ir kelias nedideles, greitas, fiksuoto dydžio erdves, kuriose laikomi objektai, su kuriais šiuo metu dirbama. Šios vietos vadinamos registrais. Procesoriai paprastai vykdo trijų tipų instrukcijas, nors kai kurios instrukcijos gali būti šių tipų derinys. Toliau pateikiama keletas kiekvieno tipo pavyzdžių x86 asemblerio kalba.

Instrukcijos, kuriomis skaitoma arba rašoma į atmintį

Toliau pateikta x86 asemblerio kalbos instrukcija nuskaito (įkelia) 2 baitų objektą iš baito, esančio adresu 4096 (0x1000 šešioliktainėje skaičiavimo sistemoje), į 16 bitų registrą, vadinamą "ax":

        mov ax, [1000h]

Šioje asemblerio kalboje kvadratiniai skliaustai aplink skaičių (arba registro pavadinimą) reiškia, kad šis skaičius turėtų būti naudojamas kaip adresas duomenims, kurie turėtų būti naudojami. Adreso naudojimas nurodant į duomenis vadinamas nukreipimu. Kitame pavyzdyje be laužtinių skliaustų į kitą registrą, bx, iš tikrųjų įkeliama vertė 20.

        mov bx, 20

Kadangi nenaudojamas joks nukreipimas, į registrą buvo įrašyta pati tikroji vertė.

Jei operandai (dalykai, esantys po mnemonikos) rodomi atvirkštine tvarka, instrukcija, kuri ką nors įkelia iš atminties, vietoj to, kad įrašytų į atmintį:

        mov [1000h], ax

Šiuo atveju į atmintį, esančią adresu 1000h, įrašoma ax reikšmė. Jei šis pavyzdys bus vykdomas iš karto po ankstesnio, 2 baitai adresais 1000h ir 1001h bus 2 baitai sveikojo skaičiaus, kurio vertė 20.

Matematines arba logines operacijas atliekančios instrukcijos

Kai kurios instrukcijos atlieka tokius dalykus kaip atimtis arba logines operacijas, pvz., ne:

Anksčiau šiame straipsnyje pateiktas mašininio kodo pavyzdys asemblerio kalba būtų toks:

        pridėti kirvį, 42

Čia 42 ir ax sudedami ir rezultatas vėl įrašomas į ax. x86 asembleriu taip pat galima sujungti prieigą prie atminties ir matematinę operaciją:

        pridėti ax, [1000h]

Šia instrukcija 2 baitų sveikojo skaičiaus, saugomo 1000h, vertė pridedama prie ax ir atsakymas įrašomas į ax.

        arba ax, bx

Ši instrukcija apskaičiuoja registrų ax ir bx turinį arba ir rezultatą įrašo atgal į ax.

Instrukcijos, kuriomis nusprendžiama, kokia bus kita instrukcija

Paprastai instrukcijos vykdomos tokia tvarka, kokia jos atsiranda atmintyje, t. y. tokia tvarka, kokia jos įvestos asemblerio kode. Procesorius jas tiesiog vykdo vieną po kitos. Tačiau, kad procesoriai galėtų atlikti sudėtingus dalykus, jie turi vykdyti skirtingas instrukcijas, atsižvelgdami į tai, kokie duomenys jiems buvo pateikti. Procesorių gebėjimas vykdyti skirtingas instrukcijas priklausomai nuo kokio nors rezultato vadinamas šakojimu. Instrukcijos, kuriomis nusprendžiama, kokia turėtų būti kita instrukcija, vadinamos šakojimo instrukcijomis.

Šiame pavyzdyje, tarkime, norima apskaičiuoti, kiek dažų reikės tam tikro ilgio kvadratui nudažyti. Tačiau dėl masto ekonomijos dažų parduotuvė jiems neparduos mažesnio dažų kiekio nei reikia 100 x 100 kvadratui nudažyti.

Norėdami apskaičiuoti, kiek dažų reikės pagal norimo nudažyti kvadrato ilgį, jie atlieka šiuos veiksmus:

  • iš kraštinės ilgio atimkite 100
  • jei atsakymas yra mažesnis už nulį, kraštinės ilgį nustatykite 100
  • padauginkite kraštinės ilgį iš savęs

Šį algoritmą galima išreikšti toliau pateiktu kodu, kuriame ax yra kraštinės ilgis.

        mov bx, ax     sub bx, 100    jge continue   mov ax, 100 continue: mul ax

Šiame pavyzdyje pateikiama keletas naujų dalykų, tačiau pirmieji du nurodymai yra gerai pažįstami. Jos nukopijuoja ax reikšmę į bx ir iš bx atima 100.

Šiame pavyzdyje vienas iš naujų dalykų vadinamas etikete - tai apskritai asemblerio kalbų sąvoka. Etiketės gali būti bet kas, ko tik nori programuotojas (išskyrus atvejus, kai tai yra instrukcijos pavadinimas, nes tai supainiotų asemblerį). Šiame pavyzdyje etiketė yra "continue". Asembleris ją interpretuoja kaip instrukcijos adresą. Šiuo atveju tai yra mult ax adresas.

Dar viena nauja sąvoka - vėliavos. x86 procesoriuose daugelis instrukcijų nustato procesoriaus "vėliavėles", kurias kita instrukcija gali naudoti spręsdama, ką daryti. Šiuo atveju, jei bx buvo mažesnis nei 100, sub nustatys vėliavėlę, kuri sako, kad rezultatas buvo mažesnis už nulį.

Kita instrukcija yra jge, kuri sutrumpintai reiškia "Jump if Greater than or Equal to". Tai yra atšakos instrukcija. Jei procesoriaus vėliavėlės nurodo, kad rezultatas buvo didesnis už nulį arba lygus nuliui, užuot tiesiog perėjęs prie kitos instrukcijos, procesorius peršoka prie instrukcijos, esančios ties continue žyme, t. y. mul ax.

Šis pavyzdys veikia gerai, tačiau dauguma programuotojų jo nerašytų. Atimties instrukcija teisingai nustatė vėliavėlę, tačiau ji taip pat keičia reikšmę, su kuria veikia, todėl reikėjo nukopijuoti ax į bx. Dauguma asemblerio kalbų leidžia naudoti palyginimo instrukcijas, kurios nekeičia nė vieno perduodamo argumento, bet vis tiek tinkamai nustato vėliavėles, ir x86 asembleris nėra išimtis.

        cmp ax, 100    jge continue   mov ax, 100 continue: mul ax

Dabar, užuot iš ax atėmus 100, patikrinus, ar šis skaičius mažesnis už nulį, ir vėl priskyrus jį ax, ax lieka nepakitęs. Vėliavėlės vis dar nustatomos taip pat, o šuolis vis dar atliekamas tais pačiais atvejais.

Įvestis ir išvestis

Nors įvestis ir išvestis yra esminė kompiuterijos dalis, nėra vieno būdo, kaip tai atlikti asemblerio kalba. Taip yra todėl, kad įvesties ir išvesties veikimas priklauso ne tik nuo procesoriaus, bet ir nuo kompiuterio sąrankos bei jame veikiančios operacinės sistemos. Pavyzdžių skyriuje "Hello World" pavyzdyje naudojami MS-DOS operacinės sistemos iškvietimai, o po jo esančiame pavyzdyje - BIOS iškvietimai.

Įvesties ir išvesties operacijas galima atlikti asemblerio kalba. Iš tiesų asemblerio kalba apskritai galima išreikšti viską, ką kompiuteris gali atlikti. Tačiau, nors asemblerio kalboje yra instrukcijų pridėti ir šakoti, kurios visada daro tą patį, asemblerio kalboje nėra instrukcijų, kurios visada atliktų įvesties ir išvesties veiksmus.

Svarbu atkreipti dėmesį į tai, kad įvesties ir išvesties veikimas nėra asemblerio kalbos dalis, nes tai nėra procesoriaus veikimo dalis.

Asamblėjos kalbos ir perkeliamumas

Nors asemblerio kalbos tiesiogiai nevykdo procesorius, o tai daro mašininis kodas, ji vis tiek turi daug bendro su juo. Kiekviena procesorių šeima palaiko skirtingas funkcijas, instrukcijas, taisykles, ką instrukcijos gali daryti, ir taisykles, kokius instrukcijų derinius kur galima naudoti. Dėl šios priežasties skirtingų tipų procesoriams vis tiek reikia skirtingų asemblerio kalbų.

Kadangi kiekviena asemblerio kalbos versija yra susieta su tam tikra procesorių šeima, jai trūksta vadinamojo perkeliamumo. Ką nors, kas yra perkeliama, galima lengvai perkelti iš vieno tipo kompiuterio į kitą. Kitų tipų programavimo kalbos yra perkeliamos, o asemblerio kalba apskritai nėra perkeliama.

Asemblerio kalba ir aukšto lygio kalbos

Nors asemblerio kalba leidžia lengvai naudotis visomis procesoriaus funkcijomis, šiuolaikiniuose programinės įrangos projektuose ji nenaudojama dėl kelių priežasčių:

  • Norint išreikšti paprastą programą asembleriu, reikia daug pastangų.
  • Nors asemblerio kalba nėra tokia linkusi į klaidas kaip mašininis kodas, ji vis tiek labai menkai apsaugo nuo klaidų. Beveik visose asemblerio kalbose neįtvirtinta tipų sauga.
  • Asemblerio kalba neskatina geros programavimo praktikos, pavyzdžiui, modulinio programavimo.
  • Nors kiekvieną atskirą asemblerio kalbos instrukciją lengva suprasti, sunku pasakyti, koks buvo ją parašiusio programuotojo ketinimas. Tiesą sakant, programos asemblerio kalbą taip sunku suprasti, kad įmonės nesijaudina dėl to, kad žmonės išmontuoja (gauna asemblerio kalbą) jų programas.

Dėl šių trūkumų daugumoje projektų naudojamos aukšto lygio kalbos, pavyzdžiui, Pascal, C ir C++. Jos leidžia programuotojams tiesiogiai išreikšti savo idėjas, o ne rūpintis, kaip nurodyti procesoriui, ką daryti kiekviename žingsnyje. Jos vadinamos aukšto lygio, nes idėjos, kurias programuotojas gali išreikšti tuo pačiu kodo kiekiu, yra sudėtingesnės.

Programuotojai, rašantys kodą kompiliuotomis aukšto lygio kalbomis, naudoja programą, vadinamą kompiliatoriumi, kad kodą paverstų asemblerio kalba. Kompilatorius parašyti daug sunkiau nei asemblerius. Be to, aukšto lygio kalbos ne visada leidžia programuotojams naudotis visomis procesoriaus funkcijomis. Taip yra todėl, kad aukšto lygio kalbos sukurtos taip, kad palaikytų visas procesorių šeimas. Skirtingai nuo asemblerio kalbų, kurios palaiko tik vieno tipo procesorius, aukšto lygio kalbos yra perkeliamos.

Nors kompiliatoriai yra sudėtingesni už asemblerius, dešimtmečius kuriant ir tyrinėjant kompiliatorius, jie tapo labai geri. Dabar daugeliui projektų nebėra daug priežasčių naudoti asemblerio kalbą, nes kompiliatoriai paprastai gali suprasti, kaip išreikšti programas asemblerio kalba taip pat gerai arba geriau nei programuotojai.

Programų pavyzdžiai

Programa "Hello World", parašyta x86 asamblėjos kalba:

adosseg .model small .stack 100h .data hello_message db 'Hello, World! ',0dh,0ah,'$' .code main proc mov ax,@data mov ds,ax mov ah,9 mov dx,offset hello_message int 21h mov ax,4C00h int 21h main endp end main

NASM x86 asembleriu parašyta funkcija, kuri spausdina skaičių į ekraną naudodama BIOS pertraukas. Modulinį kodą galima parašyti asembleriu, tačiau tam reikia papildomų pastangų. Atkreipkite dėmesį, kad viskas, kas eilutėje yra po kabliataškio, yra komentaras ir asembleris jį ignoruoja. Komentarų pateikimas asemblerio kalbos kode yra labai svarbus, nes dideles asemblerio kalbos programas labai sunku suprasti.

; void printn(int number, int base); printn: stumti  bp      mov     bp, sp push    ax         push    bx      stumti  cx      stumti  dx      stumti  si      mov     si, 0   mov        ax, [bp + 4]   ; skaičius     mov     cx, [bp + 6]   ; bazė gloop:  inc     si               ; eilutės ilgis        mov     dx, 0          ; nulis dx     div     cx               ; padalyti iš bazės    cmp     dx, 10         ; ar tai ge 10?        jge        num     pridėti dx, '0'        ; pridėkite nulį prie dx       jmp     anum num:        add     dx, ('A'- 10)  ; šešiaženklė vertė, prie dx pridėkite "A" - 10. anum:               dx             ; dx įrašykite į steką.        cmp     ax, 0          ; ar turėtume tęsti?        jne     gloop  mov     bx, 7h         ; dėl pertraukos tloop:        Pop     ax             ; gaukite jo vertę     mov     ah, 0eh        ; pertraukai         int     10h            ; rašyti simbolį       dec     si             ; atsikratyti simbolio   jnz     tloop  pop     si      pop     dx      pop     cx      pop        bx      pop     ax      pop     bp      ret    

Klausimai ir atsakymai

Klausimas: Kas yra asemblerio kalba?


A: Asemblerio kalba yra programavimo kalba, kuria galima tiesiogiai nurodyti kompiuteriui, ką daryti. Ji beveik visiškai panaši į kompiuteriui suprantamą mašininį kodą, išskyrus tai, kad vietoj skaičių joje naudojami žodžiai.

K: Kaip kompiuteris supranta asemblerio programą?


A: Kompiuteris iš tikrųjų negali tiesiogiai suprasti asemblerio programos, bet jis gali lengvai pakeisti programą į mašininį kodą, pakeisdamas programos žodžius skaičiais, kuriuos jie reiškia. Šis procesas atliekamas naudojant asemblerį.

K: Kas yra surinkimo kalbos instrukcijos?


A: Asemblerio kalbos instrukcijos yra nedidelės užduotys, kurias kompiuteris atlieka vykdydamas programą. Jos vadinamos instrukcijomis, nes nurodo kompiuteriui, ką daryti. Kompiuterio dalis, atsakinga už šių instrukcijų vykdymą, vadinama procesoriumi.

K: Kokio tipo programavimo kalba yra asembleris?


A: Asemblerio kalba yra žemo lygio programavimo kalba, o tai reiškia, kad ja galima atlikti tik paprastas užduotis, kurias kompiuteris supranta tiesiogiai. Norint atlikti sudėtingesnes užduotis, reikia kiekvieną užduotį suskaidyti į atskirus komponentus ir kiekvienam komponentui atskirai pateikti instrukcijas.

K: Kuo tai skiriasi nuo aukšto lygio kalbų?


A: Aukšto lygio kalbos gali turėti atskiras komandas, pavyzdžiui, PRINT "Hello, world!", kurios nurodys kompiuteriui automatiškai atlikti visas tas mažas užduotis, nereikalaujant nurodyti jų atskirai, kaip tai reikėtų daryti su asemblerio programa. Todėl aukšto lygio kalbas žmonėms lengviau skaityti ir suprasti nei surinkimo programas, sudarytas iš daugybės atskirų instrukcijų.

K: Kodėl žmonėms gali būti sunku skaityti surinkimo programą?


A: Todėl, kad norint atlikti sudėtingą užduotį, pavyzdžiui, atspausdinti ką nors ekrane arba atlikti skaičiavimus su duomenų rinkiniais, t. y. dalykus, kurie atrodo labai paprasti ir nesudėtingi, kai išreiškiami natūralia žmogaus kalba, reikia nurodyti daug atskirų instrukcijų, todėl vieną instrukciją gali sudaryti daugybė kodo eilučių, todėl žmonėms, kurie nežino, kaip kompiuteriai viduje veikia tokiu žemu lygmeniu, sunku sekti ir aiškinti, kas juose vyksta.

AlegsaOnline.com - 2020 / 2023 - License CC3