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