Intel Core i7. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet

Størrelse: px
Starte visningen fra side:

Download "Intel Core i7. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet"

Transkript

1 Intel Core i7 Niels Olof Bouvin Institut for Datalogi Aarhus Universitet 1

2 Oversigt Historie Maskinsprogsniveauet Symbolsk maskinsprog Funktionskald Argumentoverførsel & biblioteksfunktioner 2

3 Udviklingen af Intels processorer 3

4 Udviklingen af Intels processorer Moore s Curve 4

5 Oversigt Historie Maskinsprogsniveauet Symbolsk maskinsprog Funktionskald Argumentoverførsel & biblioteksfunktioner 5

6 Core i7 Level 5 Problem-oriented language level Translation (compiler) Level 4 Assembly language level Translation (assembler) Level 3 Operating system machine level Partial interpretation (operating system) Level 2 Instruction set architecture level Interpretation (microprogram) or direct execution Level 1 Micro-architecture level Hardware Level 0 Digital logic level 6

7 Core i7 / AMD64 / x86-64 Level 5 Problem-oriented language level Translation (compiler) Software Level 4 Level 3 Assembly language level Translation (assembler) Operating system machine level Level 2 Instruction set architecture level Partial interpretation (operating system) x86-64 Hardware Level 1 Micro-architecture level Interpretation (microprogram) or direct execution Hardware Level 0 Digital logic level 7

8 Vigtige elementer på maskinkodeniveauet Central Processing Unit (CPU) Registre Control Unit Lagermodellen Datatyper Maskininstruktioner Arithmetic Logic Unit (ALU) Registers Input/Output devices Instruktionsformater Main Memory Disk Printer Addresseringsformer Bus 8

9 Register, bus og lager evolution 8080 A B C D H L 8-bit Address Bus 8-bit Data Bus Memory AX AH AL BX BH BL CX CH CL DX DH DL SP BP SI DI 20-bit Address Bus 16-bit Data Bus Memory segment ,535 EAX EBX ECX EDX ESP EBP ESI EDI AX AH AL BX BH BL CX CH CL DX DH DL SP BP SI DI 32-bit Address Bus 32-bit Data Bus Memory

10 IA-32 registre 6 generelle 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 specielle 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). Herudover diverse andre registre til FP, MMX, 10

11 Eksempel: EFLAGS register Fungerer som Program Status Word (PSW) CF OF overflow på ikke-negative heltals operationer overflow på heltals operationer 11

12 AMD64, aka x86-64: 64 bits brede registre R8 R9 R10 R11 R12 R13 R14 R15 Core i7 AX RAX EAX AH AL BX RBX EBX BH BL CX RCX ECX CH CL DX RDX EDX DH DL RSP ESP SP RBP EBP BP RSI ESI SI RDI EDI DI 48-bit Address Bus 64-bit Data Bus Memory TiB 12

13 Linux x86-64 lagermodel Et 256TB lineært, byte adressérbart lager opdelt i sektioner text svarer til method area på IJVM data til constant pool stack er som IJVMs stak RSP bss er afsat, endnu ikke brugt plads heap er tilgængeligt lager som kan benyttes efter behov heap er dét, som allokeres v.hj.a. malloc Uinitialiseret? har som udgangspunkt ikke nogen værdi behøver derfor ikke ligge i den udførbare fil RIP stack heap bss data text 0x00007FFF'FFFFFFFF dynamisk lager (uallokeret) dynamisk lager (allokeret) uinitialiseret data (buffere) initialiseret data program 0x '

14 Numeriske datatyper på x86-64 Type 8 bits 16 bits 32 bits 64 bits Signed Integer Unsigned integer Binary coded decimal integer Floating point Hertil kommer vektortyper, mv. 14

15 Intel IA-32 & x86-64/amd64 dokumentation Intels egen referencemanual 3020 sider AMD64 ABI referencemanual System V Application Binary Interface AMD64 Architecture Processor Supplement 128 sider omkring kaldkonventionerne til Linux 15

16 Nogle af de mere end 500 instruktioner 16

17 Oversigt Historie Maskinsprogsniveauet Symbolsk maskinsprog Funktionskald Argumentoverførsel & biblioteksfunktioner 17

18 Programmering i x86 symbolsk maskinsprog Der findes mange assemblers til x86 maskinkode: GAS as86 NASM Anvender forskellig syntax: Intel Syntax AT&T Syntax GAS (GNU assembler, AT&T syntax) under Linux OS 18

19 AT&T vs Intel syntaks.l2: movl $6, %eax ; start k = 6 - i - j subl 12(%ebp), %eax ; eax = 6 - i subl 16(%ebp), %eax ; eax = 6 - i - j movl %eax, -12(%ebp); k = eax movl 8(%ebp), %eax ; start towers(n-1, i, k) decl %eax ; eax = n-1 subl $4, %esp pushl -12(%ebp) ; k pushl 12(%ebp) ; i pushl %eax ; n-1.l2: mov eax, 6 ; start k = 6 - i - j sub eax, DWORD PTR [ebp+12] ; eax = 6 - i sub eax, DWORD PTR [ebp+16] ; eax = 6 - i - j mov DWORD PTR [ebp-12], eax ; k = eax mov eax, DWORD PTR [ebp+8] ; start towers(n-1, i, k) dec eax ; eax = n-1 sub esp, 4 push DWORD PTR [ebp-12] ; k push DWORD PTR [ebp+12] ; i push eax ; n-1 Hvad er pænest? Smag og behag AT&T Intel 19

20 GAS syntaks % 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 - long word (32 bit) q-quad word (64 bit) (hvis man bruger 8-, 16- eller 32-bit operander, skal man bruge de matchende registre) 20

21 GAS syntaks Immediate, register addressing: movq $42,%rax # rax = 42 // flyt (kopiér, faktisk) 42 til rax Direct addressing: pushq %rax # push indholdet af rax på stakken Register indirect addressing, register addressing: movq (%rbp),%rax # rax = m[rbp] Indexed addressing, register addressing: movq 8(%rbp),%rax # rax = m[rbp+8] / husk 8 bytes alignment 21

22 find_max.c /* find_max.c */ #include <stdio.h> int main(int argc, char *argv[]) { long a = 53; long b = 42; long m = 0; if (a >= b) { m = a; } else { m = b; } > gcc find_max.c -o find_max >./find_max > echo $? 53 > indeholder returnkoden fra det netop afsluttede program } return m; 22

23 find_max.s.section.data a:.quad 53 b:.quad 42 m:.quad 0.section.text.global _start # start of data section # start of text section # make _start symbol visible > as find_max.s -o find_max.o > ld find_max.o -o find_max >./find_max > echo $? 53 > _start: pushq %rbp # save old rbp to stack movq %rsp,%rbp # set new value for rbp movq a,%rax # a to rax movq b,%rbx # b to rbx cmpq %rax,%rbx # compute b-a <=0 and set eflags jle if # if (a >= b) { jmp else if: movq %rax,m # m = a jmp endif # } else { else: movq %rbx,m # m = b # } endif: movq m,%rdi # put m in rdi movq $60,%rax # system call 60 is exit leave # clean up syscall # exit(m) 23

24 Oversættelse og sammenlinking as ld På Unix (herunder Linux) (og mange andre steder, f.eks. Wii og Playstation 3) anvendes formatet ELF (Executable and Linkable Format) til objektfiler og udførbare filer 24

