Kas yra Inline Assembly?

Inline assembly (dar vadinama inline assembly kalba arba inline assembler) yra asamblėjos kalbos kodo blokas, kuris įterpiamas tiesiai į kitos kalbos funkcijas ir šaltinio kodą. Tai leidžia programuotojui įterpti grynos asamblėjos kalbos bloką į programą, kurioje likusi programos dalis naudoja ne surinkimo kalbą. Galimybė palaikoma kai kuriose kalbose, pvz., C, C++ ir Pascal, tačiau yra konkretaus naudojamo kompiliatoriaus ypatybė ir nebūtinai yra kalbos standarto dalis. Daugeliu atvejų tiesioginis surinkimas naudojamas norint pasiekti specialias centrinio procesoriaus (CPU) funkcijas, optimizuoti kodą arba atlikti labai žemo lygio operacijas, pvz., atminties išjungimą. Nors tam tikras kompiliatorius arba programavimo kalba gali palaikyti kelių platformų vykdomųjų failų kūrimą, naudojant tiesioginį surinkimą, programa paprastai apribojama sistemomis, kurios gali naudoti konkrečias surinkimo instrukcijas arba turėti atitinkamą architektūrą.

Yra keletas būdų, kaip kalba arba kompiliatorius leidžia įtraukti į eilutę surinkimą į standartinį šaltinio kodo failą. Vienas iš paprasčiausių būdų yra tiesiog apibrėžti surinkimo bloko pradžią, po kurios visos komandos interpretuojamos kaip tiesioginis surinkimas. Kai kurios integruotos kūrimo aplinkos (IDE) ir kompiliatoriai iš tikrųjų leidžia eilutiniam kodui naudoti programoje arba funkcijoje apibrėžtus kintamuosius, pirmiausia jų neįkeliant į registrus.

Kitas būdas, kuriuo eilutinis surinkimas apibrėžiamas šaltinio faile, yra naudoti specialią surinkimo tik kalbos funkciją. Šiuo atveju įterptinis kodas paprastai negali būti derinamas su nesurinkimo kodu, pvz., valdymo ciklu arba grąžinimo sakiniu. Kai įdiegiama tokiu būdu, tiesioginė funkcija taip pat paprastai turi aiškiai įjungti ir išjungti kintamuosius, kad būtų galima naudoti vietinius kintamuosius arba perduoti reikšmes už funkcijos ribų.

Vienas iš labiausiai paplitusių tiesioginio surinkimo kodo naudojimo būdų yra smulkus programos segmentų optimizavimas. Priklausomai nuo to, kaip integruotas įterptinis kodas, tai gali reikšti, kad reikia naudoti labiau žmogui suprantamas kalbos komandas, apvyniotas įterptuoju kodu, kuris tiesiogiai atlieka tam tikrus veiksmus labai greitai ir efektyviai. Be to, jei tikslinė sistema yra žinoma, kode gali būti naudojami specifiniai aparatūros registrai ir komandos, kurios gali pagreitinti programos vykdymą.

Inline surinkimas gali būti naudojamas norint tiesiogiai pasiekti operacinės sistemos dalis, procesoriaus ar net aparatinės įrangos prievadus, kai kiti metodai gali nepavykti arba sukelti sistemos klaidą. Tai gali būti naudojama norint greitai pakeisti vaizdo plokštės kadrus arba siųsti signalus tiesiai į tam tikrą pertraukimą arba aparatinės įrangos prievadą. Tačiau vienas iš pavojų naudojant surinkimo kodą tokiu būdu yra tai, kad gali būti sunku rasti mažas klaidas arba programa gali netikėtai sugesti tam tikrose sistemose.