Veut pas assembler !!

Veut pas assembler !! - ASM - Programmation

Marsh Posté le 23-02-2005 à 19:30:14    

Bonjour à tous !
Tasm veut pas assembler ça il dit qu'il y a une erreur aux lignes en rouge...
Pourquoi ??????
(Je débute en ASM à la fac, le programme suivant à pour but de copier le 9 qui est en début de DS, et de mettre aux emplacements suivants du DS en l'incrémentant à chaque fois) (ici il boucle 10 fois)
 
Merci d'avance.
 

Citation :

assume ds:data, cs:code
 
data    segment
nombre  db 9
data    ends
 
code    segment
debut:  mov ax,data
        mov ds,ax
        mov cx,10
        lea ax,nombre
        mov bx,[ax]
boucle: inc bx
        inc ax
        mov [ax],bx
        loop boucle
        mov ah,4Ch
        int 21h
code    ends
        end debut

Reply

Marsh Posté le 23-02-2005 à 19:30:14   

Reply

Marsh Posté le 23-02-2005 à 19:44:19    

je suppose que le message que tu obtiens est un truc du genre "must be index or base register" ?
 
la raison est que tu utilises le registre AX comme un registre d'adresse (ce que tu fais en chargeant l'adresse du nombre 9 via ton "LEA" ), ce qui est interdit
 
pour arriver à tes fins, tu dois remplacer AX par un des registres suivants (je te les fournis avec leur registre de segment par défaut) :
 
SS:[BP]
DS:[BX]
DS:[SI]
DS:[EI]


Message édité par Harkonnen le 23-02-2005 à 19:48:41

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-02-2005 à 19:53:29    

Magnifique ça fonctionne !!
Merci, je pensais que les registres AX, BX, CX, DX étaient des registres 'à tout faire' qui permettaient aussi l'adressage.
 
Mais pourquoi ça marchait pas ? les 16 bits de AX ça suffit pas pour adresser une donnée ?
 
Sinon l'assembleur me sortait 'Illegal Operation', pas très explicite...

Reply

Marsh Posté le 23-02-2005 à 20:25:59    

Citation :

Magnifique ça fonctionne !!
Merci, je pensais que les registres AX, BX, CX, DX étaient des registres 'à tout faire' qui permettaient aussi l'adressage.


AX est l'accumulateur, BX est utilisé pour indexer, CX sert de compteur pour les boucles, etc...
 

Citation :


Mais pourquoi ça marchait pas ? les 16 bits de AX ça suffit pas pour adresser une donnée ?


Rien à voir. Ca marchait pas parce que tu ne peux pas utiliser AX comme registre pour adresser la mémoire. Faut demander pourquoi aux gens d'Intel :spamafote:
 

Citation :


Sinon l'assembleur me sortait 'Illegal Operation', pas très explicite...


Vire TASM, et utilise un vrai assembleur (MASM ou MASM32)
 
Question : l'assembleur 16 bits vous est imposé ou c'est ton choix ? Parce que c'est une merde sans nom à programmer, et c'est désormais totalement inutilisé


Message édité par Harkonnen le 23-02-2005 à 20:34:07

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-02-2005 à 21:24:52    

Bah à la fac on utilise Tasm pour assembler, Tlink pour linker, et Td pour débugger.
Comme je connaissais rien d'autre c'est aussi ceux que j'utilise chez moi.
(Bien que je peux aussi utiliser Tasm32, si le 32 bits apporte vraiment quelque chose).
 
Mais ces choix sont peut être en rapport avec le fait qu'on est sensés apprendre à programmer un 8086, donc on utilise pas toutes les possibilités des processeurs récent.
 

Reply

Marsh Posté le 23-02-2005 à 21:29:30    

Sinus a écrit :


Mais ces choix sont peut être en rapport avec le fait qu'on est sensés apprendre à programmer un 8086, donc on utilise pas toutes les possibilités des processeurs récent.


