x86 Assembly Language Programming Assignment FindLargest Pro
x86 Assembly Language Programming Assignment
FindLargest Procedure
Create a procedure named FindLargest that receives two parameters: a pointer to a signed doubleword array, and a count of the array\'s length. The procedure must return the value of the largest array member in EAX. Use the PROC directive with a parameter list when declaring the procedure. Preserve all registers (except EAX) that are modified by the procedure. Write a test program that calls FindLargest and passes three different arrays of different lengths. Be sure to include negative values in your arrays. Create a PROTO declaration for FindLargest.
The calls need to be in the form:
invoke FindLargest, ADDR Ex1Array, LENGTHOF Ex1Array
Solution
INCLUDE Irvine32.inc
.data
numberrange DWORD 50, 100, -4, -5, 2, 5, 101, 34, 23, 45
numberrange1 DWORD 20, 30, 40, 50
numberrange2 DWORD - 2, -5, 2, 7, 3, 10, 15, 20, 5, 6, 21, 0, 4, -5, 31, 33
largernum DWORD 0
.code
Findlargest Proto, num:DWORD, num1 : DWORD, num2 : DWORD
main PROC
invoke FindLargest, ADDR numberrange, LENGTHOF numberrange, SIZEOF numberrange
invoke FindLargest, ADDR numberrange1, LENGTHOF numberrange1, SIZEOF numberrange1
invoke FindLargest, ADDR numberrange2, LENGTHOF numberrange2, SIZEOF numberrange2
exit
main ENDP
LargestMember PROC
mov largernum, [esi]
mov eax, [esi+4]
L1:
.if largernum < [esi]
mov largernum, [esi]
.endif
add esi, 4
inc ecx
loop l1
ret
LargestMember ENDP
END MAIN
| INCLUDE Irvine32.inc .data numberrange DWORD 50, 100, -4, -5, 2, 5, 101, 34, 23, 45 numberrange1 DWORD 20, 30, 40, 50 
 | 


