Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

.data fPrompt BYTE \"Please enter an integer(To quit enter -1): \",0 pPrompt BYT

ID: 3652992 • Letter: #

Question

.data fPrompt BYTE "Please enter an integer(To quit enter -1): ",0 pPrompt BYTE "The integer you have chosen is Prime. ",0 cPrompt BYTE "The integer you have chosen is not Prime. ",0 var1 DWORD ? a DWORD ? b DWORD ? .code main PROC .REPEAT mov edx, OFFSET fPrompt ;display a prompt call WriteString call ReadInt ;recordes users number mov var1, eax ;gives var1 the users number .IF var1 == -1 ;jumps to L3 if the user want's to quit jmp L3 .ENDIF call IsPrime ;calls the IsPrime procedure L3: .UNTIL var1 == -1 ;jumps up to repeat if var1 != -1 ret main ENDP ;--------------------------------------------------------- IsPrime PROC ; ; Sets the Zero flag if the integer passed in EAX is prime ; Receives: nothing ; Returns: nothing ;--------------------------------------------------------- mov ebx, 2 ; sets minimum divisor mov eax, var1 ; set dividend cdq ; converts to 64-bit edx:eax mov ecx, ebx ; stores divisor in ecx div ecx ; Proformes division mov b, eax ; Gets remainder, b is half var2 .WHILE ebx != b ;loops until ebx has reached var1/2 mov eax, var1 ; set dividend cdq ; converts to 64-bit edx:eax mov ecx, ebx ; stores divisor in ecx div ecx ; Proformes division mov a, edx ; Gets remainder .IF a == 0 ;if there was no remainder, then var1 is not prime jmp L1 ;jumps out of the loop if above is correct .ENDIF inc ebx ;increments until ebx reaches b .ENDW mov edx, OFFSET pPrompt ;tells the user their number was prime call WriteString jmp L2 L1: mov edx, OFFSET cPrompt ;tells the user their number was not prime call WriteString L2: ret IsPrime ENDP END main END main

Explanation / Answer

INCLUDE Irvine32.inc .data fPrompt BYTE "Please enter an integer(To quit enter -1): ",0 pPrompt BYTE "The integer you have chosen is Prime. ",0 cPrompt BYTE "The integer you have chosen is not Prime. ",0 var1 DWORD ? a DWORD ? b DWORD ? .code main PROC .REPEAT mov edx, OFFSET fPrompt ;display a prompt call WriteString call ReadInt ;recordes users number mov var1, eax ;gives var1 the users number .IF var1 == -1 ;jumps to L3 if the user want's to quit jmp L3 .ENDIF call IsPrime ;calls the IsPrime procedure L3: .UNTIL var1 == -1 ;jumps up to repeat if var1 != -1 ret main ENDP ;--------------------------------------------------------- IsPrime PROC ; ; Sets the Zero flag if the integer passed in EAX is prime ; Receives: nothing ; Returns: nothing ;--------------------------------------------------------- mov ebx, 2 ; sets minimum divisor mov eax, var1 ; set dividend cdq ; converts to 64-bit edx:eax mov ecx, ebx ; stores divisor in ecx div ecx ; Proformes division mov b, eax ; Gets remainder, b is half var2 .WHILE ebx != b ;loops until ebx has reached var1/2 mov eax, var1 ; set dividend cdq ; converts to 64-bit edx:eax mov ecx, ebx ; stores divisor in ecx div ecx ; Proformes division mov a, edx ; Gets remainder .IF a == 0 ;if there was no remainder, then var1 is not prime jmp L1 ;jumps out of the loop if above is correct .ENDIF inc ebx ;increments until ebx reaches b .ENDW mov edx, OFFSET pPrompt ;tells the user their number was prime call WriteString jmp L2 L1: mov edx, OFFSET cPrompt ;tells the user their number was not prime call WriteString L2: ret IsPrime ENDP END main END main