Assemblerprogrammering för ARM del 1

Relevanta dokument
Assemblerprogrammering, ARM-Cortex M4 del 1

Assemblerprogrammering för ARM del 1

Assemblerprogrammering för ARM del 1

Assemblerprogrammering för ARM del 2

Assemblerprogrammering för ARM del 3

Maskinorienterad Programmering IT2, LP2-2016/2017

Assemblerprogrammering för HCS12

Assemblerprogrammets. struktur; exempel

Maskinorienterad Programmering LP2-2017/2018

Assemblerprogrammering, ARM-Cortex M4 del 3

Assemblerprogrammets struktur; exempel

Introduktion till ARM Cortex-M4

Maskinorienterad Programmering 2010/11

Arbetsbok för MD407. Göteborg i oktober 2017, Roger Johansson

Assemblerprogrammering - fördjupning

Digital- och datorteknik

Digital- och datorteknik

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Maskinorienterad programmering

Assemblerprogrammering del 2

Assemblerprogrammering del 1

Programmering av inbyggda system 2012/2013. Kodningskonventioner och programbibliotek. maskinnära programmering i C och assemblerspråk

Tentamen. Datorteknik Y, TSEA28

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Assemblerprogrammering del 3

Grunderna i stegkodsprogrammering

Tentamen med lösningsförslag

Tentamen. Datorteknik Y, TSEA28

Maskinorienterad Programmering LP3-2017/2018

Tentamen (Exempel) Datorteknik Y, TSEA28

Tentamen (Exempel) Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Maskinorienterad Programmering /2011. Maskinorienterad Programmering 2010/11. Maskinnära programmering C och assemblerspråk

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

Datorteknik. Tomas Nordström. Föreläsning 3. För utveckling av verksamhet, produkter och livskvalitet.

CE_O3. Nios II. Inför lab nios2time

Programmering av inbyggda system 2014/2015

Lågnivåprogrammering. Föreläsning 2 Lågnivåprogrammering. Binära tal. En enkel modell av datorns inre

Tentamen. Datorteknik Y, TSEA28

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Tentamen (Exempel) Datorteknik Y, TSEA28

I denna laboration undersöker vi hur aritmetiska beräkningar utförs. Vi tittar på olika variabeltyper: 8-bitars, 16-bitars, 32-bitars och flyttal.

Kodningskonventioner (XCC12) Specifikation av strncpy: Övningsexempel: Maskinorienterad Programmering 2011/2012

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen

Tentamen. Datorteknik Y, TSEA28

LEU240 Mikrodatorsystem

Tentamen (Exempel) Datorteknik Y, TSEA28

Övning2 Datorteknik, HH vt12 - Programmering

Styrenheten styrsignalsekvenser programflödeskontroll

Kontrollskrivning Mikrodatorteknik CDT S2-704

Mål. Datorteknik. Innehåll. Vad händer med en add-instruktion? Vad händer med en add-instruktion. Instruktioner som bitmönster i minnet

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 2. Programmering i C och assembler MIPS instruktionsarkitektur. Institutionen för elektro- och informationsteknologi, LTH

Datorteknik ERIK LARSSON

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte "ARM-instruktioner", A4-format, 17 sidor. Maxpoäng:

Tentamen. Datorteknik Y, TSEA28

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte" ARM-instruktioner", A4-format, 17 sidor. Maxpoäng: 60p

CE_O2. Nios II. Subrutiner med mera.

LEU500-Maskinorienterad programmering LP3-2016/2017

Tentamen. Datorteknik Y, TSEA28

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

CE_O1. Nios II. Enkla assembler-instruktioner.

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

Digital- och datorteknik

4.1. Assemblerspråket

Exempeltentamen Datorteknik, EIT070,

TSEA28 Datorteknik Y (och U)

Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion.

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION

Datorarkitekturer med operativsystem ERIK LARSSON

Tentamen. Datorteknik Y, TSEA28

Maskinorienterad programmering

