2012-03-22 3 views
0

comme nous le savons, l'instruction loop X va plus X jusqu'à ECX = 0.Assembleur - boucle avec ECX

Ma question - Qu'est-ce que l'instruction de boucle commencer: décrémenter la ECX, ou vérifier si ECX == 0.

Signification, ce qui le ci-dessous est corect

premier

ECX = ECX - 1; 
    if ECX > 0 
     go to X 

secondes

if ECX > 0 { 
     ECX = ECX - 1; 
     fo to x; } 

Merci.

+3

Le premier. Protip: n'utilise pas 'loop', c'est lent. – harold

+0

@harold ressemble à une réponse à moi. –

+0

[Q et R sur la raison pour laquelle 'loop' est lent] (https://stackoverflow.com/questions/35742570/why-is-the-loop-instruction-slow-couldnt-intel-have-implemented-it-efficiently) –

Répondre

3

Le premier. De manuel Intel 2A:

Chaque fois que l'instruction de boucle est exécutée, le registre de comptage est décrémenté, puis vérifié pour 0. Si le nombre est 0, la boucle est terminée et l'exécution du programme se poursuit avec l'instruction suivante l'instruction LOOP. Si le compte n'est pas nul, un saut proche est effectué vers l'opérande de destination (cible), qui est vraisemblablement l'instruction au début de la boucle.

Questions connexes