| 1. (8 pt) void f1(int X[], int
n) { for(int i=0; i<n; i++) X[i] = X[i]*2; }
|
.data
A dword 8, 3, 2, 7, 9
.code
f1 proc C, X:ptr dword, n:dword
local i:dword
mov eSi, X
mov i, 0
@for:
mov eBx, n
cmp i, eBx
jl @do
jmp @endfor
@do:
mov eBx, i
mov eAx, [eSi+eBx*4]
mov eCx, 2
iMul eCx
mov [eSi+eBx*4], eAx
inc i
jmp @for
@endfor:
ret
f1 endp
|
| 2. (2 pt) int A[] = {8, 3, 2,
7, 9};
f1(A, 5);
|
invoke f1, addr A, 5 |
| 3. (5 pt) int
gcd(a, b) { if (b == 0) return a; else return gcd(b, a mod b); } |
.code
gcd proc C, a:dword, b:dword
.IF b == 0
mov eAx, a
.ELSE
mov eAx, a
mov eDx, 0
div b
invoke gcd, b, eDx
.ENDIF
ret
gcd endp
main proc
invoke gcd, 18, 15
exit
main endp
end main
|
| 4. (5 pt) int f3(int X[], int
n) { if( n < 0) return 0; else return f3( X, n-1) + X[n]; } |
.data A dword 8,7,6,5,4,3,2,1 .code f3 proc C, X:ptr dword, n:sdword .IF n<0 mov eAx, 0 .ELSE mov eCx, n dec eCx invoke f3, X, eCx mov eSi, X mov eBx, n add eAx, [eSi+eBx*4] .ENDIF ret f3 endp main proc invoke f3, addr A, 7 exit main endp end main |