quel est l'intéret d'apprendre à programmer une architecture qui n'existe plus ? en 32 bits, on ne se fait plus chier avec les "assume", les segments et autres merdes sorties des 16 bits ! la mémoire est adressée d'un bloc et c'est bien plus pratique.
personnellement, je trouve ça complètement con, surtout à l'heure où les 64 bits commencent à se démocratiser :sarcastic:


Message édité par Harkonnen le 23-02-2005 à 21:29:52

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-02-2005 à 21:34:24    

Harkonnen a écrit :

quel est l'intéret d'apprendre à programmer une architecture qui n'existe plus ? en 32 bits, on ne se fait plus chier avec les "assume", les segments et autres merdes sorties des 16 bits ! la mémoire est adressée d'un bloc et c'est bien plus pratique.
personnellement, je trouve ça complètement con, surtout à l'heure où les 64 bits commencent à se démocratiser :sarcastic:


Malheureusement certains profs ont l'esprit très fermé...


---------------
[:whatde]
Reply

Marsh Posté le 24-02-2005 à 13:00:12    

Bonjour
Il y a une coquille dans la réponse N° 1. Le registre EI n'existe pas il s'agit en fait du registre DI.
Le choix de l'assembleur est une question de goût. J'utilisai TASM il y a 10 ans et je n'ai jamais trouvé quoique ce soit à lui reprocher.
Je n'aime pas la syntaxe AT&T mais je ne dit pas pour autant que c'est nul, je préfère NASM.
Le choix du prof d'utiliser le 16 bits est à mon avis très pertinent car lorsqu'on le maitrise, on maitrise le reste. Jongler avec les segments de 64 Ko est un exercice de style très formateur.
Cordialement

Reply

Marsh Posté le 25-02-2005 à 00:15:59    

Et puis il me semble que ces vieux procos, c'est utilisé dans les systèmes de feux rouges (pire, je crois que ce sont des 8088)

Reply

Marsh Posté le 25-02-2005 à 16:55:54    

merci à tous pour vos réponses.

Reply

Marsh Posté le 25-02-2005 à 16:55:54   

Reply

Marsh Posté le 25-02-2005 à 22:38:01    

db__ a écrit :

Bonjour
Il y a une coquille dans la réponse N° 1. Le registre EI n'existe pas il s'agit en fait du registre DI.


effectivement, j'ai dérapé sur mon clavier :jap: :D
 

db__ a écrit :


Le choix de l'assembleur est une question de goût. J'utilisai TASM il y a 10 ans et je n'ai jamais trouvé quoique ce soit à lui reprocher.


ben voila ce que je lui reproche : des messages d'erreurs peu explicites, ce topic en est la preuve :spamafote:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 26-02-2005 à 01:04:27    

db__ a écrit :

Le choix du prof d'utiliser le 16 bits est à mon avis très pertinent car lorsqu'on le maitrise, on maitrise le reste. Jongler avec les segments de 64 Ko est un exercice de style très formateur.


 :heink:  Et moi, je crois surtout que le choix du prof d'enseigner une programmation 16 bits est dicté par les limites (et l'ancienneté) de sa formation...
Enseigner ça (en supposant que ce soit réellement formateur), c'est justement ce qui fait disparaitre l'asm.
Alors que l'asm 32 bits est beaucoup plus simple, très proche du c.

Reply

Marsh Posté le 02-03-2005 à 13:09:12    

Bonjour
En réponse à NightWare, je dirais alors qu'il vaudrait mieux utiliser alors l'assembleur 680x0 plus confortable que celui du x86 voir des assembleurs RISC (je ne connais pas.
Ce qui fait disparaitre l'asm n'est pas son enseignement mais l'ignorance de sa facilité de programmation par de nombreuses personnes, le manque de documentation en français et l'image déastreuse qu'il trimbale.
Dans mon cas, j'irai moins vite à faire un programme de 1000 lignes en ada que son équivalent en assembleur car l'ada ne me convient pas mais au moins j'ai essayé.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed