DMasArk1 Pentium IA-32 Maskinarkitekturen. dMasArk2 Historie (1).. starter i 1970 med udviklingen af Intel 4004:

Slides:



Advertisements
Lignende præsentationer
Niveauer af abstrakte maskiner
Advertisements

Velkommen til Softwarekonstruktion
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
ISA-niveauet (1) Machine Language: You try to shoot yourself in the foot only to discover you must first reinvent the gun, gunpowder, the bullet, and your.
Pc-kørekort Sådan virker pc’en Keld Hinsch.
1 Pentium IA-32 Maskinarkitekturen. 2 Historie (1) Starter i 1970 med udviklingen af Intel 4004:
1 Pentium IA-32 Maskinarkitekturen Kort resume – uge 5.
Symbolsk maskinsprog.
Oversættelse af Java-programmer JavaBytecode javac Normalt oversættes Java-programmer til bytecode, som fortolkes af en JVM (Java Virtual Machine). Java.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal.
Hvordan man skriver koden.
1 Pentium IA-32 Maskinarkitekturen. 2 Historie (1) Starter i 1970 med udviklingen af Intel 4004:
Indledende Programmering Uge 5 - Efterår 2006 Om at udvikle korrekte og pålidelige programmer Susanne Lindros.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Intro Forelæsning 6 Linux Install Party i PC-Cafeen i morgen.
Delphi og C++ Builder C++ Referencer og pointere.
Multi-vejs hobe med ekstra bytes Foredrag: Claus Jensen Projektmedlemmer: Jyrki Katajainen, Fabio Vitale, Claus Jensen.
DComNet1 Computere og Netværk (dComNet) Jens Kargaard Madsen Jens Bennedsen
Swapping og paging Flytning af processer (swapping) eller dele af processer (paging) mellem arbejdslager og fjernlager. Baggrund: På den ene side skal.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal Aarhus Universitet.
EFI, Extensible Firmware Interface - BIOS – EFI-BIOS - EFI - Intel - Afløser el. mellemled for IBM PC Basic Input Output System (1980) UEFI, Unified Extensible.
Datalogi 1F Forår 2003 Multiprogrammering[3] Eksempler på multiprogrammeringskerner Jørgen Sværke Hansen
Program Design – 4 Introduktion til PHP. Dagens lektion Hvad er PHP?  - og lidt historie Hvordan virker PHP? Grundlæggende PHP  Variable  Typer  Løkker.
Lektion 7 Læsestof: Kopier fra Caranno
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
DATATYPER. For at tilpasse hvert felt i databasen til dets formål og dermed øge funktionalitet 1 bit er tilstrækkelig til at angive køn (0/1) men for.
DComNet1 Computere og Netværk (dComNet) Jens Kargaard Madsen Jens Bennedsen
Procestræ under afvikling af cp init login shell cp cp src dest.
DComNet1 ISA-niveauet (1) Machine Language: You try to shoot yourself in the foot only to discover you must first reinvent the gun, gunpowder, the bullet,
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Eksempler på en beregningsprocess… Puslespil ved ombytninger Maximum delsum.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Længste plateau En klassisk problemstilling (Gries, 1981) - og her i Java!!! Denne opgave drejer sig om at bestemme længden af det længste plateau i en.
Process Control Hardware baggrund Process begrebet i et OS Process tilstande Context switching.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
DComNet1 ISA-niveauet (2). dComNet2 Niveauer af virtuelle maskiner ISA niveauet / maskinkodeniveauet / maskinniveau.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Datalogi 1F: Multiprogrammering[3] 1 Planen for idag Kerner uden afbrydelser (KB4 kap. 6): –akernen: kerne med decentralt processkift –bkernen: kerne med.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal Analyseværktøjer [CLRS, 1-3.1]
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
Implementation i Software Hvad skal implementeres? Abstraktionsniveauer Assembler- og Højniveausprog Udveksling af Parametre Anvendelse af højniveausprog.
MATLAB Repetition og Udførelse af programmer Anders P. Ravn Institut for Datalogi Aalborg Universitet Forår 2005 >>mit_modul minf.m … minf(a) … mit_modul.m.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Kari Rye Schougaard, Ph.d.-stud. Værktøjer og Teknikker, 2006 A A R H U S U N I V E R S I T E T DATALOGISK INSTITUT Java på 20 minutter (eller lidt mere)
 Jens Bennedsen 2001Multimedie programmering11.1 Lingo Basis.
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Et Audio/ Video Framework Et framework for en audio/video applikation baseret på lokale og kilder tilgængelige på 1394 via AV/C protokollen.
Multiple processer på web-site Web- server filer Kunde 1 Kunde 2 Kunde p1p2p internet.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
UProcessorens hardware Architecture Kernen i en processor er ALUen. Det er den som kan udfører simple regne operationer. De tal den arbejdermed.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Fromelle sprog Per P. Madsen Afd. for proceskontrol.
Port access  Indtil nu har vi anvendt færdige metoder til at tænde og slukke for LEDs, men den metode virker kun så længe vi arbejde med Keil boardet.
Port access I det efterfølgende vil vi anvende databladsoplysninger frem for anvende de færdige metoder.
Embedded SW – C & picoBlaze
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
Studiepraktik Thomas Bøgholm Mikkel Hansen Jacob Elefsen
Programmering.
ROBOTTERNE KOMMER - OZOBOTTERNE.
Præsentationens transcript:

