lehrkraefte:blc:informatik:efi-2023:assembler

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:efi-2023:assembler [2024/04/02 15:35]
Ivo Blöchliger
lehrkraefte:blc:informatik:efi-2023:assembler [2024/04/23 15:04] (current)
Ivo Blöchliger [Funktionsweise einer CPU]
Line 94: Line 94:
  
 <hidden Lösungsvorschlag> <hidden Lösungsvorschlag>
- MOV A,123 +<code asm> 
- MOV C, 232 + MOV A, 237 
- CALL showNumber + MOV C,232 
-        HLT+ CALL showByte 
 + HLT
  
-Params in register: +Byte in A 
-;   number to print +Address in 
-  address to display digit +showByte:  
-showNumber+ PUSH A   ; Save registers 
-    PUSH C + PUSH B 
-    ADD C,2 + PUSH C 
-numberLoop+ ADD C,2 
-    PUSH A +loopA
-    PUSH 10 + PUSH A   ; SAVE 
-    CALL mod + PUSH 10  ; Push modulo op to stack 
-    INC SP      Clean  up stack! + CALL mod 
-    MOV B,A + INC SP   Correct Stackpointer 
-    CALL showDigit + MOV B,A  ; digit to B 
-    DEC C + CALL showDigit  ;  
-    POP A + DEC C  ; Adjust for next address 
-    DIV 10 + POP A  ; restore 
-    JNZ numberLoop + DIV 10 
-    POP C + JNZ loopA 
-    RET+ POP C 
 + POP B 
 + POP A 
 + RET
  
 +</code>
 </hidden> </hidden>
 </WRAP> </WRAP>
Line 206: Line 211:
  
 Bonus: Implementieren Sie QuickSort. Bonus: Implementieren Sie QuickSort.
 +
 +<hidden Animationen auf 7-Segment-Anzeige>
 +<code asm>
 +; Simple example
 +; Writes Hello World to the output
 +
 +start:
 +
 + MOV B, dataStart
 +loop:
 + MOV A, 253
 + MOV C, [B]
 + MOV [A], C
 + MOV C, [B+1]
 + MOV [A+1], C
 + MOV C, [B+2]
 + MOV [A+2], C
 + ADD B, 3
 + CMP B, dataEnd
 + JNZ loop
 + JMP start
 +
 +
 +
 +dataStart:
 + DB 8
 + DB 8
 + DB 8
 +
 + DB 0
 + DB 8
 + DB 12
 +
 + DB 0
 + DB 0
 + DB 14
 +
 + DB 0
 + DB 0
 + DB 7
 +
 + DB 0
 + DB 1
 + DB 3
 +
 + DB 1
 + DB 1
 + DB 1
 +
 + DB 33
 + DB 1
 + DB 0
 +
 + DB 49
 + DB 0
 + DB 0
 +
 + DB 56
 + DB 0
 + DB 0
 +
 + DB 24
 + DB 8
 + DB 0
 +
 +dataEnd:
 +</code>
 +</hidden>
 +<hidden Animation mit Bytes in Strings codier (unnötig hackisch)>
 +<code asm>
 +start:
 +
 + MOV B, dataStart
 +loop:
 + MOV C, [B]
 + MOV A, [B+6]
 + MOV [253], C
 + MOV [254], A
 + MOV [255], C
 + INC B
 + CMP B, dataEnd
 + JNZ loop
 + JMP start
 +
 +
 +
 +dataStart: 
 + DB "!0␌"
 +
 +dataEnd:
 + DB "!␌0"
 +</code>
 +</hidden>
 +
 +
 +
 +
 +<hidden Quicksort-Implementation>
 +<code asm>
 + JMP start
 +arrayStart:
 +        DB 4
 + DB 2
 + DB 7
 + DB 9
 + DB 8
 + DB 7
 + DB 4
 + DB 5
 + DB 8
 + DB 9
 + DB 4
 + DB 3
 + DB 6
 + DB 1
 + 
 +
 +start:
 + MOV A, arrayStart
 + MOV B, start
 + DEC B
 + call quicksort
 + HLT
 +
 +
 +quicksort:
 +;first elements address in A
 +;last elements address in B
 + PUSH D
 + PUSH C
 + PUSH B
 + PUSH A
 + MOV C,B
 + SUB C,A
 + JBE ende    ; bail if B-A <= 0
 + MOV [a0], A   ; save bounds
 + MOV [b0], B
 + MOV C, [A]    ; Pivot value
 + INC A
 +leftloop:  ; while C>=[A]: A++
 + CMP C,[A]
 + JC rightloop   ; break if C<[A]
 + INC A
 + CMP A,B
 + JBE leftloop   ; repeat if A<=B
 +
 +rightloop:   ; while C<=[B]; B--
 + CMP C,[B]
 + JA swapping   ; break if C>[B]
 + DEC B
 + CMP A,B
 + JB rightloop  ; repeat if A<B
 +
 +swapping:   ; Swaps [A] and [B], if A<B
 + CMP A,B
 + JAE setpivot
 + MOV D, [A]
 + PUSH D
 + MOV D, [B]
 + MOV [A], D
 + POP D
 + MOV [B], D
 + INC A
 + DEC B
 + JMP leftloop
 +
 +setpivot:
 + CMP A,[b0]
 + JBE ok
 + MOV A,[b0]
 + INC A
 +ok:    ; swap pivot and [A]
 + DEC A
 + MOV [p0], A   ; index of pivot
 + MOV D,[A]
 + MOV [A], C
 + MOV C,[a0]
 + MOV [C], D
 +;recursion
 + MOV A, [a0]
 + MOV B, [p0]
 + DEC B
 + PUSH [p0]   ; save p0 and b0
 + PUSH [b0]
 + call quicksort
 + POP B       ; restore p0 and b0
 + POP A
 + INC A
 + call quicksort
 +ende:
 + POP A
 + POP B
 + POP C
 + POP C
 + RET
 +
 +
 +a0: DB 0
 +b0: DB 0
 +p0: DB 0
 +
 +</code>
 +</hidden>
 </WRAP> </WRAP>
 ===== Hackme ===== ===== Hackme =====
Line 277: Line 485:
 </hidden> </hidden>
 </hidden> </hidden>
 +
 +
 +
 +===== Mögliche Prüfungsfragen =====
 +Die Ausgabe auf die drei 7-Segment Anzeigen erfolgt auf die Adressen 253 bis 255.
 +
 +Die Bits auf der Anzeige sind wie folgt nummeriert:
 +<code txt>
 ++--0--+
 +5     1
 +:--6--:
 +4     2
 ++--3--+
 +</code>
  
  • lehrkraefte/blc/informatik/efi-2023/assembler.1712064923.txt.gz
  • Last modified: 2024/04/02 15:35
  • by Ivo Blöchliger