Bonjour,
Je suis bloqué dans un exercice assembleur:
[org 0x0100]
mov ax,cs
mov ds,ax
mov ax, 00h
mov bx ,01h
mov cx ,[limite]
pour add ax, bx ;ax-< ax + bx
mov [swap] ,ax
mov ax, bx
mov bx, [swap]
loop pour
mov [fibo], bx
mov ah,4ch
int 21h
nop
[segment .data]
limite db 0Ah,00
swap db00h,00
fibo db 00h,00
il faut réaliser l'assemblage et donner la taille en octet ensuite détaillez le cycle d'instruction en assembleur x86 de mov [swap], ax (ip contient 0110)
Assembleur
Débuté par fengweilee, avr 13 2010 11:45
4 réponses à ce sujet
#1
Posté 13 avril 2010 - 11:45
#2
Posté 13 avril 2010 - 12:15
Bonjour,
je te colle ce que j'avais envoyé en MP à une élève qui avait même DM :
je te colle ce que j'avais envoyé en MP à une élève qui avait même DM :
Citation
Je ne connais pas bien la syntaxe de l'assembleur du x86, mais le principe est le même que sur d'autre.
J'ai téléchargé un émulateur ici :
http://www.emu8086.com/
C'est une version d'essai, mais elle marchera bien plusieurs jours, et elle permet de sauvegarder ce que l'on a fait et aussi de l'émuler en observant les registres.
J'ai copié-collé ton source, essayé de retirer les erreurs de frappe, mais je ne suis pas sûr que mes corrections soient toutes bonnes.
En particulier, je ne sais pas à quoi sert [segment].
Je te propose donc de télécharger la même chose, l'installer sur ton ordinateur et de compiler.
Sur l'émulateur, les étiquettes doivent être suivies de " : " (deux points).
Le ret est mis par défaut par l'émulateur.
Il semble donc que le code, si je n'ai pas fait trop d'erreurs, fasse une longueur de FF, soit 128 octets.
EMU8086 GENERATED LISTING. MACHINE CODE <- SOURCE.
Essai_bahut.com -- emu8086 assembler version: 4.08
[ 18/03/2010 -- 15:58:40 ]
===================================================================================================
[LINE] LOC: MACHINE CODE SOURCE
===================================================================================================
[ 1] :
[ 2] : ; You may customize this and other start-up templates;
[ 3] : ; The location of this template is c:\emu8086\inc\0_com_template.txt
[ 4] :
[ 5] : org 100h
[ 6] :
[ 7] :
[ 8] :
[ 9] : ;[SEGMENT .text]
[ 10] :
[ 11] :
[ 12] :
[ 13] 0100: 8C C8 MOV AX, CS
[ 14] :
[ 15] 0102: 8E D8 MOV DS, AX
[ 16] :
[ 17] 0104: B8 00 00 MOV AX, 00h
[ 18] :
[ 19] 0107: BB 01 00 MOV BX, 01h
[ 20] :
[ 21] 010A: B9 23 01 MOV CX, limite
[ 22] :
[ 23] :
[ 24] :
[ 25] 010D: POUR :
[ 26] :
[ 27] 010D: 03 C3 ADD AX, BX ; AX <- AX + BX
[ 28] :
[ 29] 010F: 89 06 25 01 MOV [swap] , AX
[ 30] :
[ 31] 0113: 8B C3 MOV AX, BX
[ 32] :
[ 33] 0115: BB 25 01 MOV BX, swap
[ 34] :
[ 35] 0118: 90 90 LOOP POUR
[ 36] :
[ 37] :
[ 38] :
[ 39] 011A: 89 1E 27 01 MOV fibo, BX
[ 40] :
[ 41] :
[ 42] :
[ 43] 011E: B4 4C MOV AH, 4Ch
[ 44] :
[ 45] 0120: CD 21 INT 21h
[ 46] :
[ 47] :
[ 48] 0122: 90 NOP
[ 49] :
[ 50] :
[ 51] : ;[SEGMENT .data]
[ 52] :
[ 53] :
[ 54] :
[ 55] 0123: 0A 00 limite: db 0Ah, 00
[ 56] :
[ 57] 0125: 00 00 swap: db 00h, 00
[ 58] :
[ 59] 0127: 00 00 fibo: db 00h, 00
[ 60] :
[ 61] 0129: C3 ret
[ 62] :
[ 63] :
[ 64] :
[ 65] :
[ 66] :
[ 67] :
===================================================================================================
===================================================================================================
J'ai téléchargé un émulateur ici :
http://www.emu8086.com/
C'est une version d'essai, mais elle marchera bien plusieurs jours, et elle permet de sauvegarder ce que l'on a fait et aussi de l'émuler en observant les registres.
J'ai copié-collé ton source, essayé de retirer les erreurs de frappe, mais je ne suis pas sûr que mes corrections soient toutes bonnes.
En particulier, je ne sais pas à quoi sert [segment].
Je te propose donc de télécharger la même chose, l'installer sur ton ordinateur et de compiler.
Sur l'émulateur, les étiquettes doivent être suivies de " : " (deux points).
Le ret est mis par défaut par l'émulateur.
Il semble donc que le code, si je n'ai pas fait trop d'erreurs, fasse une longueur de FF, soit 128 octets.
EMU8086 GENERATED LISTING. MACHINE CODE <- SOURCE.
Essai_bahut.com -- emu8086 assembler version: 4.08
[ 18/03/2010 -- 15:58:40 ]
===================================================================================================
[LINE] LOC: MACHINE CODE SOURCE
===================================================================================================
[ 1] :
[ 2] : ; You may customize this and other start-up templates;
[ 3] : ; The location of this template is c:\emu8086\inc\0_com_template.txt
[ 4] :
[ 5] : org 100h
[ 6] :
[ 7] :
[ 8] :
[ 9] : ;[SEGMENT .text]
[ 10] :
[ 11] :
[ 12] :
[ 13] 0100: 8C C8 MOV AX, CS
[ 14] :
[ 15] 0102: 8E D8 MOV DS, AX
[ 16] :
[ 17] 0104: B8 00 00 MOV AX, 00h
[ 18] :
[ 19] 0107: BB 01 00 MOV BX, 01h
[ 20] :
[ 21] 010A: B9 23 01 MOV CX, limite
[ 22] :
[ 23] :
[ 24] :
[ 25] 010D: POUR :
[ 26] :
[ 27] 010D: 03 C3 ADD AX, BX ; AX <- AX + BX
[ 28] :
[ 29] 010F: 89 06 25 01 MOV [swap] , AX
[ 30] :
[ 31] 0113: 8B C3 MOV AX, BX
[ 32] :
[ 33] 0115: BB 25 01 MOV BX, swap
[ 34] :
[ 35] 0118: 90 90 LOOP POUR
[ 36] :
[ 37] :
[ 38] :
[ 39] 011A: 89 1E 27 01 MOV fibo, BX
[ 40] :
[ 41] :
[ 42] :
[ 43] 011E: B4 4C MOV AH, 4Ch
[ 44] :
[ 45] 0120: CD 21 INT 21h
[ 46] :
[ 47] :
[ 48] 0122: 90 NOP
[ 49] :
[ 50] :
[ 51] : ;[SEGMENT .data]
[ 52] :
[ 53] :
[ 54] :
[ 55] 0123: 0A 00 limite: db 0Ah, 00
[ 56] :
[ 57] 0125: 00 00 swap: db 00h, 00
[ 58] :
[ 59] 0127: 00 00 fibo: db 00h, 00
[ 60] :
[ 61] 0129: C3 ret
[ 62] :
[ 63] :
[ 64] :
[ 65] :
[ 66] :
[ 67] :
===================================================================================================
===================================================================================================
Seuls les faucons volent.
Les vrais restent au sol.
Les vrais restent au sol.
#3
Posté 13 avril 2010 - 13:20
Merci de votre aide!
#5
Posté 13 avril 2010 - 20:32
fengweilee, le 13 avril 2010 - 13:20, dit :
Merci de votre aide!
segment sert apparemment au logiciel pour faire l'assemblage :il a un fichier segment .text qui correspond au début du programme et un fichier .data qui correspond à la fin du programme.Apres cela on retrouve les variables qu'on doit initialiser pour trouver leur adresses mémoires.
1 utilisateur(s) li(sen)t ce sujet
0 invité(s) et 1 utilisateur(s) anonyme(s)













