Difference between revisions of "CSC231 No-no! and Be-Careful! situations"

From dftwiki3
Jump to: navigation, search
(Created page with '--~~~~ ---- =What's wrong with the following code?= <code><pre> ;------------------------------------------------------------------ ; function that pushes several results in t…')
 
(What's tricky about the following code?)
Line 29: Line 29:
  
 
<code><pre>
 
<code><pre>
 +
compute:
 +
        pushad
 +
push ebx
 +
        mov ebx, esp
 +
 +
;;; get parameters from the stack                                                                                     
 +
 +
        mov    ecx,[ebp+XX]    ;XX is some offset                                                                     
 +
        mov eax,[ebp+YY] ;YY is some offset                                                                     
 +
        mov ebx,[ebp+ZZ]    ;ZZ is some offset                                                                     
 +
.for:  call doSomething ;operate on eax and ebx                                                               
 +
                                ; on return, eax contains                                                             
 +
                                ; result we're interested in                                                           
 +
        loop    .for
 +
 +
;;; we're done                                                                                                         
 +
        pop ebx
 +
        popad
 +
        ret 3*4
 +
 +
 +
 +
 +
 +
  
 
</pre></code>
 
</pre></code>

Revision as of 08:17, 10 November 2010

--D. Thiebaut 13:15, 10 November 2010 (UTC)


What's wrong with the following code?


;------------------------------------------------------------------
; function that pushes several results in the stack
;------------------------------------------------------------------
compute:	
        pushad
        mov	ecx, N		;loop some number of times                                                              
        mov	eax, data1	;get some data                                                                          
        mov	ebx, data2
.for:   call	doSomething	;operate on eax and ebx                                                                 
                                ; on return, eax contains                                                               
                                ; result we're interested in                                                            
        push	eax		;save result in stack                                                                   
        loop	.for

;;; we're done                                                                                                          
        popad
        ret

What's tricky about the following code?

compute:	
        pushad
	push	ebx
        mov	ebx, esp

;;; get parameters from the stack                                                                                       

        mov     ecx,[ebp+XX]    ;XX is some offset                                                                      
        mov	eax,[ebp+YY]	;YY is some offset                                                                      
        mov	ebx,[ebp+ZZ]    ;ZZ is some offset                                                                      
.for:   call	doSomething	;operate on eax and ebx                                                                 
                                ; on return, eax contains                                                               
                                ; result we're interested in                                                            
        loop    .for

;;; we're done                                                                                                          
        pop	ebx
        popad
        ret	3*4