Tentamen den 14 januari 2015 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Tentamen med lösningsförslag

Digital Aritmetik Unsigned Integers Signed Integers"

Lathund. C för inbyggda system

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Tentamen. Datorteknik Y, TSEA28

float Mindre rella tal ( floating point number ) double Rella tal/flyttal ( double precision floating point number )

Programmering i maskinspråk (Maskinassemblering)

Institutionen för datavetenskap 2014/15

"Crash Course in Programming"

TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1

Enkla datatyper minne

Tentamen med lösningsförslag

TDIU01 - Programmering i C++, grundkurs

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

Extra lab. Nu på fredag kl 8-12 Frivillig Enbart hjälp med projektuppgiften Ingen examination

Programmering i maskinspråk (Maskinassemblering)

Programmerbar logik. Kapitel 4

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

EDA Digital och Datorteknik

Ext-13 (Ver ) Exempel på RTN-beskrivning av FLEX-instruktioner

Data, typ, selektion, iteration

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Transkript:

Assemblerprogrammering för ARM del 1 Ur innehållet: Assemblerspråk Ordlängder och datatyper Variabeldeklarationer Programkonstruktioner Tilldelningar Uttrycksevaluering Ovillkorliga programflöden Läsanvisningar: Arbetsbok kap 1 och 2 Quick-guide, instruktionslistan Assemblerprogrammering för ARM- del 1 1

Assemblerprogrammets struktur; exempel Specifikation Registerallokering Implementering Assemblerprogrammering för ARM- del 1 2

Assemblerspråkets element ALLA textsträngar är context -beroende Mnemonic, ett ord som om det förekommer i instruktionsfältet tolkas som en assemblerinstruktion ur processorns instruktionsuppsättning. Mot varje sådan mnemonic svarar som regel EN maskininstruktion. Assemblerdirektiv, ett direktiv till assemblatorn. Symboler, textsträng. Ska bara förekomma i symbol- eller operand- fälten, I symbolfältet ska dessa alltid avslutas med : (kolon) Direktiv och mnemonics är inte reserverade ord i vanlig bemärkelse utan kan till exempel också användas som symbolnamn Assemblerprogrammering för ARM- del 1 3

Ordlängder och heltalstyper, ANSI C Maskinorienterad programmering Typ char signed char unsigned char short short int signed short signed short int unsigned short unsigned short int long long int signed long signed long int unsigned long unsigned long int int signed signed int unsigned unsigned int Förklaring Minsta adresserbara enhet som kan rymma en basal teckenuppsättning. Det är dock en heltalstyp som kan vara signed eller unsigned, detta är implementationsberoende. Tolkas som heltal med tecken. Måste minst kunna representera talområdet [ 127, +127], dvs. minst 8 bitar. Tolkas som heltal utan tecken. Måste minst kunna representera talområdet [0, 255], dvs. minst 8 bitar. Kort heltalstyp med tecken. Måste minst kunna representera talområdet [ 32767, +32767], dvs. minst 16 bitar. Observera att talområdet [ 32768, +32767] som fås vid 2-komplementsrepresentation, också är tillåtet. Kort heltalstyp utan tecken. Måste minst kunna representera talområdet [0, +65535], dvs. minst 16 bitar. Lång heltalstyp med tecken. Måste minst kunna representera talområdet [ 2147483647, +2147483647], dvs. minst 32 bitar. Lång heltalstyp utan tecken. Måste minst kunna representera talområdet [0, +4294967295], dvs. minst 32 bitar. Implementationsbestämd heltalstyp med tecken. Måste minst kunna representera talområdet [ 32767, +32767], dvs. minst 16 bitar. Observera att talområdet [ 32768, +32767] som fås vid 2- komplementsrepresentation, också är tillåtet. Observera speciellt att int kan vara synonym med short eller long. Typen int utan tecken. Assemblerprogrammering för ARM- del 1 4

