Partage
  • Partager sur Facebook
  • Partager sur Twitter

Langage machine ARMv7

    5 novembre 2019 à 21:14:18

    Bonjours, je travaille sur un projet: réalisation d'une calculatrice en langage machine (ARMv7) qui se limite aux nombres entiers et qui effectue les opérations +,-,*,=   sur le simulateur suivant : https://cpulator.01xz.net/?sys=arm-de1soc 

    Je suis débutante en assembleur et je ne parvient pas du tout à maitriser l'UART, je sais que je doit entrer les opérations dans l'UART et obtenir le résultat mais je ne sais pas comment récupérer la valeur entrée malgres la fonction getch() donnée. Quelqu'un pourrait m'aider à comprendre comment récupérer les données entrées sur un registre svp

    .equ UARTIN, 0xff201000    

    .global _start
    _start:

    getch:
     ldr r0, =UARTIN
    l1: // wait for input
        ldr r1,[r0]
        lsrs r2,r1,#15 // data avail
        beq l1
        and r0, r1, #0xff // premier octet
        bx lr
      
      

    • Partager sur Facebook
    • Partager sur Twitter
      6 novembre 2019 à 6:43:17

      Si la fonction est bien faite 

      • Soit elle respecte certaines conventions de passage de paramètres
      • Soit elle le dit dans sa documentation.

      Ici on dirait bien qu'elle laisse un octet dans r0.

      • Partager sur Facebook
      • Partager sur Twitter
        6 novembre 2019 à 10:15:49

        Oui elle met bien la bonne valeur dans r0 mais la fonction boucle indéfiniment donc quoi que je fasse après je vais rester dans la boucle de la fonction getch
        • Partager sur Facebook
        • Partager sur Twitter
          14 novembre 2019 à 14:50:52

          Bonjour.

          Dans la documentation de1-soc computer system with arm cortex-a9 vous trouverez des exemples d'utilisation de l'uart en langage assembleur arm.

          Par contre je n'ai rien trouvé au niveau du simulateur, sur l'utilisation pratique de la partie uart. 

          Bon courage.

          • Partager sur Facebook
          • Partager sur Twitter
            16 novembre 2019 à 17:41:18

            Bonsoir.

            J'ai regardé d'un peu plus prés ce simulateur et voici un petit exemple qui lit un caractère et qui l'affiche.

            .global _start
            _start:
                push {lr}
               bl lectureCar
               bl envoiCar
               pop {lr}
               bx lr

            /* r0 contient le caractère à envoyer */
            envoiCar:
               ldr r1,=0xFF201000
            1:
               ldr r2,[r1]
               tst r2,#0b1 << 15  // teste le bit 15
               beq 1b             // pas prêt -> boucle
               str r0,[r1]
               bx lr
            /* r0 retoune le caractère reçu */
            lectureCar:
               ldr r1,=0xFF201000
            1:
               ldr r2,[r1]
               tst r2,#0b1 << 15  // teste le bit 15
               beq 1b             // pas prêt -> boucle
               and r0,r2,#0xFF
               bx lr
              .end

            • Partager sur Facebook
            • Partager sur Twitter

            Langage machine ARMv7

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown