Tom's Guide > Forum > Programmation > [ASM] Enoncer assembleur

[ASM] Enoncer assembleur

Forum Programmation : [ASM] Enoncer assembleur

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour voila j'ai un petit programme a faire sur les code multiplexe est ce que quelqun pourrai m'aider s'il vous plait ?


voice l'enoncé :

Citation :


****************************************
* 5.4. Trouver le format par programme *
****************************************


But : Ecrire un programme capable de décoder une instruction du type "mov s/w/mm/rrr/ttt"


5.4.1. Le code machine est en "DATA"
************************************

Ex. : cm db 8Bh,89h,12h,34h

Amenez les bytes successivement dans un registre de travail.
Conservez la taille des opérandes dans une variable.

Ex. : taille db 8 ; 8 pour 8 bits, 16 pour 16 bits et 32 pour 32 bits

Test du premier byte amené des DATA :
Si ce byte vaut 66, on a affaire à une instruction 32 bits :
cmp al,66h
- les registres seront préfixés par "e"
- il faudra prendre le byte suivant

Test du bit donnant le sens du transfert en regard du registre principal :
Ce bit est le bit b1 dans le 1er byte : and al,2 ; « 2 » pour « 0000 0010b »
attention ! « al » est détruit par le résultat.
cmp al,2

Test du bit donnant la taille des opérandes 8/16 bits :
Ce bit est le bit b0 dans le 1er byte : and al,1 ; « 1 » pour « 0000 0001b »
attention ! « al » est détruit par le résultat.
cmp al,1

Ensuite, prenez le byte suivant

Test des bits pour obtenir le mode :
Il s'agit des bits b7b6 dans le 2ème byte : and al,192 ; « 192 » pour « 1100 0000b »
cmp al,0 -> pour 00 : adressage BI ou direct !
cmp al,64 -> pour 01 : adressage BI8
cmp al,128 -> pour 10 : adressage BI16
cmp al,192 -> pour 11 : échange entre registres

Test des bits pour obtenir le registre principal :
Il s'agit des bits b5b4b3 dans le 2ème byte :
and al,56 ; « 56 » pour « 0011 1000b »
; décaler 3 fois à gauche pour avoir la valeur exacte
shr al,3 ; la valeur est divisée par 8
; ceci donne le numéro du registre dont le nom est à prélever dans une ou des tables
; si 8 bits : TReg8 db "al$ cl$ dl$ bl$ ah$ ch$ dh$ bh$ "
; si 16 bits : TReg16 db "ax$ cx$ dx$ bx$ sp$ bp$ si$ di$ "
; si 32 bits : TReg32 db "eax$ecx$edx$ebx$esp$ebp$esi$edi$"
shl al,2 ; pour obtenir le décalage dans le tableau
mov bx, offset TReg16
add bx, al
mov ah, 09h
mov dx, bx
int 21h

Test des bits pour obtenir le type d'adressage :
Il s'agit des bits b2b1b0 dans le 2ème byte :
and al,7 ; « 7 » pour « 0000 0111b »
Construisez un tableau avec des textes décrivant explicitement chaque type
et inspirez-vous de la technique utilisée ci-dessus pour l'identité des registres.

5.4.2. L'instruction est dans le segment de "CODE"
**************************************************

1. L’instruction pouvant produire des effets non souhaités, la compiler mais
l’empêcher de s’exécuter en la sautant à l’aide d’un « jmp ».

2. Référencer l’instruction, du moins son 1er byte par une étiquette
« ici : ». Charger cette adresse dans « bx » :
mov bx, offset ici

3. Transférer les bytes successivement dans « al » :
mov al, CS:[bx]
....
inc bx ; pour le 2ème byte
mov al, CS:[bx] ; ou en une seule instruction : mov al, CS:[bx+1]



J'espere que quelqu'un pourrai m'aider s'il vous plait ;)

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Tu veux qu'on fasse ton boulot, quoi. Sinon, explique exactement quel est ton problème, parce que là c'est hypervague.


Message édité par Rakipu le 25-08-2007 à 14:02:43
Répondre à Rakipu

Surtout pour l'assembleur !
Si tu n'y mets pas les mains dedans, c'est pas la peine de continuer :D

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Tom's Guide > Forum > Programmation > [ASM] Enoncer assembleur
Aller à :

Il y a 2476 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens