diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-03-31 23:23:41 +0200 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-03-31 23:23:47 +0200 |
| commit | e5aa9d5a17d52eb61243a9c45dd2e65f27084c9c (patch) | |
| tree | 984e768e668c7427fc426cec1c10cf7056bb94e9 /Assemblyinstruktioner.md | |
| parent | f78c31be48d67f7891d38fae5fd59b640211f962 (diff) | |
| download | notes-e5aa9d5a17d52eb61243a9c45dd2e65f27084c9c.tar.gz | |
initial import
Diffstat (limited to 'Assemblyinstruktioner.md')
| -rw-r--r-- | Assemblyinstruktioner.md | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/Assemblyinstruktioner.md b/Assemblyinstruktioner.md new file mode 100644 index 0000000..ca70684 --- /dev/null +++ b/Assemblyinstruktioner.md @@ -0,0 +1,61 @@ +Olika arkitekturer har olika instruktionsmängder. + +# [[AVR]] + +Instruktioner kommer i grupper som gör nästan samma sak men på lite olika sätt. +Se till exempel ADD (Add without Carry) och ADC (Add with Carry). + +[Instruktionsmängd på kurshemsidan för TSEA82.](http://www.isy.liu.se/edu/kurs/TSEA82/kursmaterial/5_Avr_instr_set.pdf) + +## Flytta data + +Load (LD, LDI, LDS) kopierar data. MOV kopierar mellan två register. + +## Aritmetiska operationer + +Addition, subtraktion, multiplikation. Division är inte implementerad för den är +för stor till ytan. + +## Logiska operationer + +Hantera register som en hög med bitar. + +Grupp A "vanlig" logik. Exempel: ANDI (Logical And with Immediate). + +Grupp B skiftinstruktioner. Exempel: LSR (Logical Shift Right). Kommer ibland i +två varianter, en logisk och en aritmetisk. Till exempel lämnar ASR (Arithmetic +Shift Right) kvar den mest signifikanta biten eftersom den vid aritmetik +benämner tecknet. Upp till programmeran att se till att rätt sak händer. + +## Hopp + +Anrop (CALL) är inte hopp eftersom de returnerar (RET). + +Ovillkorligt: JMP (Jump) till symboliska adresser. RJMP (Relative Jump) tar +mindre plats men kan inte hoppa lika långt som ett vanlig JMP. + +Villkorligt: BREQ (Branch if Equal). Används för att skapa +control flow. Finns en hög olika BRXX. + +## I/O - instruktioner + +Portar är 8 bitar breda. Enskilda bitar kan fungera som antingen ingång eller +utgång. Styrs via [[Datariktningsregister|datariktningsregistret]] DDRx. +Utvärdet bestäms av portregistret PORTx och invärdet läsen från PINx. x = B, C +eller D beroende på vilken typ av port (se chippet). + +OUT skriver till samtliga 8 bitar. SBI (Set Bit in I/O Register) och CBI (Clear +Bit in I/O Register) hanterar specifika bitar. Kan också använda e.g. SBRC +(Skip if Bit in Register Cleared), SBRS (Skip if Bit in Register Set), SBIC +(Skip if Bit in I/O Register Cleared) och SBIS (Skip if Bit in Register Set) för +att testa och hoppa utifrån värden. + +Exempel: + +```asm +; --- GET_KEY. Bit 2 = 1 if key pressed +GET_KEY: + clr r16 ; r16 <= 0 + sbic PINB,2 ; skip if not pressed + ser r16 ; r16 <= FF +``` |
