Zema līmeņa programmēšanas valoda

**Zema līmeņa programmēšanas valoda** ir programmēšanas valoda, kas nodrošina mazu vai nekādu abstrakciju no datora instrukciju kopas arhitektūras, proti, zema līmeņa programmēšanas valodā rakstītās instrukcijas ir strukturāli līdzīgas noteiktā procesora instrukcijām. Faktiski var apgalvot, ka zemā līmeņa valodas ir "tuvāk" mašīnai, proti, datora aparatūrai, bet "tālāk" no cilvēka jeb šajā gadījumā - programmētāja. Zema līmeņa valodā rakstīto instrukciju izpildes laiks ir ļoti ātrs, kas ir viena no galvenajām šī līmeņa valodas priekšrocībām. Papildus tam zemā līmenī izstrādātas datorprogrammas var darboties, izmantojot ļoti minimālu datora atmiņas daļu. 

Atšķirībā no augsta līmeņa programmēšanas valodām, kuras izmanto vairums programmētāju datorprogrammas izveides procesā, zemā līmeņa kods ir šifrēts un cilvēkam nav lasāms.  Tāpat zemā līmeņa valodā rakstīta koda izmanotjamība aprobežojas konkrētās ierīces piedāvātajā funkcionalitātē. Citiem vārdiem sakot, šādas programmas ir "nepārnesamas", jo tās ir optimizētas konkrētās ierīces sistēmas arhitektūrai. 

Tajā brīdī, kad augstāka līmeņa valodā rakstītās instrukcijas tiek deleģētas datora aparatūras vienībām to izpildei, tiek izmantots specifisks komunikācijas veids, ko datorzinātnēs definē kā asemblera valodu jeb montāžas valodu. Zemā līmeņa valodām atšķirībā no augstā līmeņa programmēšanas valodām nav nepieciesams kompilators vai specializēts koda tulks, jo šajā gadījumā datora procesors spēj tiešā veidā nolasīt un atbilstoši interpretēt zemā līmeņa valodā rakstītās programmas.

Datorzinātnēs zemā līmeņa valodu kritērijiem atbilst divas valodas. Par pirmās paaudzes valodām, kuru darbībai nav nepieciešamas papildus darbības kā komiplēšana vai interpretēšana, ir mašīnvalodas jeb mašīnkodi. Savukārt otrās paaudzes zemā līmeņa programmēšanas valoda tiek dēvēta par asamblervalodu. Otrās paaudzes valodā ir integrētas tādas pašas instrukcijas kā mašīnkodā, bet atšķirībā no mašīnkoda, asamblervalodas sintaksē instrukcijas un mainīgie tiek definēti izmantojot arī vārdu simbolus jeb īsas abreviatūras, piemēram, "Add", "sub", "Mul" u.c. attiecīgi saskaitīšanas, atņemšanas un reizināšanas darbību izpildei, ne tikai bināros ciparus.

Zemā līmeņa programmēšanas valodas tiek izmantotas ikreiz, kad augstā līmeņa programmēšanas valodās kā PHP, #C u.c. izstrādātās lietojumprogrammas darbojas, pārvalda un maina datora aparatūru un instrukciju kopas arhitektūru. Avota kods var tikt sagatavots, izmantojot vienkāršu teksta redaktoru vai integrēto izstrādes vidi (IDE), piemēram, programmēšanas valodai Java pielāgoto Eclipse vidi. Datora procesors nespēj atpazīt programmas izstrādātajā sagatavoto avota kodu tiešā veidā, tāpēc pēc tā izstrādes avota kods tiek kompilēts zemā līmeņa valodas skriptā. Augstā līmeņa valodā izstrādātas programmas tiek tulkotas mašīnkodā, izmantojot kompilētāju vai interpretētāju, bet asemblervalodas gadījumā - asembleru.  

## Mašīnkods
Mašīnkods ir instrukciju kopums, ko centrālais procesors saprot tieši un var rīkoties saskaņā ar to. Programma, kas rakstīta mašīnkodā, sastāv tikai no 0 un 1 — binārajiem cipariem. To ir ļoti grūti uzrakstīt un atkļūdot (angļu val. debug). Pat ļoti vienkāršā programmā var būt tūkstošiem 0 un 1.

Piemēram, lai datorsistēmā ierakstītu skaitli 120, tā attēlojums ir mašīnkodā jeb binārajā izteiksmē ir 1111000. Šī iemesla dēļ to ir ļoti grūti iemācīties. Lai pārvarētu šo problēmu, tika izgudrota asamblervaloda.

Galvenās mašīnkoda priekšrocības ir ātrums un tiešā piekļuve datora aparatūrai. Savukārt galvenie mašīnkoda trūkumi ir uzskaitīti zemāk: 

# Kods ir atkarīgs no konkrētas ierīce, piesaistīts tās funkcionalitātei;
# Kodu ir grūti izstrādāt; 
# Augsts kļūdas līmenis, rakstot programmu šajā valodā; 
# Kodu ir grūti modificēt. 

Teksta "Hello World" (latviešu val. "Sveika Pasaule") izteiksme mašīnkodā ir: 

## Asemblervaloda
Asamblervalodas sintakse satur dažas cilvēkam lasāmas komandas, piemēram, īsas abreviatūras, kas atšķirībā no mašīnkoda padara to vieglāk rakstāmu un saprotamu cilvēkam. Tā kā datori var saprast instrukcijas tikai zemā līmeņa programmēšanas valodā, ir nepieciešams specializēts "tulks", kas pārvērš asamblervalodā izstrādātu kodu mašīnkodā. "Tulkotāju", ko izmanto šim nolūkam, sauc par asambleri. Asamblervalodā rakstītā koda izpildes ātrums ir mazāks par mašīnkodu, jo tam ir lielāks abstrakcijas līmenis jeb asamblervaloda programmēšanas valodu hierarhijā atrodas tālāk no datora aparatūras. Savukārt mašīnkodam ir nulles abstrakcijas līmenis.

Augstā līmeņa programmēšanas valodās instrukciju veidošanai tiek izmantoti izteikumi (angļu val. statements), bet asamblervalodā tās ir īsas abreviatūras angļu valodā, kuras paredz konkrētas darbības: 

Galvenās asamblervalodas priekšrocības: 

# Salīdzinot ar mašīnkodu, viegli saprotama un lietojama;
# Salīdzinoši viegla koda labošana;
# Koda modificēšana ir iespējama.

Galvenie asamblervalodas trūkumi: 

# Kods ir atkarīgs no konkrētas ierīce, piesaistīts tās funkcionalitātei;
# Asamblervalodas lietošanai ir nepieciešamas padziļinātas datora paratūras zināšanas.