Veut pas assembler !! - ASM - Programmation
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]
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...
Marsh Posté le 23-02-2005 à 20:25:59
Citation : Magnifique ça fonctionne !! |
AX est l'accumulateur, BX est utilisé pour indexer, CX sert de compteur pour les boucles, etc...
Citation : |
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
Citation : |
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é
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.
Marsh Posté le 23-02-2005 à 21:29:30
Sinus 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
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. |
Malheureusement certains profs ont l'esprit très fermé...
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
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)
Marsh Posté le 25-02-2005 à 22:38:01
db__ a écrit : Bonjour |
effectivement, j'ai dérapé sur mon clavier
db__ a écrit : |
ben voila ce que je lui reproche : des messages d'erreurs peu explicites, ce topic en est la preuve
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. |
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.
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é.
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.
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