Question: Create a procedure named FindThrees that returns 1 if an array has three consecutive values of 3 somewhere in the array. Otherwise, return 0. The

Create a procedure named FindThrees that returns 1 if an array has three consecutive values of 3 somewhere in the array. Otherwise, return 0. The procedures input parameter list contains a pointer to the array and the arrays size. 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 FindThrees several times with different arrays.

Here is what I have so far,

;Create procedure name FindThrees INCLUDE Irvine32.inc ;FindThrees PROTO, ;pointerArr: PTR DWORD, ;ArrLeng:DWORD

.data ;strContains BYTE "The array has three consecutive 3.",0 ;strNotContain BYTE "The array does not contain three consecutive 3.",0 ;arrOne BYTE 1, 2, 3, 2 ;arrTwo BYTE 3, 3, 5, 7, 3 ;arrThree BYTE 4, 3, 3, 3, 1, 8

.code main PROC

; calls the procedures call Clrscr ; clears the screen ; find if the array arrOne contains three consecutive 3 INVOKE FindThrees, ADDR arrOne, LENGTHOF arrOne .IF eax == 1 mov edx,OFFSET strContains call WriteString ; writes strContains call Crlf .ELSE mov edx,OFFSET strNotContain call WriteString ; writes strNotContain call Crlf .ENDIF

; find if the array arrTwo contains three consecutive 3 INVOKE FindThrees, ADDR arrTwo, LENGTHOF arrTwo .IF eax == 1 mov edx,OFFSET strContains call WriteString ; writes strContains call Crlf .ELSE mov edx,OFFSET strNotContain call WriteString ; writes strNotContain call Crlf .ENDIF

; find if the array arrThree contains three consecutive 3 INVOKE FindThrees, ADDR arrThree, LENGTHOF arrThree .IF eax == 1 mov edx,OFFSET strContains call WriteString ; writes strContains call Crlf .ELSE mov edx,OFFSET strNotContain call WriteString ; writes strNotContain call Crlf .ENDIF exit main ENDP FindThrees PROC USES esi ecx, pointerArr: PTR DWORD, ; points the array ArrLeng: DWORD ; the length of array ; finds if the array contains three consecutive 3 as its values ; Receives: pointer to array and the length of array ; Returns: EAX = 1 (true) or 0 (false) mov eax,0 ; initialize EAX = 0 mov esi,pointerArr ; ESI is the pointer to array mov ecx,ArrLeng sub ecx,2 ; as next 2 elements were observed L1: .IF [esi] == 3 .IF [esi+1] == 3 .IF [esi+2] == 3 mov eax,1 ; set EAX = 1 jmp L2 .ENDIF .ENDIF .ENDIF inc esi ;Increment ESI loop L1 L2: ret ; returns EAX FindThrees ENDP

END main

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!