begin process at 2010 03 18 08:53:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Aide a la programmation Windows

 > 

Mov mem immediat, immediat


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Mov mem immediat, immediat

samedi 15 mars 2003 à 09:45:54 | Mov mem immediat, immediat

Erkson

Bonjour à tous.

J'utilise un Pentium II PC, Windows ME, et un debuggeur qui a un assembleur intégré. Lorsque je veux modifier le programme que je debuggue, je tape dans cet assembleur, par exemple :

mov dword ptr [00445120], 90 90 90 90

Lorsque j'exécute cette ligne, le débuggueur remplace le dword en 445120 qui contenait XX XX XX XX par 90 90 90 90.
Autrement dit : [00445120] ne signifie pas : "l'adresse contenue à l'adresse 445120", mais bien : cette adresse 4455120 elle-même.
D'ailleurs le code fabriqué par cet assembleur intégré est bien :
C7 05 20 51 44 00 90 90 90 90

Mais lorsque je veux obtenir le même code en tapant un source pour TASM, par exemple, ou MASM, ces assembleurs lisent bien ma ligne
mov dword ptr [00445120], 90909090
mais refusent de me fabriquer :
C7 05 20 51 44 00 90 90 90 90
en me disant -ce qui ne me surprend pas- 'illegal immediate'.

Je dois alors écrire :
mov eax, 445120h
mov dword ptr [eax], 90909090
pour obtenir mon résultat. Mais cela ne me satisfait pas car le code prend plus d'octets.
Mettre :
.data
mem dd 4455120h
ne me convient pas davantage, pour la même raison.

Ma question est :
pourquoi le debuggueur fabrique-t-il, lui, le bon code ?
que dois-je écrire pour obtenir ce même résultat (i.e C7 05 20 51 44 00 90 90 90 90) avec TASM ou MASM ?

TIA
Erkson
samedi 15 mars 2003 à 10:46:14 | Re : Mov mem immediat, immediat

filter

> J'utilise un Pentium II PC, Windows ME, et un debuggeur qui
>>a un assembleur intégré. Lorsque je veux modifier le
>>programme que je debuggue, je tape dans cet assembleur,
>>par exemple :
>> mov dword ptr [00445120], 90 90 90 90
Tres probablement il ne s'agit pas d'un assembleur integrer. Tt simplement un editeur hexa avec un syntax "pseudo" assembleur.

<snif></snif>

>> Je dois alors écrire :
>> mov eax, 445120h
>> mov dword ptr [eax], 90909090
>> pour obtenir mon résultat. Mais cela ne me satisfait pas car le code prend plus d'octets.

Je ne vois pas ton problem. A condition que tu fais un re-assemblage du programme cela ne pose aucun problem(vu que c le bon facon de faire). Et l'idee que 2 octets de plus sont un probleme est ridicule.

> Mettre :
> .data
> mem dd 4455120h
> ne me convient pas davantage, pour la même raison.


>
> Ma question est :
> pourquoi le debuggueur fabrique-t-il, lui, le bon code ?
> que dois-je écrire pour obtenir ce même résultat (i.e C7 05 20 51 44 00 90 90 90 90) avec TASM ou MASM ?.

Parce qu'il ne s'agit pas d'un assembleur integrer.
--
Filter
samedi 15 mars 2003 à 19:40:36 | Re : Mov mem immediat, immediat

Erkson

Bonsoir, Filter, et merci de ta réponse.

J'ai reçu de alt.lang.asm une réponse qui a réglé le problème.

Dans le source pour TASM ou MASM il fallait écrire :

mov [ds:445120h], 90909090h

Indiquer le data segment "ds:" est indispensable.

L'assembleur du débuggueur s'en passe car il sait dans quel segment se trouvent les datas.

Le source :
MODEL Tiny
.data
.code
.386
org 100h
Start:
mov dword ptr [445120h], 90909090h
END start

ne marche pas.

Celui-ci marche :

MODEL Tiny
.data
.code
.386
org 100h
Start:
mov dword ptr [ds:445120h], 90909090h
END start

En ce qui concerne le sens de [445120] tu as parfaitement raison.
J'avais gardé le souvenir que l'on ne pouvait pas écrire directement une valeur immédiate dans une adresse mémoire. Je pensais qu'il fallait passer par un registre ou par un adressage indirect : copie eax dans 445120h, ou bien met 90909090h dans la mémoire dont l'adresse se trouve en 445120h, mais pas : copie 90909090h dans 445120h.

Le fait que la compilation était impossible m'avait confirmé dans ce souvenir erroné. J'ignorais alors que la cause du refus de compilation était l'absence de l'indication du data segment.

Voilà toute l'histoire !

Erkson


lundi 31 mars 2003 à 18:24:03 | Re : Mov mem immediat, immediat

