Difference between revisions of "CSC231 No-no! and Be-Careful! situations"
(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