summaryrefslogtreecommitdiffstats
path: root/Assemblyinstruktioner.md
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-03-31 23:23:41 +0200
committerGustav Sörnäs <gustav@sornas.net>2021-03-31 23:23:47 +0200
commite5aa9d5a17d52eb61243a9c45dd2e65f27084c9c (patch)
tree984e768e668c7427fc426cec1c10cf7056bb94e9 /Assemblyinstruktioner.md
parentf78c31be48d67f7891d38fae5fd59b640211f962 (diff)
downloadnotes-e5aa9d5a17d52eb61243a9c45dd2e65f27084c9c.tar.gz
initial import
Diffstat (limited to 'Assemblyinstruktioner.md')
-rw-r--r--Assemblyinstruktioner.md61
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
+```