Datorsystem

Transcription

Datorsystem
Datorsystem
Laboration 1: Introduktion till maskinna¨ra programmering
Senast uppdaterad: 19 februari 2012
Version 1.3
Student:
L¨arare:
Underskrift:
Underskrift:
Datum:
Datorsystem Laboration 1
1
Inneh˚
all
1 Inledning
2
1.1
Introduktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.2
Labbens syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3
Innan du b¨orjar arbeta med labben . . . . . . . . . . . . . . . . . . . . . . .
2
1.4
Innan du kommer till labben ska du ha: . . . . . . . . . . . . . . . . . . . . .
3
2 F¨
orberedelseuppgifter
2.1
Skriv och studera ett exempelprogram . . . . . . . . . . . . . . . . . . . . .
3
2.1.1
Programbeskrivning . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1.2
Skriv sj¨alva exempelprogrammet . . . . . . . . . . . . . . . . . . . . .
4
2.1.3
Adressering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.1.4
HEX7-0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.1.5
Handassemblering . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3 Laborationsuppgifter
3.1
3.2
Egen kod
4.2
6
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3.1.1
Programbeskrivning . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3.1.2
Fl¨odesdiagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.1.3
Koden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
S¨atta ihop de tv˚
a programmen . . . . . . . . . . . . . . . . . . . . . . . . . .
8
3.2.1
8
F¨orklaring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 Redovisning
4.1
3
8
Demonstrera f¨orberedelseuppgifter . . . . . . . . . . . . . . . . . . . . . . . .
8
4.1.1
Adressering till DE2-kortet . . . . . . . . . . . . . . . . . . . . . . . .
8
4.1.2
Adressering till DE2-kortet . . . . . . . . . . . . . . . . . . . . . . . .
8
4.1.3
Handassemblering . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
Demonstrera laborationsuppgifter . . . . . . . . . . . . . . . . . . . . . . . .
9
4.2.1
K¨or programmet . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
4.2.2
G¨or en ¨andring i programmet . . . . . . . . . . . . . . . . . . . . . .
9
Datorsystem Laboration 1
1
2
Inledning
1.1
Introduktion
Assembler ¨ar ett programmeringsspr˚
ak p˚
a l˚
ag niv˚
a. Varje instruktion i assembler kan
o¨vers¨attas till en eller ett f˚
atal instruktioner f¨or sj¨alva maskinvaran. Att ha kunskap i
maskinn¨ara programmering ¨ar d¨arf¨or viktigt f¨or att kunna f¨orst˚
a hur datorer ¨ar uppbyggda
och hur de fungerar.
Efter den h¨ar laborationen ska du ha bekantat dig med maskinn¨ara programmering och f˚
att
en st¨orre f¨orst˚
aelse f¨or hur assembler ¨overs¨atts till maskinkod.
1.2
Labbens syfte
Efter laborationen ska du:
1. ha f˚
att praktisk erfarenhet av hur DE-kortet kan anv¨andas
2. kunna l¨asa och f¨orst˚
a flow charts
3. kunna skriva enkel maskinn¨ara kod utifr˚
an flow charts och programf¨orklaring
4. ha en k¨ansla f¨or hur de olika registren anv¨ands i assembler
5. ha f˚
att st¨orre f¨orst˚
aelse f¨or hur programmeringsspr˚
ak ¨overs¨atts till maskinkod
1.3
Innan du b¨
orjar arbeta med labben
L¨as f¨oljande delar i kursboken:
• Introduktion till kapitel 10: s 367 - 376
• Kapitel 10.4: s 380 - 389
• Kapitel 11.1: s 419 - 426
• Kapitel 11.3, fram till PDP-8: s 431 - 434
• Kapitel 11.5: s 444 - 446
Tittat igenom f¨oljande:
Datorsystem Laboration 1
• DE2 Media Computer manual
3
1
• General-purpose Registers, i sektion 1.3 i Nios II Reference Handbook
2
L¨art er hur man sl˚
ar upp ¨overs¨attningar mellan assembler och maskinkod i
• Kapitel 8 i Alteras Nios II Processor Reference Handbook2 .
Se ¨aven f¨oljande kursfilmer:
¨
• Film 1, Oversikt
av DE-kortet
3
• Film 3, Att k¨ora ett program p˚
a DE-kortet
• Film 4, Att skriva ett assemblerprogram
1.4
4
5
Innan du kommer till labben ska du ha:
• L¨ast igenom hela detta lab-PM
• L¨ost alla f¨orberedelseuppgifter
2
F¨
orberedelseuppgifter
2.1
2.1.1
Skriv och studera ett exempelprogram
Programbeskrivning
Exempelprogrammets funktion ¨ar att addera tv˚
a tal och sedan visa resultatet. N¨ar man
trycker p˚
a KEY3 ¨okas term 1 och med KEY2 ¨okar man term 2. Ett tryck p˚
a KEY1 r¨aknar
ut vad term 1 plus term 2 blir och visar resultatet. Term 1 visas p˚
a HEX6, term 2 p˚
a HEX4
och summan skrivs ut i HEX3-0.
Eftersom HEX-displayerna ¨ar ganska kr˚
angliga att arbeta med kommer ni bara att skriva
den logiska delen av programmet och sedan kalla p˚
a en subrutin som sk¨oter utskriften till
displayerna.
1
http://people.dsv.su.se/~ahn/da-VT12/DE2_MediaComp_manual.pdf
http://people.dsv.su.se/~ahn/da-VT12/niosii_ref.pdf
3
http://play.dsv.su.se/hypercaster/4057/width=640/height=360/link.js
4
http://play.dsv.su.se/hypercaster/4051/width=640/height=360/link.js
5
http://play.dsv.su.se/hypercaster/4055/width=640/height=360/link.js
2
Datorsystem Laboration 1
2.1.2
4
Skriv sj¨
alva exempelprogrammet
¨
Oppna
en textredigerare (exempelvis Notepad++) och skapa en ny fil med namnet labb1.s.
Fil¨andelsen .s anv¨ands f¨or att markera att det ¨ar en assemblerfil. I filen labb1.s kommer
du att skriva den kod som utf¨or sj¨alva additionen av de tv˚
a termerna. Resten av den kod
som beh¨ovs f¨or att hantera sjusegmentsdisplayerna och knapptryckningarna finns i http:
//people.dsv.su.se/~ahn/da-VT12/labb1.zip.
F¨or att slippa upprepa data i flera filer har adresserna till knapparna och sjusegmentsdisplayerna sparats i en egen fil. Inkludera den filen med hj¨alp av raden nedan:
.include "address_map.s"
Sedan kommer sj¨alva koden, vilket man visar med en rad som deklarerar att allt som f¨oljer
a¨r programkod:
.text
N¨asta steg ¨ar att deklarera vilka delar av v˚
art program som ¨ar ˚
atkomliga f¨or andra program.
Det g¨or man genom att skriva vilka delar som ¨ar globala. I detta program anv¨ands en
startpunkt som heter start d¨ar k¨orningen ska b¨orja. Du deklarerar att start ¨ar global med
f¨oljande rad:
.global _start
Sedan kommer sj¨alva programmet. I b¨orjan l¨agger vi till de olika adresserna till DE2-kortet
som vi kommer beh¨ova senare. Eftersom dessa redan finns listade i address map.s skriver vi
bara in namnet p˚
a konstanterna f¨or de olika adresserna och placerar dem i olika register.
Dessa adresser kommer inte anv¨andas i den h¨ar delen av programmet, men a¨r viktig f¨or att
resten av koden ska fungera. P˚
a det h¨ar viset kan du dock se hur de adresser som skrevs in
i address map.s anv¨ands.
_start:
movia
movia
movia
r17,KEY31_BASE
r18,HEX30_BASE
r19,HEX74_BASE
/*Pushbutton KEY3_1 base address*/
/*HEX3_HEX3_0 base address*/
/*HEX7_HEX7_4 base address*/
Sedan g¨ors en ber¨akning ¨over vad som ska skrivas ut som svar. I detta exempelprogram ¨ar
det en enkel addition, men ni kommer senare ¨andra koden h¨ar. Detta ¨ar n˚
agot som kommer
utf¨oras m˚
anga g˚
anger under programmets g˚
ang, s˚
a vi s¨atter en rubrik h¨ar f¨or att kunna
hoppa tillbaka senare.
Datorsystem Laboration 1
5
CALC:
add
r3,r22,r23
F¨or att kalla p˚
a en annan subrutin anv¨ander man instruktionen call. H¨ar ska vi kalla p˚
a
calc value, som finns i en av de andra filerna som anv¨ands under den h¨ar laborationen.
call
calc_value
N¨ar subrutinen ¨ar klar och returnerar ska ber¨akningen utf¨oras igen, s˚
a vi hoppar tillbaka till
CALC.
br
CALC
Slutligen ska vi ber¨atta att koden a¨r slut s˚
a vi l¨agger till en sista kodrad:
.end
2.1.3
Adressering
I DE2 Media Computer manual kan ni hitta adresserna till de olika komponenterna p˚
a DE2kortet. F¨or att exempelprogrammet ska fungera m˚
aste ni l¨agga in de korrekta adresserna till
f¨oljande komponenter:
• HEX3 0
• HEX7 4
• KEY3 1
Uppgift:
Skriv in de korrekta adresserna p˚
a r¨att plats i address map.s.
2.1.4
HEX7-0
Sjusegmentsdisplayerna p˚
a HEX7-0 fungerar p˚
a ett speciellt s¨att, och beh¨over en viss
hantering f¨or att skriva ut r¨att siffror i rutorna. L¨as sektion 2.3.2 7-Segment Displays Parallel
Port i manualen DE2 Media Computer och best¨am de bitm¨onster som kr¨avs f¨or att siffrorna
0 till 9 ska synas i sjusegmentsdisplayerna. Skriv sedan in r¨att bitm¨onster p˚
a r¨att plats i
filen HEX values.s. Du f˚
ar sj¨alv v¨alja om du vill skriva in bitm¨onstren som bin¨ara eller
hexadecimala tal.
Uppgift:
Skriv in de korrekta m¨onstren i HEX values.s
Datorsystem Laboration 1
2.1.5
6
Handassemblering
I grund och botten arbetar en dator bara med ettor och nollor, ¨aven om vi kan ge den
instruktioner p˚
a spr˚
ak som ¨ar enklare f¨or oss att f¨orst˚
a. F¨or att se hur det g˚
ar till kommer
vi nu ¨overs¨atta n˚
agra rader assemblerkod till ren maskinkod. Med hj¨alp av Alteras Nios II
Processor Reference Handbook ska ni handassemblera f¨oljande rader kod.
add
r3,r22,r23
call
mov
mov
br
calc_value
r3,r4
r2,r22
CHECK_THIS
movia
beq
r4,0xB30045
r3,r4,CALC
Anv¨and er av dessa adresser f¨or register och konstanter:
calc_value:
CHECK_THIS:
CALC:
r2:
r3:
r4:
r22:
r23:
0x10F398
0xF68C
0xF67C
0x2
0x3
0x4
0x16
0x17
Uppgift:
¨
Overs¨
att kodsnutten ovan fr˚
an assembler till maskinkod med hj¨alp av handboken.
3
3.1
3.1.1
Laborationsuppgifter
Egen kod
Programbeskrivning
I ert program ska ni implementera multiplikation med hj¨alp av addition. F¨or att kunna
implementera multiplikation med hj¨alp av addition kommer ni beh¨ova anv¨anda j¨amf¨orelser
och en loop.
Datorsystem Laboration 1
3.1.2
7
Fl¨
odesdiagram
Start
Kopiera r22 (term 1)
till ett ledigt register
Initiera en räknare i ett ledigt
register med startvärdet 2
Är räknaren större än term 2?
Nej
Ja
Flytta resultatet av
multiplikationen till r3
Addera term 1 till det register du
valde att spara term 1 i från början
Slut
Öka räknare med 1
Figur 1: Fl¨odesdiagram
3.1.3
Koden
Nu ska ni skriva ert f¨orsta egna assemblerprogram. Implementera de instruktioner som
fl¨odesdiagrammet anger. T¨ank p˚
a att ha en snygg registerf¨ordelning och att inte anv¨anda
fler register ¨an n¨odv¨andigt. V¨art att notera ¨ar att term 1 finns i register r22 och term 2 finns
i register r23, samt att ni sparar resultatet av multiplikationen i r3. Eftersom ni inte kan
¨andra v¨ardena i r22 och r23 beh¨over ni se till att spara undan dem vid behov i andra register
som ni kan ¨andra v¨ardet i utan att det p˚
averkar vad som visas p˚
a sjusegmentsdisplayerna.
Datorsystem Laboration 1
3.2
3.2.1
8
S¨
atta ihop de tv˚
a programmen
F¨
orklaring
B¨orja med att k¨ora programmet ni skrev i f¨orberedelseuppgifterna. F¨or att g¨ora det beh¨over
ni inte bara filen labb1.s som ni skrev utan ocks˚
a filerna som finns i zipfilen p˚
a http:
//people.dsv.su.se/~ahn/da-VT12/labb1.zip.
N¨ar ni ser att programmet fungerar som det ska, det vill s¨aga att ni kan ¨oka siffrorna i
sjusegmentsdisplayerna med KEY3 och KEY2 samt skriva ut resultatet av additionen n¨ar
ni trycker p˚
a KEY1, kan ni b¨orja ¨andra p˚
a ert program. Er kod f¨or att multiplicera de tv˚
a
termerna med hj¨alp av addition ska l¨aggas in under labeln CALC ist¨allet f¨or den addition
som nu finns d¨ar.
4
4.1
Redovisning
Demonstrera f¨
orberedelseuppgifter
Visa upp era f¨orberedelseuppgifter innan ni b¨orjar med laborationen.
4.1.1
Adressering till DE2-kortet
Visa upp de adresser som letats upp samt var i koden de sattes in.
Godk¨and:
4.1.2
Adressering till DE2-kortet
Visa de v¨arden ni skrev in f¨or utskriften p˚
a HEX7-HEX0, samt var i koden de sattes in.
Godk¨and:
4.1.3
Handassemblering
Visa upp de handassemblerade raderna samt f¨orklara vad som h¨ander i alla steg av
programmet.
Godk¨and:
Datorsystem Laboration 1
4.2
4.2.1
Demonstrera laborationsuppgifter
K¨
or programmet
K¨or det program ni skrivit och f¨orklara vad som h¨ander.
Godk¨and:
4.2.2
G¨
or en ¨
andring i programmet
Under redovisningen ombeds du g¨ora en mindre ¨andring i programmet. Visa upp denna.
Godk¨and:
9