25 > as find_max.s -o find_max.o > objdump -dxs find_max.o > find_max.elf Oversættelse til objektkode find_max_as.o: file format elf64-x86-64 find_max_as.o architecture: i386:x86-64, flags 0x : HAS_RELOC, HAS_SYMS start address 0x Sections: Idx Name Size VMA LMA File off Algn 0.text f **2 CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 1.data **2 CONTENTS, ALLOC, LOAD, DATA 2.bss **2 ALLOC SYMBOL TABLE: l d.text text l d.data data l d.bss bss l.data a l.data b l.data m b l.text if l.text else d l.text endif g.text _start Contents of section.text: e5 488b b1c25 UH..H..%...H..% c37e 02eb0a H9.~...H..% eb c b3c...H..%...H.< c7c0 3c c90f05 %...H..<... Contents of section.data: a * A s adresse B s adresse Disassembly of section.text: <_start>: 0: 55 push %rbp 1: e5 mov %rsp,%rbp 4: 48 8b mov 0x0,%rax b: 00 8: R_X86_64_32S.data c: 48 8b 1c mov 0x0,%rbx 13: 00 10: R_X86_64_32S.data+0x8 14: c3 cmp %rax,%rbx 17: 7e 02 jle 1b <if> 19: eb 0a jmp 25 <else> b <if>: 1b: mov %rax,0x0 22: 00 1f: R_X86_64_32S.data+0x10 23: eb 08 jmp 2d <endif> <else>: 25: c mov %rbx,0x0 2c: 00 29: R_X86_64_32S.data+0x d <endif>: 2d: 48 8b 3c mov 0x0,%rdi 34: 00 31: R_X86_64_32S.data+0x10 35: 48 c7 c0 3c mov $0x3c,%rax 3c: c9 leaveq 3d: 0f 05 syscall 25

26 Indskudt sætning: Little- og Big-Endian Man kan arrangere bytes i words på to måder, little- og big-endian: Big-endian: De mest betydende bytes kommer først ₁₆ = 53₁₀ 03 e8₁₆ = 1000₁₀ Little-endian: De mindst betydende bytes kommer først ₁₆ = 53₁₀ e8 03₁₆ = 1000₁₀ Intel er little-endian, så derfor skrives bs værdi (42 10 ) som 2a Så længe man holder sig til én maskinearkitektur, er der ingen problemer men det er noget, som man skal være opmærksom på, når man udveksler data mellem forskellige maskinarkitekturer 26

