Advertisement
Guest User

Untitled

a guest
Nov 4th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; A code area
  2.    AREA main, CODE, READONLY, ALIGN = 2
  3.    EXPORT __main
  4.  
  5.    ENTRY
  6.  
  7. VAL1  EQU   0x70000000
  8. ; Add more hier
  9.  
  10. __main PROC
  11.  
  12.    ;****************************************************
  13.    ;TEIL 1: Speicherzugriff, Pseudo-Assembler, Encoding
  14.    ;        Decoding, Optimierung,                          
  15.    ;****************************************************
  16.  
  17.    ;Der Zugriff auf die Datenarea ist hier notwendig
  18.    ;weil sonst...
  19.    LDR R0,=var32_1    ;Pseudoassembler  
  20.    ; Wie wird dies im Maschinencode umgesetzt?
  21.    LDR R1,[R0]  
  22.  
  23.    ;Was ist der Unterschied bei den beiden Add-Befehlen?
  24.    LDR R0,=2
  25.    LDR R1,=3
  26.    ADD R0,R1
  27.    ;ADD R8,R0,R1
  28.    ; Wie ändert sich die Codegenerierung, wenn der folgende Assemblerbefehl
  29.    ; auskommentiert wird.
  30.   ; ADD R8,R8,#4 ; keine Änderung beobachtet
  31.  
  32.    ;****************************************************
  33.    ;TEIL 2: Arithmetische und logische Befehle
  34.    ;        Bitweise Befehle                    
  35.    ;****************************************************  
  36.     MOV R10,#0x00000000 ;Set APSR to Zero
  37.     MSR APSR,R10
  38.    
  39.    
  40.    
  41.    ;**********Wichtige arithmetische Befehle**********
  42.    LDR R0 ,=0x00
  43.    
  44.    
  45.    ADD R0, R0, #0xAC
  46.    
  47.    
  48.    
  49.    ADC R0, R0, #0xFFFFFF55 ;ADD with carry
  50.    
  51.    SUB  R1, R0,#0xF
  52.    
  53.    SBC R1, R1, #0x4
  54.    
  55.    RSB R1, R2, R1, LSL#3    ;R1=(R1*8)-R2
  56.    
  57.    ;MUL und MULA sowie MULS
  58.    
  59.    MUL R1, R2, R3
  60.    
  61.    ;MULA
  62.    
  63.    MULS R1, R2, R1
  64.  
  65.  
  66.    
  67.    ;Unterschiede SDIV und UDIV ausprobieren
  68.    MSR APSR,R10
  69.    
  70.    LDR R0, =0x13
  71.    LDR R1, =0x2
  72.    LDR R2, =-0x13
  73.    
  74.    SDIV R3, R0, R1  ;negative zahl: 0xFFFFFFF7  ;positive zahl: 0x00000009
  75.    UDIV R4, R0, R1  ;negative zahl: 0x7FFFFFF6  ;positive zahl: 0x00000009
  76.    
  77.    LDR R4, =0x00
  78.    
  79.    
  80.    
  81.    
  82.    
  83.    
  84.    ;**********Wichtige bitweise operatoren Befehle**********
  85.     LDR R0, =0xA
  86.     LDR R1, =0x5
  87.     LDR R2, =0xE
  88.     LDR R3, =0x3
  89.  
  90.    ;AND
  91.    AND R4, R0, R3
  92.    
  93.    ;ORR
  94.    ORR R5, R0, R1
  95.    ;EOR
  96.    EOR R6, R3, R2
  97.    ;ORN
  98.    ORN R7, R0, R1
  99.    ;BIC
  100.    
  101.    ;BFC
  102.    
  103.    ;BFI
  104.    
  105.    ;MVN
  106.  
  107.    ;RBIT
  108.    
  109.    ;REV
  110.    
  111.    ;REV16
  112.    
  113.    ;REVSH
  114.    
  115.    ;SXTB
  116.    
  117.    ;SXTH
  118.    
  119.    ;UXTB
  120.    
  121.    ;UXTH
  122.    
  123.    ;MOV
  124.    MOV R8, #0xFFF1
  125.    ;MOV R2, #0xFFFFFFAA geht nicht, zu groß. Daher mvn
  126.    
  127.    ;MOVN
  128.    MVN R9, #0x00000055 ; -> 0xFFFFFFAA
  129.    
  130.    ;MRS Welche Specialregister sind erlaubt?
  131.    ;lädt von "spezialegister" in normales register: APSR, IPSR, EPSR, PSR
  132.  
  133.    MRS R0, APSR
  134.    MRS R0, IPSR
  135.    MRS R0, EPSR
  136.    MRS R0, PSR
  137.    MRS R0, xPSR
  138.    
  139.    ;MSR
  140.    MSR APSR, R12
  141.  
  142.    ;MOV mit den fünf Barrelshift ausprobieren
  143.    
  144.    ;****************************************************
  145.    ;TEIL 3: Datentransferbefehle
  146.    ;        (MOV schon in Teil 3 behandelt)                    
  147.    ;****************************************************    
  148.  
  149.    ;LMS Zyklus
  150.    ;LDR von Var32_3 in R0
  151.    
  152.    ;Addiere dazu 1
  153.      
  154.    ;Schreibe zurueck an gleiche Stelle zurück
  155.  
  156.  
  157.    ;Lade var16_1 mit LDRH und LDRSH (Unterschied)
  158.    
  159.    ;Lade var8_1 und var8_2 jeweils mit LDRB und LDRSB (Unterschied?)
  160.    
  161.  
  162.    ;Lade erstes Element von var32a_1 in R0
  163.  
  164.  
  165.    ;Lade drittes Element von var32a_1 in R1
  166.  
  167.  
  168.    ;Lade n-tes Element von var32_a1 in R2 (Annahme: n<10)
  169.  
  170.    
  171.    ;Schreibe Wert 0xBADDCAFE in Var8_1
  172.    ;Mit STRB, STRH, STR
  173.    
  174.    
  175.    ;Welche Code wird hier generiert?
  176.    LDR R0,=0xFF
  177.    LDR R1,=0xFFFF
  178.    LDR R2,=0x173C
  179.    LDR R3,=0xFFFFFFFF
  180.    LDR R4,=0xFFFF0000
  181.    LDR R5,=0x494AC473
  182.  
  183.    ;Schreibe den Wert 0x494AC473 mit zwei
  184.    ;MOV-Befehlen in R6
  185.  
  186.  
  187.    ;Lege den Wert von R6 auf dem Stack ab (PUSH)
  188.    
  189.    ;Lese den Wert wieder vom Stack in R7 ohne POP
  190.    
  191.    ;Verschiebe den Stackpointer ohne POP wieder zurück
  192.    
  193.    ;****************************************************
  194.    ;TEIL 3: Kontrollstrukturen
  195.    ;                        
  196.    ;****************************************************    
  197.  
  198.    ;a ist R0, b ist R1
  199.  
  200.    ;if (a < 0)
  201.    
  202.    ;if (a < 0 && b > 10)
  203.    
  204.    ;do-while-Schleife
  205.    ; a = 0;
  206.    ;do {
  207.    ;   a++;
  208.    ;   } while (a<10)
  209.  
  210.    ;while-Scheife
  211.    ;a = 0 oder 10
  212.    ;while (a<10)
  213.    ;{ }
  214.      
  215.    ;****************************************************
  216.    ;TEIL 4: Funktionen
  217.    ;                        
  218.    ;****************************************************      
  219.  
  220.    ; int calc1 (int a, int b, int c, int d)
  221.    ; { return (a-b+c+d); }  
  222.  
  223.    ; int calc2 (int a, int b, int c, int d, int e)
  224.    ; { return (a-b+c+d-e); }  
  225.  
  226.    ; int strcpy(int* pdest, int* psource)
  227.    ; str in Datenarea verwenden
  228.    
  229.    ; int strncpy (int* pdest, int* psoruce, size_t num)
  230.    ; str in Datenarea verwenden
  231.  
  232.  
  233.  
  234. LOOPFOREVER
  235.    ; Endless Loop
  236.    B LOOPFOREVER
  237.  
  238.    ENDP
  239.  
  240.  
  241. ;Data AREA
  242. ;Beim Übersetzen kommen hier Warnungen (warum?)
  243.    AREA myData, DATA, READWRITE
  244. var32_1  DCD 0xBADDCAFE           ;Adresse von ... bis 0-3
  245. var32_2  DCD 0x8899AABB           ;Adresse von ... bis 4-7
  246. var32_3  DCD 0x77664433           ;Adresse von ... bis 8-B
  247. var8_dum DCB 0x55                 ;Adresse von ... bis C-10
  248. var32_4  DCD 0xFF778800           ;Adresse von ... bis
  249. var16_1  DCW 0x8877               ;Adresse von ... bis
  250. var16_2  DCW 4834                 ;Adresse von ... bis
  251. var8_1   DCB 0x7F                 ;Adresse von ... bis
  252. var8_2   DCB 0x80                 ;Adresse von ... bis
  253. str1     DCB "Hello World",0      ;Adresse von ... bis
  254. str2     DCB "Hello Offenburg",0  ;Adresse von ... bis
  255. str3     SPACE 20                 ;Adresse von ... bis
  256. var32a_1 DCD 1,2,3,4,5,6,7,8,9,10 ;Adresse von ... bis
  257.    
  258. ;add here var
  259.    END  ;End of the program
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement