Code minimal ASM ?

Forum Amiga Coding Code minimal ASM ?

  • Ce sujet contient 5 réponses, 4 participants et a été mis à jour pour la dernière fois par donamiga, le il y a 3 années et 5 mois.
  • Créateur
    Sujet
  • #96100
    donutman
    • Level 1
    • Messages : 15

    Hello c’est encore moi,

    bon promis, je ne vais pas vous spammer avec des questions sur l’ASM à tout bout de champs… mais je bloque sur un petit truc curieux…

    Suivant les liens donnés par lexomil, je suis tombé sur une petite intro à l’ASM du 68000. En particulier cette page.
    Premier tuto… et premier truc que je ne comprends pas…

    Voici mon code :

    ;*** Try and retry ****
    
    ; Ecrire que des 1 en LONG dans d0 puis que des 0 en .W puis que AA en .B
    ; Penser ensuite à taper a (assemble) j (jump) et x (vérifier les registres)
    ; On s'attend à lire D0 : FFFF00AA
    
    move.l #$FFFFFFFF,d0
    move.w #$0000,d0
    move.b #$AA,d0
    end 

    Or voici que j’obtiens à l’éxecution :

    ** LineA Emulator Raised At $00063FE6
    D0: FFFF00BF 00000020 00000000 00000000 00000000 00000000 00000000 00000000
    A0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00038F94
    SSP=0007FFFA USP=00038F94 SR=0008 -- -- PL=0 -N--- PC=00063FE6
    PC=00063FE6 A820 LINE_A #$0820

    LineA Emulator c’est un message d’erreur ? (je ne le trouve pas dans la doc de l’ASM…) Pourquoi n’ai je pas FFFF00AA dans d0 au final ?

    Merci d’avance :)

    Donut

Affichage de 5 réponses de 1 à 5 (sur un total de 5)

Partager sur vos réseaux sociaux préférés :
Facebooktwitterredditpinterestlinkedintumblrmail

  • Auteur
    Réponses
  • #96101
    donutman
    • Level 1
    • Messages : 15

      Hello,

      je me réponds à moi-même (la nuit porte conseil).

      LineA emulator raised n’est pas une erreur mais une exception.

      La doc de l’ASM indique à ce sujet :

      10.2 Exceptions

      Normally when we want some special routine to be executed,
      we just execute it as a subroutine. If something special hap-
      pens, the processor can also execute some special routines,
      these are called exceptions. An exception routine is ended
      with a »RTE« instead of a »RTS« in a subroutine.

      […]

      LINE_A Emulator

      Not all possible opcodes are used on the MC68000 processor,
      some are reserved for later use. Especially all commands star-
      ting with the bit combination »%1010« or »%1111«. All com-
      mands starting with »%1010 = $A« are called »UNE_A«
      commands. You can use these commands to make your own
      commands or to emulate floating point commands.

       

      Bon je ne suis pas sûr de bien comprendre de quoi il s’agit ici ni pourquoi cette exception est levée… En revanche tout est rentré dans l’ordre lorsque j’ai remplacé « end » par « rts » (que j’avais oublié). Pas sûr de bien comprendre la différence entre « end » et « rts »… « end » semble indiquer à l’assembleur la fin du code, « rts » dit qu’il doit revenir ?



      #96104
      lexomil
      • Level 3
      • Messages : 80

        question simple, tu utilises quel assembleur actuellement ?

        #96105
        donutman
        • Level 1
        • Messages : 15

          Hello,

          j’utilise ASMTwo que j’ai récupéré à cette adresse : http://coppershade.org/articles/More!/Downloads/

           

          Donut

          #96106
          slack
          • Level 7
          • Messages : 457

            En assembleur 68k, on appelle une sous routine par un « jsr » qui signifie « Jump to Subroutine ».

            On termine le code de la sous-routine par un « rts » qui signifie « Return from Subroutine ».

            Je sais qu’un programme amiga peut se terminer par un « rts ». Dans ce cas, je pense que lorque tu assembles, ton assembleur traduit en code machine les 3 « move » et le « rts » puis lorsque tu lui demande d’executer ton code, il l’appelle par un « jsr ». Dans ce cas, cela doit fonctionner.

            Par contre, si tu termine ton code par un « end » qui signifie que son travail de traduction est terminé, ton assembleur traduit en code machine les 3 « move », puis appelle ton code par un jsr. Ton processeur execute les 3 « move » puis le code qui suit et qui est imprévisible. C’est pour cela que tu as cette erreur surprenante.

            Peux-tu executer ton programme en pas à pas, c’est à dire instruction par instruction ? Cela te permettrait de voir les instructions executées et leurs conséquences sur les registres ?

            #100527
            donamiga
            • Level 5
            • Messages : 249
              ;*** Try and retry ****
              
              ; Ecrire que des 1 en LONG dans d0 puis que des 0 en .W puis que AA en .B
              ; Penser ensuite à taper a (assemble) j (jump) et x (vérifier les registres)
              ; On s'attend à lire D0 : FFFF00AA
              
              move.l #$FFFFFFFF,d0
              move.w #$0000,d0
              move.b #$AA,d0
              end 

              pourquoi de long discours pour un truc aussi simple : toujours terminer un prog par RTS

              move.l #-1,d0
              move.w #0,d0
              move.b #$AA,d0

              RTS

               

            Partager sur vos réseaux sociaux préférés :
            Facebooktwitterredditpinterestlinkedintumblrmail
            Affichage de 5 réponses de 1 à 5 (sur un total de 5)
            • Vous devez être connecté pour répondre à ce sujet.