27 Assembly, sammenlinking og disassembly > ld find_max.o -o find_max > objdump -dxs find_max > find_max.elf find_max_as: file format elf64-x86-64 find_max_as architecture: i386:x86-64, flags 0x : EXEC_P, HAS_SYMS, D_PAGED start address 0x b0 Program Header: LOAD off 0x vaddr 0x paddr 0x align 2**21 filesz 0x ef memsz 0x ef flags r-x LOAD off 0x f0 vaddr 0x f0 paddr 0x f0 align 2**21 filesz 0x memsz 0x flags rw- Sections: Idx Name Size VMA LMA File off Algn 0.text f b b b0 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 1.data f f f0 2**2 CONTENTS, ALLOC, LOAD, DATA SYMBOL TABLE: b0 l d.text text f0 l d.data data f0 l.data a f8 l.data b l.data m cb l.text if d5 l.text else dd l.text endif b0 g.text _start g *ABS* bss_start g *ABS* _edata g *ABS* _end Contents of section.text: 4000b e5 488b0425 f b1c25 UH..H..%..`.H..% A s adresse 4000c0 f c37e 02eb0a `.H9.~...H..%. 4000d eb c b3c.`...H..%..`.H.< 4000e c7c0 3c c90f05 %..`.H..<... Contents of section.data: 6000f a * Disassembly of section.text: b0 <_start>: 4000b0: 55 push %rbp 4000b1: e5 mov %rsp,%rbp 4000b4: 48 8b f mov 0x6000f0,%rax 4000bb: bc: 48 8b 1c 25 f mov 0x6000f8,%rbx 4000c3: c4: c3 cmp %rax,%rbx 4000c7: 7e 02 jle 4000cb <if> 4000c9: eb 0a jmp 4000d5 <else> cb <if>: 4000cb: mov %rax,0x d2: d3: eb 08 jmp 4000dd <endif> d5 <else>: 4000d5: c mov %rbx,0x dc: dd <endif>: 4000dd: 48 8b 3c mov 0x600100,%rdi 4000e4: e5: 48 c7 c0 3c mov $0x3c,%rax 4000ec: c9 leaveq 4000ed: 0f 05 syscall B s adresse 27

28 find_max.s: Take Two.section.data a:.quad 53 b:.quad 42 m:.quad 0.section.text.global main # start of data section # start of text section # make main symbol visible > gcc find_max.s -o find_max >./find_max > echo $? 53 > main: pushq %rbp # save old rbp to stack movq %rsp,%rbp # setup new base pointer movq a,%rax # a to rax movq b,%rbx # b to rbx cmpq %rax,%rbx # compute b-a <=0 and set eflags jle if # if (a >= b) { jmp else if: movq %rax,m # m = a jmp endif # } else { else: movq %rbx,m # m = b # } endif: movq m, %rax # put m in rax leave # clean up ret # return m (rax) Typisk anvender man ikke as og ld seperat, da gcc kan håndtere det hele Da er konventionerne en smule anderledes hovedfunktionen hedder main, og man bruger blot ret med exit koden i rax 28

29 Oversigt Historie Maskinsprogsniveauet Symbolsk maskinsprog Funktionskald Argumentoverførsel & biblioteksfunktioner 29

30 Standarder for funktionskald For en given platform (en kombination af CPU og operativsystem) eksisterer konventioner for, hvorledes funktioner/procedurer/metoder kaldes vi ser i denne sammenhæng på Linux og på x86 processorer Kaldkonventionen har ændret sig fra IA-32 til x86-64 processoren har nu mange registre, hvilket ikke var tilfældet før 30

31 IA-32 Funktionskald Stakken bruges til funktionskald med IA-32 s lange historie og mange forskellige operativsystemer, så er der faktisk en del forskellige måder at kalde funktioner på, men vi vil prøve at holde os til stakken og Unix/Linux Ikke ulig invokevirtual og return, så har IA-32 instruktionerne call og ret call A læg næste eip på stakken, og sæt eip=a ret sæt eip=staktop og fjern det øverste element Dette er konventionen for C, og da Unix (og dermed Linux) er skrevet i C, er det den rigtige måde at gøre det på i Linux 31

32 C kaldkonventionen: IA-32 ebp 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) esp ebp esp 6-9 parametre ebp+8 gammel eip ebp+4 gammel ebp lokale variabler ebp-4 32

33 find_max2.c nu med funktion! /* find_max2.c */ #include <stdio.h> long find_max(long a, long b) { long m = 0; int main(int argc, char *argv[]) { long a = 42; long b = 53; long r = 0; r = find_max(a, b); if (a >= b) { m = a; } else { m = b; } } return r; } return m; 33

34 find_max2.s - IA-32.section.data x:.long 42 y:.long 53 r:.long 0.section.text.global _start _start: pushl y pushl x call max addl $8,%esp movl %eax,r movl r,%ebx movl $1, %eax int $0x80 # int main (void) # push y on stack # push x on stack # invoke max # pop parameters from stack # r = max(x,y) (%eax) # return value in ebx register # opcode for exit system call # return r (%ebx).type max: # int max (long a,long b) pushl %ebp # push prev base pointer 3-4 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 <=0, # set eflags jle if # if (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 (remove 6-8 # locals) popl %ebp # restore ebp ret # return m 34

35 Funktionskald: x86-64 Platform Return Value Parameter Registers Seks registre afsættes til argumenter, ni registre kan frit benyttes registre er ~100 gange hurtigere end RAM Yderligere argumenter puttes på stakken Da der kún er de samme registre, skal man være disciplineret om anvendelse hvis man bruger Preserved Registers (også kaldet Callee Save ), skal man genskabe dem, inden man returnerer Stakken holdes 16-bytes aligned Returnværdier i rax og rdx Additional Parameters Stack Alignment Scratch Registers Preserved Registers System V i386 eax, edx none stack (right to left) eax, ecx, edx ebx, esi, edi, ebp, esp System V X86_64 rax, rdx rdi, rsi, rdx, rcx, r8, r9 stack (right to left) 16-byte at call rax, rdi, rsi, rdx, rcx, r8, r9, r10, r11 rbx, rsp, rbp, r12, r13, r14, r15 ARM r0, r1 r0, r1, r2, r3 stack 8 byte r0, r1, r2, r3, r12 r4, r5, r6, r7, r8, r9, r10, r11, r13, r14 35

36 C kaldkonventionen: x Gem registre på stakken, om nødvendigt (caller) 2. Fyld parametre i registrene rdi,rsi,rdx,rcx,r8,r9 (caller) rbp 3. Læg overskydende parametre på stak i omvendt rækkefølge (caller) Kald funktion via call instruktionen (caller) Etabler stakafsnit (manipulering af rbp og rsp) (callee) rsp 6. Gør plads til eventuelle lokale variable (callee) (husk 16-byte alignment) 7. Gem Callee-Save registre, om nødvendigt (callee) 8. Udfør kroppen af funktionen (callee) rdi 9. Læg returværdi i rax samt (evt.) rdx (callee) rsi 10. Genskab gemte registreværdier, om nogen (callee) rdx 11. Nedlæg stakafsnit via leave instruktionen (callee) rcx rbp 12. Returner fra kald via ret instruktionen (callee) r8 13. Læs returnværdi fra rax, samt (evt.) rdx (caller) r9 14. Genskab gemte registreværdier fra stakken, om nogen (caller) rsp ekstra parametre rbp+16 gammel rip rbp+8 gammel rbp lokale variabler rbp-8 36

37 find_max2.s - x86-64: (ineffektiv udgave).section.data a:.quad 53 b:.quad 42 m:.quad 0.section.text.global main # start of data section # start of text section # make main symbol visible main: pushq %rbp # save old rbp to stack movq %rsp,%rbp # set new value for rbp movq %rax,m movq a,%rdi # a to rdi (first argument) movq b,%rsi # b to rsi (2nd argument) call max leave ret # return m (rax) max: push %rbp # push prev. base pointer 5-7 movq %rsp,%rbp # setup new base pointer subq $32,%rsp # need 24, but 16-aligned movq %rdi,-8(%rbp) # save a movq %rsi,-16(%rbp) # save b movq $0,-24(%rbp) # init m movq -8(%rbp),%rax # a movq -16(%rbp),%rbx # b cmpq %rax,%rbx # if (a >= b) { jle if # jmp else if: movq %rax,-24(%rbp) # m = a jmp endif # } else { else: movq %rbx,-24(%rbp) # m = b endif: movq -24(%rbp),%rax # copy m to rax # } 9-12 leave # clean up ret # return m (rax) 37

38 find_max2.s - x86-64: (mindre ineffektiv udgave).section.data a:.quad 53 b:.quad 42.section.text.global main # start of data section # start of text section # make main symbol visible main: pushq %rbp # save old rbp to stack movq %rsp,%rbp # set new value for rbp movq a,%rdi # a to rdi (first argument) movq b,%rsi # b to rsi (second argument) call max leave ret # return m (rax) max: push %rbp # push previous base pointer movq %rsp,%rbp # setup new base pointer cmpq %rdi,%rsi # if (a >= b) { jle if # jmp else if: movq %rdi,%rax # m = a jmp endif # } else { else: movq %rsi,%rax # m = b # } endif: leave # clean up ret # return m (rax) Med masser af registre til rådighed, er der ingen grund til at unødigt bruge stakken 38

39 Oversigt Historie Maskinsprogsniveauet Symbolsk maskinsprog Funktionskald Argumentoverførsel & biblioteksfunktioner 39

40 Programkald Som med IJVM kan man give kommandolinjeargumenter til sit program > find_max3 8 9 Hvordan overføres de af operativsystemet til vores program? i registrene og i hukommelsen 40

41 Biblioteksfunktioner og systemkald Et operativsystem kommer med standardbiblioteker og systemkald, der kan udføre mange funktioner for os Standardbiblioteket kræver, at man instruerer ld korrekt: ld find_max3.o -dynamic-linker /lib/ld-linux.so.2 -lc -o find_max3 I praksis er det langt det nemmeste at bruge gcc i stedet for as/ld Standardbiblioteksfunktioner kaldes v.hj.a. C call konventionen som almindelige funktioner (seks parametre i registerne, resten på stakken) Systemkald foregår via argumenter i registrene og instruktionen syscall Systemkaldets kode placeres (forvirrende nok) i rax, og argumenter i rdi,rsi,rdx,r10,r8,r9 0x60 er koden for systemkaldet exit, og argumentet placeres i rdi 41

42 Det initielle kald Fra kommandolinjen kaldes et program med en række argumenter Bemærk signaturen på et C programs main funktion: int main(int argc, char *argv[]) rdi indeholder argc og rsi indeholder argv Argumenterne peger på null-terminerede strenge dvs. almindelige C strenge 0x argument n argument 2 argument 1 programnavn rdi: #argumenter rsi: pointer array 42

43 find_max3.c /* find_max3.c */ #include <stdio.h> #include <stdlib.h> long long find_max(long long a, long long b) { long long m = 0; int main(int argc, char *argv[]) { long long a = 0; long long b = 0; long long r = 0; a = atol(argv[1]); b = atol(argv[2]); if (a >= b) { m = a; } else { m = b; } } r = find_max(a, b); return r; } return m; > gcc find_max3.c -o find_max3 >./find_max3 8 9 ; echo $? 9 43

44 find_max3.s.section.data argc:.quad 0 argv:.quad 0 a:.quad 0 b:.quad 0.section.text.global main # start of data section # start of text section # make main symbol visible main: pushq %rbp # save old rbp to stack movq %rsp,%rbp # set new value for rbp movq %rdi, argc # save argc movq %rsi, argv # save argv movq 8(%rsi), %rdi # first argument call atol movq %rax, a # save a's value movq argv, %rax # get argv back movq 16(%rax),%rdi # second argument call atol movq %rax, b # save b's value movq a,%rdi # get a back movq %rax,%rsi # b still in rax call max leave ret # return m (rax) max: push %rbp # push previous base pointer movq %rsp,%rbp # setup new base pointer cmpq %rdi,%rsi # if (a >= b) { jle if # jmp else if: movq %rdi,%rax # m = a jmp endif # } else { else: movq %rsi,%rax # m = b # } endif: leave # clean up ret # return m (rax) > gcc find_max3.s -o find_max3 >./find_max3 8 9 ; echo $? 9 44

45 Sammenblanding af C og symbolsk maskinkode I praksis har man sjældent lyst til at skrive hele sit program i symbolsk maskinkode C og andre højniveausprog er langt lettere at have med at gøre Heldigvis understøtter f.eks. C, at man har funktioner skrevet i symbolsk maskinkode nemt at gøre, fordi der er en kaldkonvention, og så længe den overholdes er alting godt 45

46 find_max.s og find_max4.c.section.text.global find_max find_max: push %rbp # push previous base pointr movq %rsp,%rbp # setup new base pointer cmpq %rdi,%rsi # if (a >= b) { jle if # jmp else if: movq %rdi,%rax # m = a jmp endif # } else { else: movq %rsi,%rax # m = b # } endif: leave # clean up ret # return m (rax) #include <stdio.h> #include <stdlib.h> extern long long find_max(long long a, long long b); int main(int argc, char *argv[]) { long long a, b, r; a = atol(argv[1]); b = atol(argv[2]); r = find_max(a, b); } return r; > gcc find_max4.c find_max.s -o find_max4 >./find_max4 8 9 ; echo $? 9 46

47 Systemkald i find_max.s.section.data a:.quad 53 b:.quad 42 m:.quad 0.section.text.global _start # start of data section # start of text section # make _start symbol visible > as find_max.s -o find_max.o > ld find_max.o -o find_max >./find_max > echo $? 53 > _start: pushq %rbp # save old rbp to stack movq %rsp,%rbp # set new value for rbp movq a,%rax # a to rax movq b,%rbx # b to rbx cmpq %rax,%rbx # compute b-a <=0 and set eflags jle if # if (a >= b) { jmp else if: movq %rax,m # m = a jmp endif # } else { else: movq %rbx,m # m = b # } endif: movq m,%rdi # put m in rdi movq $60,%rax # system call 60 is exit leave # clean up syscall # exit(m) 47

48 Forskellige systemkald Name rax rdi rsi rdx r10 r8 r9 Description sys_exit 60 int terminate the current process sys_read 0 uint ch* size_t read from file descriptor sys_write 1 uint ch* size_t write to file descriptor sys_open 2 ch* int int open / create file or device sys_close 3 uint close a file descriptor 48

49 find_max.s og find_max5.c med output!.section.text.global find_max find_max: push %rbp # push previous base pointr movq %rsp,%rbp # setup new base pointer cmpq %rdi,%rsi # if (a >= b) { jle if # jmp else if: movq %rdi,%rax # m = a jmp endif # } else { else: movq %rsi,%rax # m = b # } endif: leave # clean up ret # return m (rax) #include <stdio.h> #include <stdlib.h> extern long long find_max(long long a, long long b); int main(int argc, char *argv[]) { long long a, b, r; a = atol(argv[1]); b = atol(argv[2]); r = find_max(a, b); printf("max(%lld,%lld) = %lld\n",a,b,r); } return 0; > gcc find_max5.c find_max.s -o find_max5 >./find_max5 8 9 max(8,9) = 9 49

50 find_max2.s og find_max5.c: Conditional move.section.text.global find_max find_max: push %rbp # push previous base pointr movq %rsp,%rbp # setup new base pointer cmpq %rdi, %rsi # b-a? cmovge %rsi, %rdi # if 0: overwrite a with b movq %rdi, %rax # max rax leave # clean up ret # return max #include <stdio.h> #include <stdlib.h> extern long long find_max(long long a, long long b); int main(int argc, char *argv[]) { long long a, b, r; a = atol(argv[1]); b = atol(argv[2]); r = find_max(a, b); printf("max(%lld,%lld) = %lld\n",a,b,r); } return 0; > gcc find_max5.c find_max2.s -o find_max5 >./find_max5 8 9 max(8,9) = 9 50

51 Opsummering AMD64/x86-64 er en registermaskine man regner i registrene, og som regel får man argumenter/resultater i registre Linux på AMD64/x86-64 har konventioner for typiske funktionskald, herunder standardbiblioteket, samt for systemkald f.eks. hvilke registre, man må bruge, og 16-byte alignment af stakken Kald af funktioner kræver forberedelse, orden og oprydning overholder man ikke reglerne, går det galt Overgangen fra få registre til mange registre gør mange ting langt enklere en tiltrængt modernisering udført af Intels konkurrent! Det gør livet langt enklere, at man kan blande C og symbolsk maskinsprog 51

52 Ugeopgave 5 52

Pentium IA-32 Maskinarkitekturen

Pentium IA-32 Maskinarkitekturen Pentium IA-32 Maskinarkitekturen 1 Historie (1) Starter i 1970 med udviklingen af Intel 4004: 2 Historie (2) Baglæns kompatibilitet tilbage til 8086. 3 Intel 4004 and Pentium 4 http://www.intel.com/museum/archives/index.htm

Læs mere

Eksamen dcomnet Q2/2010. Navn

Eksamen dcomnet Q2/2010. Navn 2582 Eksamen dcomnet Q2/2010 ID Navn Example I A32-prg1 Betragt følgende program skrevet i IA-32 symbolsk maskinsprog:.section.data x:.long 2 r:.long 27.section.text.globl _start _start: pushl x movl $0,%ebx

Læs mere

Maskinarkitektur. Lars Kristensen kris@daimi.au.dk. Christian Storm cstorm@daimi.au.dk. dmasark 1

Maskinarkitektur. Lars Kristensen kris@daimi.au.dk. Christian Storm cstorm@daimi.au.dk. dmasark 1 Maskinarkitektur Lars Kristensen kris@daimi.au.dk Christian Storm cstorm@daimi.au.dk dmasark 1 Praktiske oplysninger http://www.daimi.au.dk/dmasark dmasark 2 Forelæsninger Tirsdag 12.15-14.00, Store Aud,

Læs mere

Computere og Netværk (dcomnet)

Computere og Netværk (dcomnet) Computere og Netværk (dcomnet) http://www.cs.au.dk/dcomnet Jens Kargaard Madsen (jkm@iha.dk) Jens Bennedsen (jbb@iha.dk) dcomnet 1 Computere og netværk Beskrivelse At give den studerende kendskab til computere

Læs mere

Computerarkitektur Eksamen 2014Q2. Niels Olof Bouvin A. Studienummer Navn

Computerarkitektur Eksamen 2014Q2. Niels Olof Bouvin A. Studienummer Navn Computerarkitektur Eksamen 2014Q2 Niels Olof Bouvin A Studienummer Navn Vejledning Eksamen varer en time fra kl. 9 til kl. 10. Husk at skrive studienummer og navn tydeligt på forsiden, inden eksamen afsluttes.

Læs mere

Eksamen dcomnet 2012Q4. Årskortsnummer Navn

Eksamen dcomnet 2012Q4. Årskortsnummer Navn Eksamen dcomnet 2012Q4 Årskortsnummer Navn Vejledning Eksamen varer en time fra kl. 9 til kl. 10. Husk at skrive årskort og navn tydeligt på forsiden, inden eksamen afsluttes. Der er ét rigtigt svar per

Læs mere

Computerarkitektur Eksamen 2014Q3. Niels Olof Bouvin. Studienummer Navn

Computerarkitektur Eksamen 2014Q3. Niels Olof Bouvin. Studienummer Navn Computerarkitektur Eksamen 2014Q3 Niels Olof Bouvin Studienummer Navn Vejledning Eksamen varer en time fra kl. 9 til kl. 10. Husk at skrive studienummer og navn tydeligt på forsiden, inden eksamen afsluttes.

Læs mere

Operativsystemer - dopsys

Operativsystemer - dopsys Operativsystemer - dopsys Erik Ernst eernst@cs.au.dk dopsys 1 Q/A Mange deltagere er nu på 2. år af datalogistudiet, med dcomnet 1 for år siden Er din baggrund anderledes? dopsys 2 Praktiske oplysninger

Læs mere

Mikroarkitektur. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet

Mikroarkitektur. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet Mikroarkitektur Niels Olof Bouvin Institut for Datalogi Aarhus Universitet 1 Level 1: Mikrokode niveauet Level 5 Problem-oriented language level Translation (compiler) Level 4 Assembly language level Translation

Læs mere

Eksamen dcomnet Q2/2012. Studiekortsnummer Navn

Eksamen dcomnet Q2/2012. Studiekortsnummer Navn Eksamen dcomnet Q2/2012 Studiekortsnummer Navn Vejledning Eksamen varer en time fra kl. 9 til kl. 10. Husk at skrive studienummer og navn tydeligt på forsiden, inden eksamen afsluttes. Der er ét rigtigt

Læs mere

Eksamen Computerarkitektur 2013Q4. Niels Olof Bouvin. Studienummer Navn

Eksamen Computerarkitektur 2013Q4. Niels Olof Bouvin. Studienummer Navn Eksamen Computerarkitektur 2013Q4 Niels Olof Bouvin Studienummer Navn Vejledning Eksamen varer en time fra kl. 9 til kl. 10. Husk at skrive studienummer og navn tydeligt på forsiden, inden eksamen afsluttes.

Læs mere

Mikroprogrammering. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet

Mikroprogrammering. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet Mikroprogrammering Niels Olof Bouvin Institut for Datalogi Aarhus Universitet Oversigt Mikroprogrammering: IJVM implementeret på Mic-1 Forbedringer af Mic-1 Metode til udvikling af symbolske maskinsprogsprogrammer

Læs mere

uprocessorens hardware

uprocessorens hardware uprocessorens hardware 8080 Architecture Kernen i en processor er ALUen. Det er den som kan udfører simple regne operationer. De tal den arbejdermed gemmes i en række registre. Når et tal skal hentes eller

Læs mere

Introduktion til Operativsystemer

Introduktion til Operativsystemer Introduktion til Operativsystemer 1 Niels Olof Bouvin Institut for Datalogi Aarhus Universitet Oversigt Formål Hvad er en computer? Operativsystemets rolle Multitasking 2 Formål Introduktion af de basale

Læs mere

Introduktion til Computerarkitektur. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet

Introduktion til Computerarkitektur. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet Introduktion til Computerarkitektur Niels Olof Bouvin Institut for Datalogi Aarhus Universitet 1 Formål med dagens forelæsning Kurset læringsmål og emner folk og form eksamen Området maskinarkitektur 2

Læs mere

Niveauer af abstrakte maskiner

Niveauer af abstrakte maskiner Mikroarkitektur Niveauer af abstrakte maskiner Spørgsmål... Hvordan realiseres IJVM maskinen (lev. 2), eller hvordan ser en IJVM-CPU ud? Opbygning (mikroarkitekturen Mic-1) Anvendelse (mikroprogrammet

Læs mere

Operativsystemer - dopsys. Erik Ernst

Operativsystemer - dopsys. Erik Ernst Operativsystemer - dopsys Erik Ernst eernst@cs.au.dk [Q/A] Mange deltagere er nu på 2. år af datalogistudiet eller cand.it., med dcomnet Er din baggrund anderledes? dopsys 2 Praktiske oplysninger http://cs.au.dk/dopsys

Læs mere

dcomnet-nr. 6 Talrepræsentation Computere og Netværk (dcomnet)

dcomnet-nr. 6 Talrepræsentation Computere og Netværk (dcomnet) dcomnet-nr. 6 Talrepræsentation Computere og Netværk (dcomnet) Efterår 2009 1 Talrepræsentation På maskinkodeniveau (Instruction Set Architecture Level) repræsenteres ordrer og operander ved bitfølger

Læs mere

Grundlæggende Algoritmer og Datastrukturer. Analyseværktøjer [CLRS, 1-3.1]

Grundlæggende Algoritmer og Datastrukturer. Analyseværktøjer [CLRS, 1-3.1] Grundlæggende Algoritmer og Datastrukturer Analyseværktøjer [CLRS, 1-3.1] Eksempler på en beregningsprocess Puslespil ved ombytninger Maximum delsum Hvad er udførselstiden for en algoritme? Maskinkode

Læs mere

Algoritmer og Datastrukturer 1. Gerth Stølting Brodal

Algoritmer og Datastrukturer 1. Gerth Stølting Brodal Algoritmer og Datastrukturer 1 Gerth Stølting Brodal Design af Algoritmer Korrekt algoritme 1) algoritmen standser på alle input 2) Output er det rigtige på alle input Effektivitet 1) Optimer algoritmerne

Læs mere

Algoritmer og Datastrukturer 1

Algoritmer og Datastrukturer 1 Algoritmer og Datastrukturer 1 Gerth Stølting Brodal Analyseværktøjer [CLRS, 1-3.1] Eksempler på en beregningsprocess Puslespil ved ombytninger Maximum delsum Hvad er udførselstiden for en algoritme? Maskinkode

Læs mere

Programmering i C Intro og grundlæggende C 5. marts 2007

Programmering i C Intro og grundlæggende C 5. marts 2007 Programmering i C Intro og grundlæggende C 5. marts 2007 Mads Pedersen, OZ6HR mads@oz6hr.dk Plan for kurset Ma. 5/3: Ma. 19/3: Ma. 2/4: To. 12/4: Formål, intro, grundlæggende Videre, sprogkonstruktioner

Læs mere

Processer og tråde. dopsys 1

Processer og tråde. dopsys 1 Processer og tråde dopsys 1 Motivation.. parallelle processer udnytter hardwaren bedre: Batch operativsystemer (50 erne) hhv. små systemer: Multiprogrammering og time-sharing (fra 60 erne og frem): dopsys

Læs mere

MIPS, registerallokering og MARS

MIPS, registerallokering og MARS MIPS, registerallokering og MARS Torben Mogensen 2011 Resumé Vi beskriver modulerne Mips.sml og RegAlloc.sml, samt hvordan de bruges sammen med MIPS-emulatoren MARS. 1 MIPS modulet Modulet Mips.sml indeholder

Læs mere

Sider og segmenter. dopsys 1

Sider og segmenter. dopsys 1 Sider og segmenter dopsys 1 Lokal vs global sideallokering (1) Med (a) som udgangspunkt giver (b) lokal hhv. (c) global allokering forskellige resultater dopsys 2 Lokal vs global sideallokering (2) Den

Læs mere

DM13-3. Obligatorisk opgave E.05 Håndoptimering af SPARC assembler-kode

DM13-3. Obligatorisk opgave E.05 Håndoptimering af SPARC assembler-kode - 3. Obligatorisk opgave E.05 Håndoptimering af SPARC assembler-kode Jacob Aae Mikkelsen - 191076 12. december 2005 1 Indhold 1 Opgave beskrivelse 2 2 Muligheder for optimering 2 2.1 efter branch.........................

Læs mere

Lageradministration Intel Pentium og Unix/Linux

Lageradministration Intel Pentium og Unix/Linux Lageradministration Intel Pentium og Unix/Linux 1 Lageradministration Multiprogrammering Håndtering af flere procesbilleder i lageret Virtuelt lager og swapping Gennemsigtig udnyttelse af disk som udvidelse

Læs mere

Det Digitale Niveau. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet

Det Digitale Niveau. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet Det Digitale Niveau Niels Olof Bouvin Institut for Datalogi Aarhus Universitet Level : Det digitale niveau Level 5 Problem-oriented language level Translation (compiler) Level 4 Assembly language level

Læs mere

Systemkald DM14. 1. Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111

Systemkald DM14. 1. Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111 DM14 1. Obligatoriske opgave Systemkald Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111 Side 1 af 5 Intro: Formålet med opgaven at et lave en system kald

Læs mere

Operativsystemer - dopsys. Erik Ernst

Operativsystemer - dopsys. Erik Ernst Operativsystemer - dopsys Erik Ernst eernst@cs.au.dk [Q/A] Mange deltagere er nu på 2. år af datalogistudiet eller cand.it., med dcomnet En del har IT-erhvervserfaring Hvad med dig? dopsys 2 Praktiske

Læs mere

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet)

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) Efterår 2009 1 Simpel aritmetik på maskinniveau I SCO, appendix A, er det beskrevet, hvordan man adderer ikke-negative heltal

Læs mere

Processer og koordinering

Processer og koordinering Processer og koordinering.. fortsat dopsys 1 Betingelsesvariabler (Condition variables).. hukommelsesløs variant af semaphorer: Atomare operationer: Signal bruges til at sende et signal. Wait bruges til

Læs mere

Sider og segmenter. dopsys 1

Sider og segmenter. dopsys 1 Sider og segmenter dopsys 1 Lokal vs global sideallokering (1) Med (a) som udgangspunkt giver (b) lokal hhv. (c) global allokering forskellige resultater dopsys 2 Lokal vs global sideallokering (2) Den

Læs mere

Lageret i maskinarkitekturen. Beregningsenhed, lagre (registre, RAM, disk), ydre enheder

Lageret i maskinarkitekturen. Beregningsenhed, lagre (registre, RAM, disk), ydre enheder Lageradministration Lageret i maskinarkitekturen Beregningsenhed, lagre (registre, RAM, disk), ydre enheder Abstraktion over typerne: et hierarki En maskine har fl ere forskellige lagre Operativsystemet

Læs mere

Introduktion til C programmering

Introduktion til C programmering Introduktion til C programmering Rasmus Erik Voel Jensen Uge 17 voel@math.ku.dk Dagens forelæsning Formalia Indledende programmering, main, include, printf, variable, scanf, if-else, statements, eksempler

Læs mere

DM14-1. Obligatorisk opgave F.06. System Call. Jacob Aae Mikkelsen Ingen andre gruppe medlemmer. 6. marts 2005

DM14-1. Obligatorisk opgave F.06. System Call. Jacob Aae Mikkelsen Ingen andre gruppe medlemmer. 6. marts 2005 - 1. Obligatorisk opgave F.06 System Call Jacob Aae Mikkelsen - 191076 Ingen andre gruppe medlemmer 6. marts 2005 1 Indhold 1 Opgave beskrivelse 2 2 Analyse 2 2.1 Hukommelses allokering.....................

Læs mere

Planen for idag. Indhold af G1. Kernealphaerne. Alpha erne. Datalogi 1F Forår 2003

Planen for idag. Indhold af G1. Kernealphaerne. Alpha erne. Datalogi 1F Forår 2003 Planen for idag Datalogi 1F Forår 2003 G1 Et gensyn med KFirst G1 Jørgen Sværke Hansen cyller@diku.dk 2 Sidst så vi hvordan man starter den første proces KCurProc = KWaitQ.Get(); KFirst(KCurProc->sp);

Læs mere

Internt interrupt - Arduino

Internt interrupt - Arduino Programmering for begyndere Brug af Arduino Internt interrupt - Arduino - Afslutning EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Intern interrupt Jeg vil rydde lidt op. Her er nogle punkter vil har glemt

Læs mere

Virtuel Hukommelse. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet

Virtuel Hukommelse. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet Virtuel Hukommelse 1 Niels Olof Bouvin Institut for Datalogi Aarhus Universitet Oversigt Formålet med virtuel hukommelse Organisering af virtuel hukommelse Håndtering af virtuel hukommelse 2 Minimal computerarkitektur

Læs mere

Design af et ISA. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet

Design af et ISA. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet Design af et ISA Niels Olof Bouvin Institut for Datalogi Aarhus Universitet Level 2: Maskinniveau (ISA) Level 5 Problem-oriented language level Translation (compiler) Level 4 Assembly language level Translation

Læs mere

Indhold. Maskinstruktur... 3. Kapitel 1. Assemblersprog...3. 1.1 Indledning...3 1.2 Hop-instruktioner... 7 1.3 Input og output...

Indhold. Maskinstruktur... 3. Kapitel 1. Assemblersprog...3. 1.1 Indledning...3 1.2 Hop-instruktioner... 7 1.3 Input og output... Indhold Maskinstruktur... 3 Kapitel 1. Assemblersprog...3 1.1 Indledning...3 1.2 Hop-instruktioner... 7 1.3 Input og output... 9 Kapitel 2. Maskinkode... 13 2.1 Den fysiske maskine... 13 2.2 Assemblerens

Læs mere

Kernealphaerne Indhold af G1

Kernealphaerne Indhold af G1 Kernealphaerne Indhold af G1 3 små opgaver: 1. Oversæt en kerne og afvikl den på en kernealpha 2. Håndoversæt en C/C++ funktion til alpha assembler 3. Implementer procedurer til dynamisk lagerallokering

Læs mere

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 2 14. september 2009 Kontrolstrukturer Udvælgelse Gentagelse Eksempler Kommentarer Format - scanf og printf 2 / 27 Fra sidst 1 Kontrolstrukturer 2 Udvælgelse 3 Gentagelse 4 Eksempler

Læs mere

program fibomain(input,output); var i, j,result : integer; var x, y: integer;

program fibomain(input,output); var i, j,result : integer; var x, y: integer; program fibomain(input,output); var i, j,result : integer; procedure fib(n : integer); var x, y: integer; begin if (n=0) or (n=1) then result := 1 else begin fib(n-1); x:= result; fib(n-2); y:= result;

Læs mere

Programmering i C. Lektion 4. 5. december 2008

Programmering i C. Lektion 4. 5. december 2008 Programmering i C Lektion 4 5. december 2008 Funktioner Eksempel Fra sidst 1 Funktioner 2 Eksempel Funktioner Eksempel Eksempel: 1 / f u n k t i o n s p r o t o t y p e r / i n t i n d l a e s ( void )

Læs mere

Programmering i C. Lektion november 2008

Programmering i C. Lektion november 2008 Programmering i C Lektion 3 18. november 2008 Kontrolstrukturer Udvælgelse Gentagelse Eksempler Fra sidst 1 Kontrolstrukturer 2 Udvælgelse 3 Gentagelse 4 Eksempler Kontrolstrukturer Udvælgelse Gentagelse

Læs mere

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) int wmid, wmevent; PAINTSTRUCT Introduktion ps; til HDC hdc; programmering med switch (message) case WM_COMMAND: wmid = LOWORD(wParam);

Læs mere

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract Sproget Six Til brug i rapportopgaven på kurset Oversættere Vinter 2006 Abstract Six er baseret på det sprog, der vises i figur 6.2 og 6.4 i Basics of Compiler Design. Den herværende tekst beskriver basissproget

Læs mere

Chapter. Information Representation

Chapter. Information Representation Chapter 3 Information Representation (a) A seven-bit cell. Figure 3. Figure 3. (Continued) (b) Some possible values in a seven-bit cell. Figure 3. (Continued) 6 8 7 2 5 J A N U A R Y (c) Some impossible

Læs mere

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 1 8. september 2009 Målgruppe Motivation Indhold Form Materiale 2 / 47 Kursusintroduktion 1 Målgruppe 2 Motivation 3 Indhold 4 Form 5 Materiale Målgruppe Motivation Indhold Form

Læs mere

Lageradministration. dopsys

Lageradministration. dopsys Lageradministration 1 Lageret i maskinarkitekturen Beregningsenhed, lagre (registre, RAM, disk), ydre enheder 2 Abstraktion over typerne: et hierarki En maskine har flere forskellige lagre Operativsystemet

Læs mere

Lageradministration Paging og segmentering

Lageradministration Paging og segmentering Lageradministration Paging og segmentering 1 Re: Logiske/fysiske adresser... Proces-struktur = kode og data for en proces 4G En proces tilgår sin proces-struktur via et logisk/virtuelt adresserum, fx 0,

Læs mere

Fra programmering til mikroprocessor

Fra programmering til mikroprocessor Programmering for begyndere Brug af Arduino Fra programmering til mikroprocessor EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Programmerings kursus Sidste gang (Introduktion)

Læs mere

Maskinsprog. Martin Zachariasen, DIKU. Programmer og ordrer. Ordretyper. Operander og deres placering. Ordreformat. Procedurekald. Andre arkitekturer

Maskinsprog. Martin Zachariasen, DIKU. Programmer og ordrer. Ordretyper. Operander og deres placering. Ordreformat. Procedurekald. Andre arkitekturer Maskinsprog Martin Zachariasen, DIKU Litteratur: Patterson & Hennessy, kap. 3 Programmer og ordrer Ordretyper Operander og deres placering Ordreformat Procedurekald Andre arkitekturer 1 Stored-program

Læs mere

Oversættere Skriftlig eksamen onsdag d. 25. januar 2006

Oversættere Skriftlig eksamen onsdag d. 25. januar 2006 Københavns Universitet Naturvidenskabelig Embedseksamen Oversættere Skriftlig eksamen onsdag d. 25. januar 2006 Eksamenstiden er to timer. Opgavernes vægt i procent er angivet ved hver opgave. Den skriftlige

Læs mere

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 4 18. september 2009 Pointers Referenceparametre 2 / 19 Pointers 1 Pointers 2 Referenceparametre Pointers Referenceparametre 3 / 19 Husk: En variabel er en navngiven plads i computerens

Læs mere

Lær Python dag 1 - modul 1

Lær Python dag 1 - modul 1 Lær Python dag 1 - modul 1 Introduktion, basis python Steffen Berg Klenow Jonas Bamse Andersen Syddansk Universitet Indhold 1. Velkommen 2. Programmering i python 3. Typer, variabler og udtryk 1 Velkommen

Læs mere

Emulation - Binary Translation

Emulation - Binary Translation Emulation - Binary Translation Outline Binary Translation Code Discovery and Dynamic Binary Translation Control Transfer Optimization Some Instruction Set Issues Summary 2 Binary Translation Converting

Læs mere

Oversættere Skriftlig eksamen onsdag d. 19. april 2006

Oversættere Skriftlig eksamen onsdag d. 19. april 2006 Københavns Universitet Naturvidenskabelig Embedseksamen Oversættere Skriftlig eksamen onsdag d. 19. april 2006 Eksamenstiden er to timer. Opgavernes vægt i procent er angivet ved hver opgave. Den skriftlige

Læs mere

applikation----x----odbc driver manager----foobar ODBC driver----foobar database

applikation----x----odbc driver manager----foobar ODBC driver----foobar database Denne guide er oprindeligt udgivet på Eksperten.dk ODBC i C/C++ Denne artikel beskriver hvordan man bruger ODBC i C/C++. Der er beskrivelse af build med forskellige compilere. Den forudsætter lidt kendskab

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

Computerens Anatomi. Af Martin Arnetoft

Computerens Anatomi. Af Martin Arnetoft Computerens Anatomi Af Martin Arnetoft Moores lov Moores lov siger, at antallet af transistorer på et stykke hardware over 18 eller 24 måneder fordobles. Denne lov bruges til at beskrive udviklingen indenfor

Læs mere

//--------------------------------- Definition af porte og funktioner -------------------------

//--------------------------------- Definition af porte og funktioner ------------------------- Temeraturmåler (C-program).txt // Initialiserings-sekvens #include #pragma model=medium #pragma code=0x0000 #pragma xdata=0x4000 #pragma asm=on #pragma parameters=register //#define display P4

Læs mere

Arduino Programmering

Arduino Programmering Microcontroller, Arduino I teknologi skal vi lære at lave programmer til uc for at have muligheden til eksamen at kunne lave intelligente el-produkter. I hvert fald skal vi have set mulighederne, og forstået

Læs mere

Datatekniker med programmering som speciale

Datatekniker med programmering som speciale Datatekniker med programmering som speciale H3 H1 varer ti uger bestående af syv uddannelsesspecifikke fag, samt 2 Valgfri Udannelsesspecifikke Fag og 1 Valgfrit Speciale Fag Indhold På H2 er der fokus

Læs mere

Processer og koordinering. dopsys 1

Processer og koordinering. dopsys 1 Processer og koordinering dopsys 1 Motivation.. parallelle processer udnytter hardwaren bedre: Batch operativsystemer (50 erne): Multiprogrammering og time-sharing (60 erne): dopsys 2 Motivation.. parallelle

Læs mere

Systemkald i Unix/Linux

Systemkald i Unix/Linux Systemkald i Unix/Linux 1 Operativsystemet Fra proces: OS som værktøjskasse: tilgængelig via systemkald... OS som resurseadministrator, abstrakt/virtuel maskine: CPU: processer, tråde, schedulering I/O:

Læs mere

Interrupt - Arduino. Programmering for begyndere Brug af Arduino. Kursusaften 6 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

Interrupt - Arduino. Programmering for begyndere Brug af Arduino. Kursusaften 6 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK Programmering for begyndere Brug af Arduino Programmeringskursus Interrupt - Arduino EDR Hillerød Knud Krogsgaard Jensen / OZ1QK Interrupts Programmeringskursus Genbrug Interrupts Betyder blot at man afbryder

Læs mere

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato: 14-05-2003

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato: 14-05-2003 Side 1 af 8 Dato: 14-05-2003 Til Sigurd Som aftalt vil jeg her fremsende vores program til vores 80C535 kit og display. Det gik jo ud på at vi skulle starte med at få den til at intialiserer displayet,

Læs mere

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1 Project Step 7 Behavioral modeling of a dual ported register set. Copyright 2006 - Joanne DeGroat, ECE, OSU 1 The register set Register set specifications 16 dual ported registers each with 16- bit words

Læs mere

Brug af digitale ind og udgange

Brug af digitale ind og udgange Programmering for begyndere Brug af Arduino Programmeringskursus Brug af digitale ind og udgange Oversigt over aftenen Digitale ind- og udgange Det er der ikke så meget i: Digitale indgange kan tænde og

Læs mere

Bits, bit operationer, integers og floating point

Bits, bit operationer, integers og floating point Denne guide er oprindeligt udgivet på Eksperten.dk Bits, bit operationer, integers og floating point Denne artikel beskriver hvordan data gemmes som bits og hvordan man kan manipulere med bits. Den forudsætter

Læs mere

Introduktion til programmering. Af mikroprocessor Atmel ATmega328P i en Arduino Uno

Introduktion til programmering. Af mikroprocessor Atmel ATmega328P i en Arduino Uno Introduktion til programmering Af mikroprocessor Atmel ATmega328P i en Arduino Uno Min baggrund: Intel 4004, 4 bit, maskinsprog Intel 8008, 8 bit, maskinsprog bit for bit I sprogene: assembler, Fortran

Læs mere

DATALOGI 1E. Skriftlig eksamen fredag d. 16. januar 2004

DATALOGI 1E. Skriftlig eksamen fredag d. 16. januar 2004 Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Skriftlig eksamen fredag d. 16. januar 2004 Opgaverne vægtes i forhold til tidsangivelsen herunder, og hver opgaves besvarelse bedømmes

Læs mere

Pointers. Programmering i C. 11. december Lektion 5. Eksempel: denne plads. Getting the address of a variable:

Pointers. Programmering i C. 11. december Lektion 5. Eksempel: denne plads. Getting the address of a variable: Programmering i C Lektion 5 11. december 2008 Pointers 1 Pointers 2 Referenceparametre 2 / 23 Husk: En variabel er en navngiven plads i computerens lager. En pointer er en pegepind der peger på denne plads.

Læs mere

Programmering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale

Programmering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale Programmering i C Lektion 1 16. september 2008 Målgruppe Indhold Form Materiale Kursusintroduktion 1 Målgruppe 2 Indhold 3 Form 4 Materiale 2 / 21 Målgruppe Indhold Form Materiale Folk der har styr på

Læs mere

MySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere.

MySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere. Denne guide er oprindeligt udgivet på Eksperten.dk MySQL C API Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere. Den forudsætter lidt kendskab

Læs mere

SIMD. 2.1 Computation Reuse [1] Memoization [2] Nagoya Institute of Technology. Nara Institute of Science and Technology

SIMD. 2.1 Computation Reuse [1] Memoization [2] Nagoya Institute of Technology. Nara Institute of Science and Technology 1 1 1 2 1. SIMD 1 CPU [1] 1 Nagoya Institute of Technology 2 Nara Institute of Science and Technology 2. 2.1 Computation Reuse Memoization [2] c 2017 Information Processing Society of Japan 1 [3] Auto-

Læs mere

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

PHP 3 UGERS FORLØB PHP, MYSQL & SQL PHP 3 UGERS FORLØB PHP, MYSQL & SQL Uge 1 & 2 Det basale: Det primære mål efter uge 1 og 2, er at få forståelse for hvordan AMP miljøet fungerer i praksis, og hvordan man bruger PHP kodesproget til at

Læs mere

if (symbol == IDENTIFIER) { object = findprocedureobject(symboltable, identifier);

if (symbol == IDENTIFIER) { object = findprocedureobject(symboltable, identifier); procedureimplementation() { struct item_t* item; struct object_t* object; item = malloc(sizeof(struct item_t)); returntype(item); if (symbol == IDENTIFIER) { object = findprocedureobject(symboltable, identifier);

Læs mere

Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4.

Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4. APPETITVÆKKEREN OZ6YM, Palle A. Andersen Efteråret 2017 Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4. DEMO-video

Læs mere

ESP30076 임베디드시스템프로그래밍 (Embedded System Programming)

ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) Module 14: Kernel Timer ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 리눅스에서커널타이머사용법알아보기 HZ, jiffies_64, struct timer_list 커널타이머를활용한하드웨어제어용디바이스드라이버작성 2 Timer 관련변수 HZ 리눅스커널에서주기적으로발생하는시스템타이머

Læs mere

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen Studiepraktik Thomas Bøgholm boegholm@cs.aau.dk Mikkel Hansen mhan@cs.aau.dk Jacob Elefsen jelefs12@student.aau.dk 1 Studiepraktik -- program Program onsdag 10.00 10.15 Registrering af fremmøde og gennemgang

Læs mere

Microcontroller, Arduino

Microcontroller, Arduino Microcontroller, Arduino Programmerbar elektronik. uc Vi skal lære at lave programmer til uc for at kunne lave el-produkter. Forstå princippet i programmering af en uc og se mulighederne. Programmeringen

Læs mere

Computerarkitektur. - en introduktion til computerarkitektur med LINDA

Computerarkitektur. - en introduktion til computerarkitektur med LINDA Computerarkitektur - en introduktion til computerarkitektur med LINDA faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen Roskilde Universitetscenter Naturvidenskabelig

Læs mere

MIPS modulet og registerallokatoren

MIPS modulet og registerallokatoren MIPS modulet og registerallokatoren Værktøjer til oversætterdelen af K1 Dat1E 2001 MIPS modulet Den vigtigste del af modulet MipsData.sml er datatypen mips, som beskriver MIPS ordrer, se figur 1. Alle

Læs mere

Programmering i C Videre med C (2 af 4) 19. marts 2007

Programmering i C Videre med C (2 af 4) 19. marts 2007 Programmering i C Videre med C (2 af 4) 19. marts 2007 Mads Pedersen, OZ6HR mads@oz6hr.dk Plan i dag Brush-up fra sidst Videre med C Kontrolløkker (while, for, ) Conditional Execution (if, if/else) Funktioner

Læs mere

Bilag 2 - Spildevandsplan 2011-2021

Bilag 2 - Spildevandsplan 2011-2021 Bilag 2 - Spildevandsplan 2011-2021 Alle eksisterende ejendomme på følgende matrikler skal separatkloakeres Arninge 4c Ore By, Arninge 2016-2021 Arninge 4e Ore By, Arninge 2016-2021 Arninge 4f Ore By,

Læs mere

Værktøjer fra værktøjskassen. Søren Breddam, Stevns Kommune

Værktøjer fra værktøjskassen. Søren Breddam, Stevns Kommune Værktøjer fra værktøjskassen Søren Breddam, Stevns Kommune sb@stevns.dk 1stevns kommune Mapbasic i Stevns Kommune Data Kørsel af planlagte opgaver, så data altid er opdaterede. Logfil til overvågning Dagligt

Læs mere

Programmering i C. Lektion oktober 2008

Programmering i C. Lektion oktober 2008 Programmering i C Lektion 2 20 oktober 2008 Historie Processen At kompilere 2 / 23 Fra sidst 1 Historie 2 Processen 3 At kompilere Historie Processen At kompilere 3 / 23 ALGOL 60 1963 CPL 1966 BCPL 1969

Læs mere

Modbus data modellen er opbygget af fire primære data typer. I nedenstående skema er en kort oversigt over disse.

Modbus data modellen er opbygget af fire primære data typer. I nedenstående skema er en kort oversigt over disse. Modbus RTU protokol Indledning Modbus er en application layer messaging protocol, placeret på 7. lag i OSI modellen, der sørger for client/server kommunikation mellem enheder koblet på forskellige typer

Læs mere

Start på Arduino og programmering

Start på Arduino og programmering Programmering for begyndere Brug af Arduino Start på Arduino og programmering EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Sidste gang (Introduktion) Programmeringssproget

Læs mere

DATALOGI MASKINARKITEKTUR Blok 2 samt Reeksamination i DATALOGI MASKINARKITEKTUR Blok 1 og arkitekturdelen af DATALOGI 1E

DATALOGI MASKINARKITEKTUR Blok 2 samt Reeksamination i DATALOGI MASKINARKITEKTUR Blok 1 og arkitekturdelen af DATALOGI 1E Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI MASKINARKITEKTUR Blok 2 samt Reeksamination i DATALOGI MASKINARKITEKTUR Blok 1 og arkitekturdelen af DATALOGI 1E Vejledende løsninger til

Læs mere

Design Systemkald. User-mode Linux, The Linux kernel/325-2004

Design Systemkald. User-mode Linux, The Linux kernel/325-2004 Tracing tråden afbryder systemkaldet via ptrace Systemkaldet til værten ændres til getpid Processens stak manipuleres til at kalde kernen Kernen returnerer til processen Design Systemkald Design Startup/shutdown

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater Design by Contract Bertrand Meyer 1986 Design and Programming by Contract Michael R. Hansen & Anne Haxthausen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design

Læs mere

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning Datalogi OB, Efterår 2002 OH er, forelæsning 10/9-2002 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Eftermiddagens opgave:

Læs mere

Online kursus: Programming with ANSI C

Online kursus: Programming with ANSI C Online kursus 365 dage DKK 1.999 Nr. 90198 P ekskl. moms Denne kursuspakke giver dig et bredt kendskab til sproget C, hvis standarder er specificeret af American National Standards Institute (ANSI). Kurserne

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Netværk & elektronik

Netværk & elektronik Netværk & elektronik Oversigt Ethernet og IP teori Montering af Siteplayer modul Siteplayer teori Siteplayer forbindelse HTML Router (port forwarding!) Projekter Lkaa Mercantec 2009 1 Ethernet På Mars

Læs mere