Je suis étudiant en informatique et j'ai eu un cours sur l'assembleur. Cependant il reste une partie qui m'échappe: comment fonctionne la mémoire pendant l’exécution d'un programme. Je suis complètement perdu entre les registres et les instruction push, pop, popa, pusha, etc...
Voici un code dont le résultat est 49. J'ai beau me casser la tête, je ne comprends pas comment on arrive à ce résultat et surtout, qu'est ce qui se passe dans la mémoire à chaque étape de ce programme:
SIZE equ 7
section .data
vec dd 100,81,64,25,49,16,36
msg db "Result = ",0
section .text
global CMAIN
CMAIN:
push vec
push SIZE
call func1
PRINT_STRING msg
PRINT_DEC 4,eax
NEWLINE
mov eax,0
ret
;**************************************************************
func1:
enter 0,0 ;*** 1 ***
mov ecx,[ebp+8]
mov esi,[ebp+12]
mov eax,0
next:mov ebx,[esi]
push ebx
call func2
add eax,ebx
add esi,4
loop next
leave
ret 8
;***************************************************************
func2:
enter 0,0
push eax ;*** 2 ***
mov ebx,0
cont:mov eax,ebx
imul eax
cmp eax,[ebp+8]
jg found
inc ebx
jmp cont
found:
dec ebx
pop eax
leave
ret 4
En bref, comment fonctionne la pile/le stack ?
Un petit éclaircissement me permettant de me mettre sur la voie serait le bienvenu car j'ai beau chercher, je n'y arrives pas...
Merci d'avance !
- Edité par WalkYM 21 octobre 2018 à 15:46:39
Besoin d'aide pour l'assembleur
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.