EAX=-val2+7-val3+val1

rhumsek Messages postés 17 Date d'inscription lundi 3 février 2003 Statut Membre Dernière intervention 5 novembre 2011 - 2 août 2004 à 22:57
cs_Vermifuge Messages postés 75 Date d'inscription samedi 23 mars 2002 Statut Membre Dernière intervention 18 septembre 2006 - 18 août 2004 à 11:12
voici un programme qui doit donné un résultat en fonction de la formule suivante,
mais je ne suis pas sur que le résultat obtenu après compilation du programme soit le bon résultat??
TITLE exprarith

;EAX=-val2+7-val3+val1

.386
.MODEL flat,stdcall
.STACK 4096
ExitProcess PROTO,dwExitCode:DWORD
DumpRegs PROTO

INCLUDE Irvine32.inc
.data
val1 SDWORD 8
val2 SDWORD -15
val3 SDWORD 20

.code
main PROC

mov eax,0
mov ebx,0
call dumpregs
mov eax,val2
neg eax
add eax,7
call dumpregs

mov ebx,val3
neg ebx
sub eax,ebx
call dumpregs

mov ebx,val1
add eax,ebx
call dumpregs

call dumpregs
exit
main ENDP
END main

rhumsek

13 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 août 2004 à 00:05
ben faut juste additionner et soustraire, c'est cela ?
Alors fais dans le simple.
C'est quoi tous ces 'dumpregs', servent a quoi ?

.586
.model flat, stdcall
option casemap :none
option prologue:none
option epilogue:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

.data
val1 DD 8
val2 DD -15
val3 DD 20
szbuff DB 24 dup(0)
szappname DB "Test",0

.code
start:
ALIGN 4
mov eax, val2
neg eax
add eax, 7
sub eax, val3
add eax, val1
mov ecx, offset szbuff
call itoa
push 0
push offset szappname
push offset szbuff
push 0
call MessageBox

progEnd:
push 0
call ExitProcess
itoa PROC ; IN: EAX INT32, ECX *psz
push edi
test eax, eax
mov edi, ecx
jnz short noZero
lea eax, [ecx+1]
mov byte ptr[ecx], '0'
pop edi
mov byte ptr[eax], 0
ret 0
noZero:
jge short supEgZero
mov byte ptr [edi], '-'
neg eax
inc edi
supEgZero:
push esi
mov ecx, eax
mov esi, edi
supZero:
mov eax, -858993459
mul ecx
mov eax, edx
shr eax, 3
mov edx, ecx
lea ecx, [eax+eax*4]
add ecx, ecx
sub edx, ecx
add dl, '0'
mov [edi], dl
mov ecx, eax
inc edi
test eax, eax
jnz short supZero
mov byte ptr[edi], 0
mov eax, edi
reverStr:
cmp esi, edi
jae i32toaExit
dec edi
mov cl, [esi]
mov dl, [edi]
mov [edi], cl
mov [esi], dl
inc esi
jmp short reverStr
i32toaExit:
pop esi
pop edi
ret 0
itoa ENDP

end start

ciao...
BruNews, Admin CS, MVP Visual C++
0
rhumsek Messages postés 17 Date d'inscription lundi 3 février 2003 Statut Membre Dernière intervention 5 novembre 2011
3 août 2004 à 22:19
peut tu m'expliqué ces ligne suivante que t'a écrit???

szbuff DB 24 dup(0)
szappname DB "Test",0

rhumsek
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 août 2004 à 22:28
segment .data (des donnees qu'on reserve pour faire simple).

szbuff DB 24 dup(0)
ici reserve 20 octets initialises a zero depuis l'offset 'szbuff'. Je prefixe par 'sz' pour String Zero, chaine a terminateur null, format employe par API Windows. Ces 20 octets peuvent etre employes a ce que tu veux entre temps, ils sont en lecture ecriture.

szappname DB "Test",0
dans le meme genre, 5 octets deja initialises avec des valeurs. Tu peux remarquer qu'il y a aussi le terminateur NULL.

ciao...
BruNews, Admin CS, MVP Visual C++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
7 août 2004 à 17:37
pour szbuff DB 24 dup(0), dis plutot 24 octets sinon il va pas comprendre
dumpregs: Affiche les registres a l'écran (Irvine32.inc)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Vermifuge Messages postés 75 Date d'inscription samedi 23 mars 2002 Statut Membre Dernière intervention 18 septembre 2006
18 août 2004 à 07:50
Là j'avoue que je comprend pas trop votre code de 4 pages pour un calcul simple comme ça. Moi j'aurais fais ça :

xor eax, eax
sub eax, val2
add eax, 7
sub eax, val3
add eax, val1

Tout simplement. Mais je me trompe peut-être, si oui, expliquez moi :)

@+
Vermi
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 août 2004 à 10:37
tu ne te trompes pas, on amis la meme chose.
En haut seulement affichage MessageBox en plus.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_Vermifuge Messages postés 75 Date d'inscription samedi 23 mars 2002 Statut Membre Dernière intervention 18 septembre 2006
18 août 2004 à 10:40
Oui, pardon, j'avais pas remarquer. C'était + simple d'utiliser un wsprintf lol

@+
Vermi
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 août 2004 à 10:44
Mais tellement plus lent.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_Vermifuge Messages postés 75 Date d'inscription samedi 23 mars 2002 Statut Membre Dernière intervention 18 septembre 2006
18 août 2004 à 10:50
rooo, tout de suite ^^ mais non voyont, Windows est une système en ASM Optimisé PTDR.

De toute façon, on peut se permettre d'être lent, si on est pas imparti par le temps, parce que même en ASM lent, on est + rapide que le C++ rapide ^^

@+
Vermi
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 août 2004 à 11:08
Bien sur que dans l'exemple la vitesse n'a pas d'importance mais par principe, vitesse toujours sinon on fait en VB (j'abuse et je le sais...).

ciao...
BruNews, Admin CS, MVP Visual C++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 août 2004 à 11:11
au fait, je n'incriminais pas Windows parce que wsprintf est lent, c'est normal par conception. On fournit une fonction pour faineant, faut pas demander en plus qu'elle soit rapide.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_Vermifuge Messages postés 75 Date d'inscription samedi 23 mars 2002 Statut Membre Dernière intervention 18 septembre 2006
18 août 2004 à 11:12
Pitié ! pas de VB :(
Ya quand même une marge entre vite, et TRES TRES TRES TRES LENT. lol
J'abuse quand même, en VB avec un 223Mhz on peut aller à) 150200 bds sur un port COM. Con, en dessous on peut pas lol.

@+
Vermi
0
cs_Vermifuge Messages postés 75 Date d'inscription samedi 23 mars 2002 Statut Membre Dernière intervention 18 septembre 2006
18 août 2004 à 11:12
lol, mais wsprintf est un API windows :)
@+
Vermi
0
Rejoignez-nous