.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 mainExplanation / 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
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.