Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; A code area
- AREA main, CODE, READONLY, ALIGN = 2
- EXPORT __main
- ENTRY
- VAL1 EQU 0x70000000
- ; Add more hier
- __main PROC
- ;****************************************************
- ;TEIL 1: Speicherzugriff, Pseudo-Assembler, Encoding
- ; Decoding, Optimierung,
- ;****************************************************
- ;Der Zugriff auf die Datenarea ist hier notwendig
- ;weil sonst...
- LDR R0,=var32_1 ;Pseudoassembler
- ; Wie wird dies im Maschinencode umgesetzt?
- LDR R1,[R0]
- ;Was ist der Unterschied bei den beiden Add-Befehlen?
- LDR R0,=2
- LDR R1,=3
- ADD R0,R1
- ;ADD R8,R0,R1
- ; Wie ändert sich die Codegenerierung, wenn der folgende Assemblerbefehl
- ; auskommentiert wird.
- ; ADD R8,R8,#4 ; keine Änderung beobachtet
- ;****************************************************
- ;TEIL 2: Arithmetische und logische Befehle
- ; Bitweise Befehle
- ;****************************************************
- MOV R10,#0x00000000 ;Set APSR to Zero
- MSR APSR,R10
- ;**********Wichtige arithmetische Befehle**********
- LDR R0 ,=0x00
- ADD R0, R0, #0xAC
- ADC R0, R0, #0xFFFFFF55 ;ADD with carry
- SUB R1, R0,#0xF
- SBC R1, R1, #0x4
- RSB R1, R2, R1, LSL#3 ;R1=(R1*8)-R2
- ;MUL und MULA sowie MULS
- MUL R1, R2, R3
- ;MULA
- MULS R1, R2, R1
- ;Unterschiede SDIV und UDIV ausprobieren
- MSR APSR,R10
- LDR R0, =0x13
- LDR R1, =0x2
- LDR R2, =-0x13
- SDIV R3, R0, R1 ;negative zahl: 0xFFFFFFF7 ;positive zahl: 0x00000009
- UDIV R4, R0, R1 ;negative zahl: 0x7FFFFFF6 ;positive zahl: 0x00000009
- LDR R4, =0x00
- ;**********Wichtige bitweise operatoren Befehle**********
- LDR R0, =0xA
- LDR R1, =0x5
- LDR R2, =0xE
- LDR R3, =0x3
- ;AND
- AND R4, R0, R3
- ;ORR
- ORR R5, R0, R1
- ;EOR
- EOR R6, R3, R2
- ;ORN
- ORN R7, R0, R1
- ;BIC
- ;BFC
- ;BFI
- ;MVN
- ;RBIT
- ;REV
- ;REV16
- ;REVSH
- ;SXTB
- ;SXTH
- ;UXTB
- ;UXTH
- ;MOV
- MOV R8, #0xFFF1
- ;MOV R2, #0xFFFFFFAA geht nicht, zu groß. Daher mvn
- ;MOVN
- MVN R9, #0x00000055 ; -> 0xFFFFFFAA
- ;MRS Welche Specialregister sind erlaubt?
- ;lädt von "spezialegister" in normales register: APSR, IPSR, EPSR, PSR
- MRS R0, APSR
- MRS R0, IPSR
- MRS R0, EPSR
- MRS R0, PSR
- MRS R0, xPSR
- ;MSR
- MSR APSR, R12
- ;MOV mit den fünf Barrelshift ausprobieren
- ;****************************************************
- ;TEIL 3: Datentransferbefehle
- ; (MOV schon in Teil 3 behandelt)
- ;****************************************************
- ;LMS Zyklus
- ;LDR von Var32_3 in R0
- ;Addiere dazu 1
- ;Schreibe zurueck an gleiche Stelle zurück
- ;Lade var16_1 mit LDRH und LDRSH (Unterschied)
- ;Lade var8_1 und var8_2 jeweils mit LDRB und LDRSB (Unterschied?)
- ;Lade erstes Element von var32a_1 in R0
- ;Lade drittes Element von var32a_1 in R1
- ;Lade n-tes Element von var32_a1 in R2 (Annahme: n<10)
- ;Schreibe Wert 0xBADDCAFE in Var8_1
- ;Mit STRB, STRH, STR
- ;Welche Code wird hier generiert?
- LDR R0,=0xFF
- LDR R1,=0xFFFF
- LDR R2,=0x173C
- LDR R3,=0xFFFFFFFF
- LDR R4,=0xFFFF0000
- LDR R5,=0x494AC473
- ;Schreibe den Wert 0x494AC473 mit zwei
- ;MOV-Befehlen in R6
- ;Lege den Wert von R6 auf dem Stack ab (PUSH)
- ;Lese den Wert wieder vom Stack in R7 ohne POP
- ;Verschiebe den Stackpointer ohne POP wieder zurück
- ;****************************************************
- ;TEIL 3: Kontrollstrukturen
- ;
- ;****************************************************
- ;a ist R0, b ist R1
- ;if (a < 0)
- ;if (a < 0 && b > 10)
- ;do-while-Schleife
- ; a = 0;
- ;do {
- ; a++;
- ; } while (a<10)
- ;while-Scheife
- ;a = 0 oder 10
- ;while (a<10)
- ;{ }
- ;****************************************************
- ;TEIL 4: Funktionen
- ;
- ;****************************************************
- ; int calc1 (int a, int b, int c, int d)
- ; { return (a-b+c+d); }
- ; int calc2 (int a, int b, int c, int d, int e)
- ; { return (a-b+c+d-e); }
- ; int strcpy(int* pdest, int* psource)
- ; str in Datenarea verwenden
- ; int strncpy (int* pdest, int* psoruce, size_t num)
- ; str in Datenarea verwenden
- LOOPFOREVER
- ; Endless Loop
- B LOOPFOREVER
- ENDP
- ;Data AREA
- ;Beim Übersetzen kommen hier Warnungen (warum?)
- AREA myData, DATA, READWRITE
- var32_1 DCD 0xBADDCAFE ;Adresse von ... bis 0-3
- var32_2 DCD 0x8899AABB ;Adresse von ... bis 4-7
- var32_3 DCD 0x77664433 ;Adresse von ... bis 8-B
- var8_dum DCB 0x55 ;Adresse von ... bis C-10
- var32_4 DCD 0xFF778800 ;Adresse von ... bis
- var16_1 DCW 0x8877 ;Adresse von ... bis
- var16_2 DCW 4834 ;Adresse von ... bis
- var8_1 DCB 0x7F ;Adresse von ... bis
- var8_2 DCB 0x80 ;Adresse von ... bis
- str1 DCB "Hello World",0 ;Adresse von ... bis
- str2 DCB "Hello Offenburg",0 ;Adresse von ... bis
- str3 SPACE 20 ;Adresse von ... bis
- var32a_1 DCD 1,2,3,4,5,6,7,8,9,10 ;Adresse von ... bis
- ;add here var
- END ;End of the program
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement