# Datorkonstruktion ## Innehåll ```toc ``` ## Föreläsning 1 ## Föreläsning 2 ## Föreläsning 3 ## Föreläsning 4 ## Föreläsning 5 ## Föreläsning 6 ## Föreläsning 7 ## Föreläsning 8 ## Föreläsning 9 ## Föreläsning 10 ## Föreläsning 11 ## Laboration 1 - [x] Skriv ut - [x] Läs igenom labbmanualen - [x] Läs PM - [x] Uppgift 1 - [x] Uppgift 2 - [ ] Uppgift 3 - [ ] Redovisa (v4ons 26/1 17-19 mux2) - [ ] Redovisa (v4fre 28/1 08-10 mux2) ### Uppgift 1 | Instruktion | Betydelse | Adresseringsmoder | Flaggor | | --------------- | ----------------------------- | ----------------- | ------------------ | | uppgift 1 och 2 | | | | | --------------- | ----------------------------- | ----------------- | ------------------ | | LOAD GRx,M,ADR | GRx := PM(A) | 00,01,10,11 | - | | STORE GRx,M,ADR | PM(A) := GRx | 00,10,11 | - | | ADD GRx,M,ADR | GRx := GRx+PM(A) | 00,01,10,11 | Z,N,O,C | | SUB GRx,M,ADR | GRx := GRx-PM(A) | 00,01,10,11 | Z,N,O,C | | AND GRx,M,ADR | GRx := GRx and PM(A) | 00,01,10,11 | Z,N | | LSR GRx,M,Y | GRx logic shift right Y steps | - (00) | Z,N, C shifted bit | | BRA ADR | PC := PC+1+ADR | - (00) | - | | BNE | PC := PC+1+ADR om Z = 0 | - (00) | - | | | PC+1 annars | | | | HALT | | - (00) | - | | --------------- | ----------------------------- | ----------------- | ------------------ | | uppgift 3 | | | | | --------------- | ----------------------------- | ----------------- | ------------------ | | CMP GRx,M,ADR | Jämför GRx och PM(A) | 00,01,10,11 | Z,N,O,C | | | och uppdatera flaggor | | | | BGE | PC := PC+1+ADR om N = 0 | - (00) | - | | | PC+1 annars | | | | BEQ | PC := PC+1+ADR om Z = 1 | - (00) | - | | | PC+1 annars | | | | Instruktion | OP | uAdress | | ----------- | --- | ------- | | LOAD | 0 | 0A | | STORE | 1 | 0B | | ADD | 2 | 0C | | SUB | 3 | 0F | | AND | 4 | 12 | | LSR | 5 | 15 | | BRA | 6 | 18 | | BRN | 7 | 1C | | HALT | 8 | 21 | ### Uppgift 2 Assembly | OP | GRx | M | ADR? | OPER? | | ----- | --- | --- | ---- | ------------------- | | LOAD | GR0 | 00 | 0xFE | | | AND | GR0 | 01 | | 0000_0000_0000_1111 | | STORE | GR0 | 00 | 0xFF | | | | | | | | | LOAD | GR0 | 00 | 0xFE | | | LSR | GR0 | 01 | | 4 | | AND | GR0 | 01 | | 0000_0000_0000_1111 | | ADD | GR0 | 00 | 0xFF | | | STORE | GR0 | 00 | 0xFF | | | | | | | | | LOAD | GR0 | 00 | 0xFE | | | LSR | GR0 | 01 | | 8 | | AND | GR0 | 01 | | 0000_0000_0000_1111 | | ADD | GR0 | 00 | 0xFF | | | STORE | GR0 | 00 | 0xFF | | | | | | | | | LOAD | GR0 | 00 | 0xFE | | | LSR | GR0 | 01 | | 12 | | AND | GR0 | 01 | | 0000_0000_0000_1111 | | ADD | GR0 | 00 | 0xFF | | | STORE | GR0 | 00 | 0xFF | | | HALT | | | | | Maskinkod: | ADR | OP (4) | GRx (2) | M (2) | ADR? (8) | OPER? (16) | | --- | ------ | ------- | ----- | -------- | ---------- | | 00 | 0 | 0 | 0 | FE | | | 01 | 4 | 0 | 1 | | 000F | | 02 | 1 | 0 | 0 | FF | | | | | | | | | | 03 | 0 | 0 | 0 | FE | | | 04 | 5 | 0 | 1 | | 0004 | | 05 | 4 | 0 | 1 | | 000F | | 06 | 2 | 0 | 0 | FF | | | 07 | 1 | 0 | 0 | FF | | | | | | | | | | 08 | 0 | 0 | 0 | FE | | | 09 | 5 | 0 | 1 | | 0008 | | 0A | 4 | 0 | 1 | | 000F | | 0B | 2 | 0 | 0 | FF | | | 0C | 1 | 0 | 0 | FF | | | | | | | | | | 0D | 0 | 0 | 0 | FE | | | 0E | 5 | 0 | 1 | | 000C | | 0F | 4 | 0 | 1 | | 000F | | 10 | 2 | 0 | 0 | FF | | | 11 | 1 | 0 | 0 | FF | | | 12 | 8 | | | | | ### Uppgift 3 - [x] Implementera CMP - [x] Implementera BGE - [x] Implementera BEQ - [x] Implementera bubblesort | Adress | Variabel | | ------ | -------------- | | 0xD0 | lista_sorterad | | 0xD1 | addr | | 0xD2 | addr2+1 | | 0xD3 | tmp | | 0xD4 | tmp2 | Assembly | OP | GRx | M | ADR? | OPER? | | ---------------------------- | --- | --- | ---- | ------- | | label1: | | | | | | lista_sorterad = 1 | | | | | | LOAD | GR0 | 01 | | 0x0001 | | STORE | GR0 | 00 | 0xD0 | | | | | | | | | addr = $e0 | | | | | | LOAD | GR0 | 01 | | 0x00E0 | | STORE | GR0 | 00 | 0xD1 | | | | | | | | | label2: | | | | | | tmp = pm(addr) | | | | | | LOAD | GR0 | 10 | 0xD1 | | | STORE | GR0 | 00 | 0xD3 | | | | | | | | | tmp2 = pm(addr + 1) | | | | | | LOAD | GR0 | 10 | 0xD1 | | | ADD | GR0 | 01 | | 0x0001 | | STORE | GR0 | 00 | 0xD2 | | | LOAD | GR0 | 10 | 0xD2 | | | STORE | GR0 | 00 | 0xD4 | | | | | | | | | tmp1 > tmp2? | | | | | | LOAD | GR0 | 00 | 0xD3 | | | CMP | GR0 | 00 | 0xD4 | | | BEQ | | | | no_swap | | BGE | | | | swap | | BRA | | | | no_swap | | | | | | | | swap: | | | | | | swap pm(addr) and pm(addr+1) | | | | | | LOAD | GR0 | 10 | 0xD1 | | | LOAD | GR1 | 10 | 0xD2 | | | STORE | GR0 | 10 | 0xD2 | | | STORE | GR1 | 10 | 0xD1 | | | | | | | | | lista_sorterad = 0 | | | | | | LOAD | GR0 | 01 | | 0x0000 | | STORE | GR0 | 00 | 0xD0 | | | | | | | | | no_swap: | | | | | | räkna upp addr | | | | | | LOAD | GR0 | 00 | 0xD1 | | | ADD | GR0 | 01 | | 0x0001 | | STORE | GR0 | 00 | 0xD1 | | | | | | | | | addr = 0xff? | | | | | | LOAD | GR0 | 00 | 0xD1 | | | CMP | GR0 | 01 | | 0x00FF | | BNE | | | | label2 | | | | | | | | lista_sorterad = 1? | | | | | | LOAD | GR0 | 00 | 0xD0 | | | CMP | GR0 | 01 | | 0x0001 | | BNE | | | | label1 | | | | | | | | HALT | | | | | ### Tillfälle 1 ### Tillfälle 2 ## Laboration 2 - [ ] Skriv ut - [ ] Läs PM - [ ] Uppgift 2.7 - [ ] Uppgift 2.8 - [ ] Uppgift 3.1 - [ ] Uppgift 3.2 - [ ] Uppgift 3.3 - [ ] Uppgift 3.4 - [ ] Uppgift 4.1 - [ ] Uppgift 4.2 - [ ] Uppgift 4.3 - [ ] Uppgift 4.4 - [ ] Uppgift 4.5 - [ ] Redovisa ## Laboration 3 - [ ] Läs PM - [ ] Planera - [ ] Förberedelseuppgifter - [ ] Labbuppgifter - [ ] Redovisa ## Laboration 4 - [ ] Läs PM - [ ] Planera - [ ] Förberedelseuppgifter - [ ] Labbuppgifter - [ ] Redovisa | | aaa