Rättningsvillkor ("alignment") Av prestandaskäl har vi restriktioner på var olika datatyper kan placeras i minnet: int (32-bitar, word) får bara finnas på en adress jämnt delbar med 4, s.k "word alignment") short (16-bitar, halfword) får bara finnas på en adress jämnt delbar med 2, s.k "halfword alignment") char (8 bitar) kan finnas på såväl udda som jämn adress Assemblerdirektiv:.align 1 LC = (LC + 1) & ~1).align 2 LC = (LC + 3) & ~3) Assemblerprogrammering för ARM- del 1 5

Ordlängder och heltalstyper char c; /* 8-bitars datatyp, storlek byte */ short s; /* 16-bitars datatyp, storlek halfword */ long l; /* 32-bitars datatyp, storlek word */ int i; /* 32-bitars datatyp, storlek word */ Assemblerspråk: char c; short s; long l; int i; c:.space 1.ALIGN 1 s:.space 2.ALIGN 2 l:.space 4 i:.space 4 Assemblerprogrammering för ARM- del 1 6

Instruktioner för tilldelningar Instruktion Betydelse Datatyp LDRB Load byte char LDRH Load halfword short LDR Load word int MOV Move (int & 0xFF) STRB Store byte char STRH Store halfword short STR Store word int Assemblerprogrammering för ARM- del 1 7

Adresseringssätt Namn Syntax Exempel RTN Register direct Rx MOV R0,R1 R0 R1 Direct Symbol LDR R0,symbol R0 M(symbol) Immediate #const MOV R0,#0x15 R0 0x15 Register indirect [Rx] LDR R0,[R1] R0 M(R1) Adresseringssätt syntetiseras i själva verket av assemblatorn, exemplevis: LDR R0,=symbol ger symbols värde i R0 Vi testar i simulatorn Assemblerprogrammering för ARM- del 1 8

Tilldelningar char c; c = 1; short s; s = 1; int i; i = 1; Assemblerspråk: c:.space 1 MOV R0,#1 LDR R7,=c STRB R0,[R7].. s:.space 2 MOV R0,#1 LDR R7,=s STRH R0,[R7].. i:.space 4 MOV R0,#1 LDR R7,=variable STR R0,[R7].. Assemblerprogrammering för ARM- del 1 9

EXEMPEL Antag följande deklarationer på toppnivå : unsigned char a; signed char c; unsigned short b; signed short d; Koda följande tilldelningssatser i assembler: a = (unsigned char) b; c = (signed char) d; b = (unsigned short) a; d = (signed short) c; Vi löser på tavlan Assemblerprogrammering för ARM- del 1 10

Uttrycksevaluering DEST = (type of DEST) (uttryck); "värde uttryck" EXEMPEL: int a,b,c; a = b+c; (uttryck); "sanningsuttryck", dvs ==0 eller!= 0 EXEMPEL: (a+1); /* falskt om a==-1 */ (a <= b); /* falskt om a>b */ Assemblerprogrammering för ARM- del 1 11

Instruktioner för unära operationer C-operator Betydelse Datatyp Instruktion ~ bitvis not signed/unsigned MVN - negation signed/unsigned RSB DEST = operation (type of DEST) OPERAND; EXEMPEL: Antag följande deklarationer på toppnivå : char a,c; Koda följande tilldelningssatser i assembler: a = ~c; a = -c; Vi löser på tavlan Assemblerprogrammering för ARM- del 1 12

Kodgenerering, binära operationer DEST = (type of DEST) OPERAND1 operation (type of DEST) OPERAND2; Exempel för 32bitars ord: LDR R1,OPERAND1 (ev. teckenutvidga) LDR R2,OPERAND2 (ev. teckenutvidga) operation R0,R1,R2 LDR R7,=DEST STR R0,[R7] Assemblerprogrammering för ARM- del 1 13