CoreBreaker

c'est normal sous Tasm par défaut assrmble en 16bits. Il génère un préfixe de changement en 32bits. Il faut que tu ecrives:

CODE sgment dword use32
mov dword ptr [00445120], 90909090h
CODE ends

Core Breaker


-------------------------------
Réponse au message :
-------------------------------

> Bonjour à tous.
>
> J'utilise un Pentium II PC, Windows ME, et un debuggeur qui a un assembleur intégré. Lorsque je veux modifier le programme que je debuggue, je tape dans cet assembleur, par exemple :
>
> mov dword ptr [00445120], 90 90 90 90
>
> Lorsque j'exécute cette ligne, le débuggueur remplace le dword en 445120 qui contenait XX XX XX XX par 90 90 90 90.
> Autrement dit : [00445120] ne signifie pas : "l'adresse contenue à l'adresse 445120", mais bien : cette adresse 4455120 elle-même.
> D'ailleurs le code fabriqué par cet assembleur intégré est bien :
> C7 05 20 51 44 00 90 90 90 90
>
> Mais lorsque je veux obtenir le même code en tapant un source pour TASM, par exemple, ou MASM, ces assembleurs lisent bien ma ligne
> mov dword ptr [00445120], 90909090
> mais refusent de me fabriquer :
> C7 05 20 51 44 00 90 90 90 90
> en me disant -ce qui ne me surprend pas- 'illegal immediate'.
>
> Je dois alors écrire :
> mov eax, 445120h
> mov dword ptr [eax], 90909090
> pour obtenir mon résultat. Mais cela ne me satisfait pas car le code prend plus d'octets.
> Mettre :
> .data
> mem dd 4455120h
> ne me convient pas davantage, pour la même raison.
>
> Ma question est :
> pourquoi le debuggueur fabrique-t-il, lui, le bon code ?
> que dois-je écrire pour obtenir ce même résultat (i.e C7 05 20 51 44 00 90 90 90 90) avec TASM ou MASM ?
>
> TIA
> Erkson
lundi 31 mars 2003 à 20:26:52 | Re : Mov mem immediat, immediat

Erkson

Merci des infos.
Je vais tester cette autre solution.

Erkson



-------------------------------
Réponse au message :
-------------------------------

> c'est normal sous Tasm par défaut assrmble en 16bits. Il génère un préfixe de changement en 32bits. Il faut que tu ecrives:
>
> CODE sgment dword use32
> mov dword ptr [00445120], 90909090h
> CODE ends
>
> Core Breaker
>
>


Cette discussion est classée dans : code, xx, mov, dword, immediat


Répondre à ce message

Sujets en rapport avec ce message

Cycles de mov [ par vecchio56 ] Je me demandais si les instructions suivantes étaient équivalentes en termes de performances, ou si certaines d'entres elles demandaient plus de cycle strrev [ par vecchio56 ] Je regarde le fichier strrev.asm qui est utilisé au moins pour les debogages et je remarque que c'est une traduction d'un algorithme écrit en C qui es A l'aide... svp [ par monitor100 ] Bonjour a tous,Je suis completement null en assembler, et il faut que je fasse afficher le résultat de la factoriel de 4 soit 24.est ce que quelqu'un Modifer le vecteur d'interruptions [ par vecchio56 ] Bonjour J'essaie de refaire la source http://www.cppfrance.com/code.aspx?ID=33558 en assembleur (ca consiste à modifier la routine de l'interruption 0 optimisation [ par sajid_morad ] salut tout le monde , j ai une parti du code en c++, que j ai voulu optimiser , le l ai reécri en asm , mai ça donne pas grand chose, si quelqu un po c/c++ et 19h [ par Xs ] salut !je travaille sous VC++ et j'aimerais utiliser une interuption processeur : 19hmon code actuel marche mais au lieu d'eteindre le PC, il le fait Peut on comparer deux binaire avec cmp ? [ par MrNice ] Lo le forum me revoila ave cun new prob...donc en fait g une table de variable, je prends al=0 je fait un xlat et je compare ce resultat avec une entr Conversion hexa vers ascii [ par Cygace ] Bonjour voici un code asm qui convertit un nombre binaire vers de l'ascii. Mais je dois modifiier ce code pour qu'il convertisse de l'hexadecimal vers Question de débutant [ par Laurent1313 ] Voilà je débute avec l'assembleur sous Delphi et il y a un truc que je ne comprends pas. Je voudrais juste savoir quelle est la différence entre :ça : Adresse mémoire d'une chaine [ par moffer ] Bonjour,Je veux pointer sur le premier caractère de ma chaine. Lorsque je compile le code suivant :SEGMENT DATAchaine db 'Hello$'SEGMENT TEX


Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales