Intel Core i7. Niels Olof Bouvin Institut for Datalogi Aarhus Universitet
|
|
- Hedvig Madsen
- 4 år siden
- Visninger:
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 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 mereEksamen 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 mereMaskinarkitektur. 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 mereComputere 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 mereComputerarkitektur 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 mereEksamen 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 mereComputerarkitektur 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 mereOperativsystemer - 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 mereMikroarkitektur. 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 mereEksamen 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 mereEksamen 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 mereMikroprogrammering. 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 mereuprocessorens 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 mereIntroduktion 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 mereIntroduktion 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 mereNiveauer 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 mereOperativsystemer - 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 meredcomnet-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 mereGrundlæ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 mereAlgoritmer 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 mereAlgoritmer 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 mereProgrammering 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 mereProcesser 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 mereMIPS, 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 mereSider 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 mereDM13-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 mereLageradministration 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 mereDet 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 mereSystemkald 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 mereOperativsystemer - 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 meredcomnet-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 mereProcesser 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 mereSider 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 mereLageret 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 mereIntroduktion 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 mereDM14-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 merePlanen 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 mereInternt 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 mereVirtuel 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 mereDesign 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 mereIndhold. 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 mereKernealphaerne 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 mereProgrammering 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 mereprogram 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 mereProgrammering 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 mereProgrammering 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 mereLRESULT 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 mereSproget 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 mereChapter. 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 mereProgrammering 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 mereLageradministration. 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 mereLageradministration 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 mereFra 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 mereMaskinsprog. 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 mereOversæ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 mereProgrammering 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 mereLæ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 mereEmulation - 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 mereOversæ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 mereapplikation----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 mereAbstrakte 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 mereComputerens 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 -------------------------
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 mereArduino 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 mereDatatekniker 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 mereProcesser 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 mereSystemkald 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 mereInterrupt - 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 mereNavn: 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 mereProject 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 mereBrug 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 mereBits, 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 mereIntroduktion 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 mereDATALOGI 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 merePointers. 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 mereProgrammering 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 mereMySQL 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 mereSIMD. 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 merePHP 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 mereif (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 mereDette 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 mereESP30076 임베디드시스템프로그래밍 (Embedded System Programming)
Module 14: Kernel Timer ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 리눅스에서커널타이머사용법알아보기 HZ, jiffies_64, struct timer_list 커널타이머를활용한하드웨어제어용디바이스드라이버작성 2 Timer 관련변수 HZ 리눅스커널에서주기적으로발생하는시스템타이머
Læs mereStudiepraktik. 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 mereMicrocontroller, 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 mereComputerarkitektur. - 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 mereMIPS 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 mereProgrammering 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 mereBilag 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 mereVæ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 mereProgrammering 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 mereModbus 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 mereStart 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 mereDATALOGI 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 mereDesign 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 mereDM507 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 mereDesign 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 mereDatalogi 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 mereOnline 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 mereDM507 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 mereNetvæ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