• # .

    Posté par . En réponse au message question théorique sur l'assembleur. Évalué à 3. Dernière modification le 21 août 2019 à 17:27.

    Salut,

    Attention dans ton exemple les operandes ont des tailles differentes ce qui est une erreur.

    Aussi, ne devrais-tu pas utiliser 'byte ptr' (ou word ptr ici) plutot que 'ptr byte' ? et de toute facon tu pourrais omettre l'indicateur de taille puisqu'il peut etre induit par le premier operande.

    Extra car je m'ennuie en ce moment :

    L'instruction ADD AX,[BP-2] s'encode en 3 octets: 03 46 FE

    Le premier octet est l'opcode. Le second est le mod/rm decrivant les arguments et le troisieme est le deplacement encode sur un octet signe.

    L'opcode est au format 000000dw binaire. Donc ici 00000011 binaire, d=1 (le registre est la destination) et w=1 (l'instruction opere sur un mot).

    Le mod/rm est 46 hexa ou 106 octal : 1 = l'operande memoire a un deplacement encode sur 8 bits signes. 0 = registre AX (et non AL puisque w=1). 6 = memoire [BP+deplacement].

    Je te laisse decouvrir les details.

    Question subsidiaire : comment encoderais-tu MOV [BP-2],AL : ?? 46 FE