dMasArk1 Pentium IA-32 Maskinarkitekturen

dMasArk2 Historie (1).. starter i 1970 med udviklingen af Intel 4004:

dMasArk3 Historie (2).. baglæns kompatibilitet tilbage til 8086.

dMasArk4 Dokumentation.. officiel dokumentation fra Intel (Pentium 4): Software Developer’s Manual: Volume 1: Basic Architecture (450 pp). Volume 2A: Instruction Set Reference (A-M) (596 pp). Volume 2B: Instruction Set Reference (N-Z) (428 pp). Volume 3: System Programming Guide (836 pp). se endvidere:

dMasArk5 Pentium IA-32 software hardware IA-32

dMasArk6 Maskinkode niveauet Registre. Lagermodellen. Datatyper. Maskininstruktioner. Instruktionsformater. Addresseringsformer.

dMasArk7 Registre 6 generel-purpose 32-bit registre: eax – akkumulator for operander og resultater. ebx – bruges oftest til pointere (lager adresser). ecx – bruges specielt ifm. løkker. edx – bruges specielt ifm. multiplikation/division. esi/edi – bruges specielt ifm. manipulation af strenge. 4 special purpose 32-bit registre: ebp – Pointer register der udpeger aktuelt stakafsnit. esp – Pointer register der udpeger staktoppen. eip – programtælleren (instruction pointer). eflags – status register (Program Status Word – PSW)... derudover et antal registre ifm. segmenter, MMX, FPU,…

dMasArk8 Registre

dMasArk9 Eksempel: EFLAGS register.. fungerer som Program Status Word (PSW): CF – overflow på ikke-negative heltals operationer. OF – overflow på heltals operationer.

dMasArk10 Lagermodel.. fysisk addresserum med bit (byte) celler (64Gbytes). Tre lagermodeller understøttes: Flad lagermodel: 4Gb lineært lager, byte addresserbart Program, data og stak i samme addresse rum. Segmenteret lagermodel: 16,384 segmenter op til 4Gb/segment. Program, data og stak kan være i forskellige segmenter. Real-address mode: kompatibilitet med Unix/Linux udnytter ikke muligheder for segmentering... derudover understøttes virtuel hukommelse og paging.

dMasArk11 Datatyper Pointer datatyper: Near pointer: 32 bit offset i segment. Far pointer: 48 bit segment selector (16) og offset (32). Bit fields: op til 32 bits Strenge: sekvens af bit/bytes/ord. Numeriske datatyper: X X X X

dMasArk12 Heltals datatyper 2-komplement fortolkning: |W| 2 Standard fortolkning: |W|

dMasArk13 Instruktioner

dMasArk14

dMasArk15 Instruktionsformat Ved instruktioner med to operander er mindst en i register (REG). Lokation af operander bestemmes ud fra: SIB (Scale,Index,Base) og Displacement samt registre. Immediate bruges til konstanter.

dMasArk16 Addresseringsformer Displacement specificerer offset i 8 bit (MOD=01) / 32 bit (MOD=10). SIB: Scale * Index + Base (+Displacement) MOD (2 bit) og R/M (3 bit) specificerer formen: register Based indexedRegister indirekteIndexed

dMasArk17 Linux IA-32 Lagermodellen.. et 4Gb lineært, byte addresserbart lager opdelt i sektioner: text 0xFFFFFFFF 0x data bss stack initialiseret data uinitialiseret data (buffere) program dynamisk lager (allokeret) dynamisk lager (uallokeret) heap eip esp

dMasArk18 IA-32 Symbolsk Maskinsprog

dMasArk19 IA-32 Symbolsk Maskinsprog.. programmering i praksis i symbolsk maskinsprog. Der findes mange assemblers til IA-32 maskinkode: GAS as86 NASM,… Anvender forskellig syntax: Intel Syntax AT&T Syntax.. GAS (GNU assembler, AT&T syntax) under Linux OS.

dMasArk20 GAS – AT&T Syntax (1) % bruges til at referere til registre: %ebp, %esp, %eax, %ebx,… $ bruges til konstanter (immediate addressing): $42, $53, $0xff,… Suffix på symbolske instruktioner giver størrelsen på operander: b - byte (8 bit) w - word (16 bit) l - double word (32 bit)

dMasArk21 GAS – AT&T Syntax (2) Immediate, register addressing: movl $42,%eax # eax = 42 Direct addressing: pushl ADDR # ADDR er en addresse Register indirect addressing, register addressing: movl (%ebp),%eax # eax = m[ebp] Indexed addressing, register addressing: movl 4(%ebp),%eax # eax = m[ebp+4]

dMasArk22 C Program int main (void) { long a = 42; long b = 53; long m = 0; if (a >= b) m = a; else m = b; exit(m); } %>gcc –o ex1 ex1.c %>./ex1 %>echo $? 53

dMasArk23 IA-32 Symbolsk Maskinsprog (1).section.data # start of data section a:.long 42 # the variable a b:.long 53 # the variable b m:.long 0 # the variable m.section.text # start of text section.globl _start # _start is a global symbol # specifies start of program _start: # int main (void)

dMasArk24 IA-32 Symbolsk Maskinsprog (2) _start: # int main (void) movl a,%eax # movl b,%ebx # cmpl %eax,%ebx # compute b-a = b) jmp else if: movl %eax,m # m = a jmp endif else: movl %ebx,m # m = b endif: movl m,%ebx # put return value in %ebx movl $1,%eax # opcode for exit system call int $0x80 # exit(m) (%ebx) via exit

dMasArk25 Oversættelse og sammenkædning asld

dMasArk26 Oversættelse til maskinkode %>as –o ex2.o ex2.s %>objdump –D ex2.o : 0:a mov 0x0,%eax 5:8b 1d mov 0x4,%ebx b:39 c3 cmp %eax,%ebx d:7e 02 jle 11 f:eb 07 jmp : 11:a mov %eax,0x8 16:eb 06 jmp 1e : 18:89 1d mov %ebx,0x e : 1e:8b 1d mov 0x8,%ebx 24:b mov $0x1,%eax 29:cd 80 int $0x80

dMasArk27 Sammenkædning (Linkning) %>ld –o ex2 ex2.o %>objdump –d ex2 Disassembly of section.text: : :a1 a mov 0x80490a0,%eax :8b 1d a mov 0x80490a4,%ebx f:39 c3 cmp %eax,%ebx :7e 02 jle :eb 07 jmp c : :a3 a mov %eax,0x80490a a:eb 06 jmp c : c:89 1d a mov %ebx,0x80490a : :8b 1d a mov 0x80490a8,%ebx :b mov $0x1,%eax d:cd 80 int $0x80

dMasArk28 Funktionskald

dMasArk29 Funktionskald.. stakken bruges til at implementere funktionskald. Maskininstruktionerne call og ret bruges: call A - læg “næste” eip på stakken og sæt eip = A. ret - sæt eip = top af stak og fjern øverste element... i visse tilfælde bruges maskininstruktionerne enter og leave. Konventionen fra C bruges: Application Binary Interface.

dMasArk30 C kaldkonventionen 1.Læg parametre på stak i omvendt rækkefølge (caller). 2.Kald funktion via call instruktionen (caller). 3.Etabler stakafsnit (manipulering af ebp og esp) (callee). 4.Gør plads til eventuelle lokale variable (callee). 5.Udfør kroppen af funktionen (callee). 6.Læg returværdi i eax registret (callee). 7.Nedlæg stakafsnit (manipulation af ebp og esp) (callee). 8.Returner fra kald via ret instruktionen (callee). 9.Fjern parametre fra stak (caller).

dMasArk31 Stakafsnit esp ebp parametre old eip old ebp lokale variable esp ebp ebp + 4 ebp + 8 ebp bit

dMasArk32 C Funktioner int max (long a,long b) { long m = 0; if (a >= b) m = a; else m = b; return m; } int main (void) { long x = 42; long y = 53; long z = 0; z = max(x,y); exit(z); }

dMasArk33.section.data x:.long 42 y:.long 53 z:.long 0.section.text.globl _start _start: # int main (void) pushl y # push y on stack pushl x # push x on stack call max # invoke max addl $8,%esp # pop parameters from stack movl %eax,z # z = max(x,y) (%eax) movl z,%ebx # return value in ebx register movl $1, %eax # opcode for exit system call int $0x80 # return z (%ebx) IA-32 Funktionskald (1) 1-2 9

dMasArk34.type max: # int max (long a,long b) pushl %ebp # push prev base pointer movl %esp,%ebp # setup new base pointer subl $4,%esp # local variable m movl $0,-4(%ebp) # m = 0 movl 8(%ebp),%eax # load a into eax movl 12(%ebp),%ebx # load b into ebx cmpl %eax,%ebx # compute b-a = b) jmp else if:movl %eax,-4(%ebp) # m = a jmp endif else:movl %ebx,-4(%ebp) # m = y endif:movl -4(%ebp),%eax # return value in %eax movl %ebp,%esp # restore esp popl %ebp # restore ebp ret # return m