Instruktioner för binära operationer C-operator Betydelse Datatyp Instruktion + addition signed/unsigned ADD - subtraktion signed/unsigned SUB * multiplikation signed/unsigned MUL / division signed/unsigned DIV & bitoperation AND signed/unsigned AND bitoperation OR signed/unsigned OR ^ bitoperation EOR signed/unsigned EOR << rotation vänster signed/unsigned LSL >> rotation höger signed ASR unsigned LSR Assemblerprogrammering för ARM- del 1 14

Addition av 32-bitars tal int ia,ib,ic; ia = ib + ic; Assemblerspråk: ia:.space 4 ib:.space 4 ic:.space 4 LDR R1,ia @ källoperand 1 LDR R2,ib @ källoperand 2 LDR R7,=ia @ adress till destinationsoperand ADD R0,R1,R2 @ operation STR R0,[R7] @ tilldelning Assemblerprogrammering för ARM- del 1 15

Teckenutvidgning, SXTB, SXTH, UXTB, UXTH Se Quick Guide Vi provar i simulatorn Assemblerprogrammering för ARM- del 1 16

Addition av 16-bitars tal short int ssa,ssb,ssc; sa = sb + sc; Eftersom alla instruktioner opererar på 32-bitar måste ingående operander först anpassas: unsigned short int usa = usb + usc; usa,usb,usc; sa:.space 2 sb:.space 2 sc:.space 2 LDR R1,=sb LDRH R1,[r1] SXTH R1,R1 LDR R2,=sc LDRH R2,[R2] SXTH R2,R2 ADD R0,R1,R2 LDR R7,=sa STRH R0,[R7] usa:.space 2 usb:.space 2 usc:.space 2 LDR R1,=usb LDRH R1,[R1] UXTH R1,R1 @ teckenutvidga LDR R2,=usc LDRH R2,[R2] UXTH R2,R2 @ teckenutvidga ADD R0,R1,R2 LDR R7,=usa STRH R0,[R7] Assemblerprogrammering för ARM- del 1 17

Addition av 8-bitars tal char ca,cb,cc; ca = cb + cc; Andra instruktioner för teckenutviddgning, i övrigt samma kod: unsigned char uca,ucb,ucc; uca = ucb + ucc; ca:.space 1 cb:.space 1 cc:.space 1 LDR R1,=cb LDRB R1,[R1] SXTB R1,R1 LDR R2,=cc LDRB R2,[R2] SXTB R2,R2 ADD R0,R1,R2 LDR R7,=ca STRB R0,[R7] uca:.space 1 ucb:.space 1 ucc:.space 1 LDR R1,=ucb LDRB R1,[R1] UXTB R1,R1 @ teckenutvidga LDR R2,=ucc LDRB R2,[R2] UXTB R2,R2 @ teckenutvidga ADD R0,R1,R2 LDR R7,=uca STRB R0,[R7] Assemblerprogrammering för ARM- del 1 18

Flödesdiagram för programstrukturer sub(p1,p2, ) RETUR(rv) subcall(param, ) id subcall Initieringar Sats 1 Sats 2 ; Sats 3 etc Inträde i och utträde ur subrutiner. Inträde, typiskt med subrutinens namn och symbolisk representation av eventuella parametrar då sådana finns. Utträde, ( RETUR ) typiskt med angivande av returnvärde (rv) om sådant finns. Subrutinanrop. Med parametrar, symbolisk representation av eventuella aktuella parametrar som skickas med subrutinanropet. Med returvärde, tilldelningsoperator placeras framför den anropade subrutinen. Engångsinitieringar. Placeras typiskt i omedelbar anslutning till en inträdessymbol Exekveringsblock. En eller flera satser som ordnats och exekveras sekvensiellt. sant uttryck? falskt Villkorsblock. Ett uttryck testas, utfallet kan vara sant eller falskt och exekveringsväg väljs därefter. Assemblerprogrammering för ARM- del 1 19

Exekveringsblock - sekvensiellt programflöde EXEMPEL:Assemblerspråk: block: block: MOV LDR STRB R0,#1 R7,=c R0,[R7] Samtliga blockets instruktioner exekveras alltid. Assemblerprogrammering för ARM- del 1 20