Priprava preprostega programa
Preprost program
Delovanje računalnika lahko ponazorimo s pisanjem programa za izračun
A+B-C. Ta izraz razstavimo na
naslednje operacije: A prepišemo v
akumulator, vsebini akumulatorja prištejemo B, nato odštejemo C
in končno ustavimo računalnik ter preverimo vsebino akumulatorja. Te operacije
lahko uredimo v tabeli s štirimi kolonami. Vsaka vrstica te tabele naj
predstavlja eno operacijo. Prva kolona je oznaka (label
) vrstice. Druga kolona vsebuje operacijo.
Tretja kolona vsebuje morebitni operand,
četrta kolona vsebuje komentar.
Lokacija |
Operacija |
Operand |
Komentar |
START |
LDA |
A |
Load Acc |
|
ADD |
B |
Add B to the Accumulator |
|
SUB |
C |
Sub C from the Accumulator |
|
HLT |
|
Halt the Computer |
|
JMP |
START |
Branch to START |
A |
DB |
4 |
Initialize A to 4 |
B |
DB |
3 |
Initialize B to 3 |
C |
DB |
2 |
Initialize C to 2 |
Preslikava programa v strojno kodo
Če hočemo ta program izvajati, ga moramo najprej preslikati
v strojno kodo. Zato moramo izbrati neko začetno
lokacijo v pomnilniku. Najlažje je, če v ta namen izberemo kar lokacijo
0.
Nato vsaki naslednji programski vrstici dodelimo neko pomnilniško lokacijo.
Če so inštrukcije zakodirane v en byte, bo vsaka naslednja inštrukcija
v vsaki naslednji pomnilniški lokaciji. Tako bo naša tabela sedaj taka:
Lokacija |
Operacija |
Operand |
Komentar |
00000 |
LDA |
A |
Load Acc |
00001 |
ADD |
B |
Add B to the Accumulator |
00010 |
SUB |
C |
Sub C from the Accumulator |
00011 |
HLT |
|
Halt the Computer |
00100 |
JMP |
START |
Branch to START |
00101 |
DB |
4 |
Initialize A to 4 |
00110 |
DB |
3 |
Initialize B to 3 |
00111 |
DB |
2 |
Initialize C to 2 |
Tvorimo lahko tabelo simbolov, ko podaja
pomnilniške lokacije (ML, memory location) za uporabljene simbole.
Simbol |
ML |
START |
00000 |
A |
00101 |
B |
00110 |
C |
00111 |
Operacijske kode posameznih vrst inštrukcij
našega računalnika so naslednje.
Operacija |
Op Koda |
Operand |
Komentar |
HLT |
000 |
XXXXX |
Ustavi računalnik |
LDA |
001 |
XXXXX |
Naloži ML XXXXX v akumulator
ACC |
ADD |
010 |
XXXXX |
Počisti C in prišteje ML XXXXX akumulatorju
ACC |
STO |
011 |
XXXXX |
Shrani ACC na ML XXXXX |
SUB |
100 |
XXXXX |
Setira C in odšteje ML XXXXX od akumulatorja
ACC |
BRA |
101 |
XXXXX |
Skok na lokacijo XXXXX če je ACC različen
od 0 |
BRC |
110 |
XXXXX |
Skok na lokacijo XXXXX če je C enak
0 |
JMP |
111 |
XXXXX |
Skok na lokacijo XXXXX |
Končno nadomestimo vsako simbolično kodo in operand
z ustrezno strojno kodo v skladu z zgornjimi tabelami.
Opomba: DB je navodilo (directive)
ki rezervira pomnilniško lokacijo (Memory Location) za nek simbol in inicializira
to lokacijo na neko vrednost med 0 to 255. Takim navodilom
pravimo tudi psevdoinštrukcije, ker so po
slovnični obliki podobne pravim inštrukcijam.
Končni program b+v strojnem jeziku prikazuje spodnja tabela.
Lokacija |
Operacija |
Operand |
Komentar |
00000 |
001 |
00101 |
Load accumulator with Location 5 |
00001 |
010 |
00110 |
Add Location 6 to the Accumulator |
00010 |
100 |
00111 |
Sub Location 7 from the Accumulator |
00011 |
000 |
00000 |
Halt the Computer |
00100 |
111 |
00000 |
Branch to Location 0 |
00101 |
000 |
00100 |
Value of A = 4 in this Location 5 |
00110 |
000 |
00011 |
Value of B =3 in this Location 6 |
00111 |
000 |
00010 |
Value of B =2 in this Location 7 |
Nalaganje programa v računalnik
Tvorjeno kodo moramo vpoisati v zaporedne lokacije računalnikovega pomnilnika
Preverjanje programa v pomnilniku
Pred izvajanjem programa preverimo, ali smo ga pravilno naložili..
Popravljanje napak v pomnilniku
Če ugotovimo napako ne neki pomnilniški lokaciji, jo lahko popravimo brez
ponovnega nalaganja programa.
Izvajanje programa
Ko je koda programa naložena in preverjena, sprožimo njeno izvajanje.
Koračno izvajanje programa
Če nam program ne da pravega rezultata, ga moramo razhroščiti
(debug). Pomagamo si tako, da njegovo izvajanje prožimo korak za korakom.
V tem načinu lahko po vsakem koraku preverimo stanje računalnikovih registrov.
Ustavljanje tekočega programa
V nekaterih primerih, morda zaradi naše programerske napake, program teče
v neskončni zanki. V takem primeru moramo njegovo izvajanje nasilno prekiniti.