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

Description: Write and test a MASM program to perform the following tasks: 1. Di

ID: 3782091 • Letter: D

Question

Description:
Write and test a MASM program to perform the following tasks:
1. Display your name and program title on the output screen.
2. Display instructions for the user.
3. Prompt the user to enter two numbers.
4. Calculate the sum, difference, product, (integer) quotient and remainder of the numbers.
5. Display a terminating message.
Requirements:
1. The main procedure must be divided into sections:
introduction
get the data
calculate the required values
display the results
say goodbye
2. The results of calculations must be stored in named variables before being displayed.

Explanation / Answer

INCLUDE Irvine32.inc


.data

myName       BYTE   "chegs ", 0

programTitle   BYTE"Programming Assignment ", 0

instructions       BYTE   "Please enter two numbers, and I'll show you the sum, difference, product, quotient, and remainder.", 0

prompt_1   BYTE   "First Number: ", 0

prompt_2   BYTE   "Second Number: ", 0


firstNumber       DWORD   ?   ; integer entered by user

secondNumber       DWORD   ?   ; second integer entered by user
.
goodBye           BYTE   "Goodbye",0
equalsString       BYTE   " = ", 0

sum                   DWORD   ?

sumString           BYTE   " + ",0

difference           DWORD   ?

differenceString   BYTE   " - ",0

product               DWORD   ?

productString       BYTE   " * ",0

quotient           DWORD   ?

quotientString       BYTE   " / ",0

remainder           DWORD   ?

remainderString       BYTE   " remainder ",0


;


.code

main PROC


   ; Introduction
  


   ; Get The Data
  

; This section gets the first and second number and jumps if the user's second number is greater than the first number
   ; the program will still allow them to loop even if they enter a second number that is greater than the first.

       mov       edx, OFFSET instructions


       call   WriteString

       call   CrLf


  
       ; get firstNumber

top:
  
  
   mov       edx, OFFSET prompt_1
      
   call   WriteString
          
call   ReadInt
          
mov       firstNumber, eax

          
; get secondNumber
          
mov       edx, OFFSET prompt_2
          
call   WriteString
          
call   ReadInt
          
mov       secondNumber, eax

; **EC: Jump if second number greater than first
             
mov       eax, secondNumber
          
cmp       eax, firstNumber
          
jg       Warning
          
jle       Calculate

Warning:
          
mov       edx, OFFSET EC1warn
          
call   WriteString
          
call   CrLf
          
jg       JumpToLoop   ; jump if secondNumber > firstNumber

Calculate:       ; Calculate Required Values
                 
; sum
              
mov       eax, firstNumber
      
add       eax, secondNumber
  
   mov       sum, eax


              
; difference
              
mov       eax, firstNumber
          
   sub       eax, secondNumber

   mov       difference, eax

              
; product
              
mov       eax, firstNumber

      
mov       ebx, secondNumber
   mul       ebx
              
mov       product, eax

   ; quotient
              
mov       edx, 0
              
mov       eax, firstNumber
               cdq
      
mov       ebx, secondNumber
               cdq
      
div       ebx
              
mov       quotient, eax
              
mov       remainder, edx

   ; Display Results


               ; sum results


              
mov       eax, firstNumber
              
call   WriteDec
              
mov       edx, OFFSET sumString
              
call   WriteString
              
mov       eax, secondNumber
              
call   WriteDec
              
mov       edx, OFFSET equalsString
              
call   WriteString
          
   mov       eax, sum
              
call   WriteDec
              
call   CrLf

              
; difference results
              
mov       eax, firstNumber
              
call   WriteDec
              
mov       edx, OFFSET differenceString
              
call   WriteString
              
mov       eax, secondNumber
              
call   WriteDec
              
mov       edx, OFFSET equalsString
              
call   WriteString
              
mov       eax, difference
              
call   WriteDec
              
call   CrLf

              
; product results
              
mov       eax, firstNumber
              
call   WriteDec
              
mov       edx, OFFSET productString
              
call   WriteString
              
mov       eax, secondNumber
              
call   WriteDec
              
mov       edx, OFFSET equalsString
      
       call   WriteString
              
mov       eax, product
              
call   WriteDec
              
call   CrLf

              
; quotient results
              
mov       eax, firstNumber
          
   call   WriteDec
          
   mov       edx, OFFSET quotientString
          
   call   WriteString
              
mov       eax, secondNumber
          
   call   WriteDec
              
mov       edx, OFFSET equalsString
              
call   WriteString
              
mov       eax, quotient
              
call   WriteDec
              
mov       edx, OFFSET remainderString
              
call   WriteString
              
mov       eax, remainder
              
call   WriteDec
              
call   CrLf


   ;calculate remainder
  
          
mov       eax, firstPart
          
   mul       oneThousand
          
   mov       temp, eax
              
mov       eax, bigInt
              
sub       eax, temp
              
mov       secondPart, eax
              
call   WriteDec
          
   call   CrLf

      
; Loop until user quits
       ; prompts the user to enter a 0 or 1 to continue looping.
      
; if they do want to play again, it takes them to section 'top'
      
; skipping the instrucitons

              
; get response for loop


JumpToLoop:      
mov       edx, OFFSET
                   
call   WriteString
                  

       cmp       eax, 1
      
       je       top   ; jump to top if response == 1

      
; Say Goodbye
              
    mov       edx, OFFSET goodBye

   call   WriteString
              
   call   CrLf

   exit
   ; exit to operating system

main ENDP


END main