Variable 32 bits stoquée dans 2 varialbes 16 bits ? - Delphi/Pascal - Programmation
Marsh Posté le 12-05-2003 à 16:52:45
y a pas de longint sur 32 bits dans TP7 ? 
Marsh Posté le 12-05-2003 à 16:58:35
En fait, la variable que je cree en pascal, je la reutilise dans des procedure en ASM, et je ne peux pas pusher des variable 32 bits  donc je me suis dis k'avec 2 varaibles 16 bits ca marcherai pe etre ...
 donc je me suis dis k'avec 2 varaibles 16 bits ca marcherai pe etre ...
Marsh Posté le 12-05-2003 à 17:10:52
bah tu découpes ta valeur alors: 
 
v1 = val and $0000FFFF; 
v2 = val shr 16; 
Marsh Posté le 12-05-2003 à 17:16:10
Si tu pouvais m'expliquer en meme temps ca serait sympa  
 
 
and $00.. et shr 16 a quoi ca correspond ? 
 
Et en pascal je fais ca comment ? 
Marsh Posté le 12-05-2003 à 17:22:35
| antp a écrit : bah tu découpes ta valeur alors:  | 
 
 
hi et lo c'est peut être plus sympa pour un mec qui a pas l'air de piger les décalages de registres 
Marsh Posté le 12-05-2003 à 17:49:24
ouais et en plus c'est ":=" et pas "="  
 
bah en effet utilise Hi et Lo alors pour avoir chacune des deux parties 
Marsh Posté le 12-05-2003 à 18:16:23
Je conais pas trop le pascal (de même pour l'ASM) 
Ca marche comment Hi et Lo svp ? 
 
Avant javais: 
| Code : 
 | 
 
 
Et comment vais je faire maintenant ?
Marsh Posté le 12-05-2003 à 19:28:57
| mesta a écrit :   | 
 
 
ça marche pas dans ton cas en fait, c'est Zion qui dit n'importe quoi je crois  d'après la doc c'est pour couper un integer 16 bits en deux bytes...
 d'après la doc c'est pour couper un integer 16 bits en deux bytes... 
 
t'as donc : 
 
longint truc; (qui contient la valeur) 
word sp_adt1;  
word sp_adt2;  
 
sp_adt1 := truc and $0000FFFF; 
sp_adt2 := truc shr 16; 
 
puis: 
 
push sp_adt1; 
push sp_adt2; 
 
enfin, je suis pas sûr que ça marche, faut tester et vérifier qu'il découpe bien le truc...
Marsh Posté le 12-05-2003 à 19:37:06
| antp a écrit :   | 
 
 ![[:cupra] [:cupra]](https://forum-images.hardware.fr/images/perso/cupra.gif)
Marsh Posté le 12-05-2003 à 19:41:02
héhé: 
 
en asm, tu mets db 66, et ça passe l'opérande en 32 bits... 
 
exemple: 
 
db 66h  
push ax 
 
donnera "push eax" 
 
idem 
 
db 66h 
add ax,bx 
 
donnera "add eax,ebx"
Marsh Posté le 12-05-2003 à 19:42:47
exemple d'utilisation: 
 
http://www.bsdg.org/swag/HARDWARE/0013.PAS.html 
 
c'est chiant, mé ça marche, les démo-makers de l'ancien temps  utilisaient bien ça
 utilisaient bien ça 
Marsh Posté le 13-05-2003 à 09:19:07
Vi merci, mais dans mon cas je fais comment ? 
 
db 66h 
push sp_adt  
 
Cela ? 
 
(avec sp_adt declaré en longint?) 
 
ps:jy connais rien en asm.
Marsh Posté le 13-05-2003 à 23:57:59
tu veux quoi, mettre une variable 32bits dans la pile ? 
 
donc à priori oui ce serait ça...
Marsh Posté le 14-05-2003 à 09:46:00
oui c'est ca mettre une varialble 32 bits dans la pile ... 
 
Mais plus loin il y a un pop in_nmb, ou in_nmb est une variable 16 bits  donc je dois faire
 donc je dois faire 
 
db 66h 
pop in_nmb  
 
c bon ?
Marsh Posté le 14-05-2003 à 10:32:12
Jai donc declaré ma variable sp_adt en longint, mais quand je fais db 66h; push sp_adt il me met toujours la meme erreur : Invalid combinaison of opcode and operands  
Marsh Posté le 14-05-2003 à 11:21:04
pop c'est prendre une variable sur la pile, et la mettre dans la destination... 
 
tu veux faire quoi, pousser une variable sur le pile ? (push) 
ou retirer une variable de la pile ? (pop) 
 
si tu veux pousser un entier 32 bits sur la pile, je ferais ça: 
 
longint truc 
 
 
db 66h 
push truc  
 
ou si TP geule: 
 
push WORD PTR[truc] 
Marsh Posté le 14-05-2003 à 18:33:14
En fait jai ca : 
 
push    sp_adt; pop   in_nmb 
 
C pour ca que je demandais ... sp_adt est en longint & in_nmb en word. jai donc fais ca push    WORD PTR[scan.sp_adt] ca passe mais kan je lance le soft ca plante ... normal ?
Marsh Posté le 15-05-2003 à 09:26:52
Ok tu as icq, aim, irc, msn pour que je puisse te parler, ca serait plus simple que par mail ou ici sur le forum.
Marsh Posté le 15-05-2003 à 14:24:26
bin le but du forum c'est que tout le monde en profite... 
Marsh Posté le 15-05-2003 à 14:26:48
Certes, mais ces sources ne sont pas "gratuites" donc je ne peux pas les mettre a disposition de tout le monde. 
Comme tu veux...
Marsh Posté le 15-05-2003 à 14:56:35
Je peux te les envoyer quand même ou non ? tu as aim, .. ?
Marsh Posté le 15-05-2003 à 22:29:31
icq ou en MP je t'en voyes mon nom d'utilisateur aimesshaine...
Marsh Posté le 16-05-2003 à 15:36:44
 
Dites les gars, y a les privés pour discuter hein   
 
Marsh Posté le 19-05-2003 à 09:23:26
Oui desole je viens seulement de savoir ou et comment ca marchait  
 
Marsh Posté le 12-05-2003 à 16:49:57
Est-ce possible? Si oui comment faire...
En fait j'ai un logiciel que je compile avec turbo pascal 7, e til marche en 16 bits, or j'ai besoin de creer une variable dans laquelle j'affecterai un grand nombre.
Merci.