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

Okay so far my code asks for user inputs and contains the procedures for additio

ID: 3534378 • Letter: O

Question

Okay so far my code asks for user inputs and contains the procedures for addition, subtraction, multiplication and division. Please help me fix the errors in my code. Also i need to implement this:

INCLUDE Irvine32.inc

COUNT 2


.data

str1 Byte " Enter a 32-bit signed integer: ",0

str2 Byte "You entered: ",0dh,0ah,0

str3 Byte " The sum of your two numbers is: ", 0dh,0ah,0

array SDWORD COUNT DUP (?)


.code

main PROC


; Input numbers from user


mov ecx, COUNT

mov edx, OFFSET str1

mov esi, OFFSET array


L1: call WriteString ; display prompt

call ReadInt ; read int from user

mov [esi],eax ; store in array

add esi,TYPE array ; next array position

loop L1


call Crlf ;end of line


mov edx,OFFSET str2 ; Redisplay the integers

call WriteString

mov ecx,COUNT

mov esi,OFFSET array


L2: mov eax,[esi] ; get integer from array

call WriteInt ; display it

call Crlf

add esi,TYPE array ; next array position

loop L2


ArraySum PROC


mov ebx,0 ; set the sum to zero

mov ecx,LENGTHOF myarray ; set number of elements


L3: add ebx,myArray[esi] ; add each integer to sum

loop L1 ; repeat for array size


mov theSum,eax ; store the sum

call Crlf ;end of line


mov edx,OFFSET str3 ; Redisplay the Sum

call WriteString

call Writeint

ret

ArraySum ENDP


ArrayDifference PROC

mov ebx,0 ; set the difference to zero

mov ecx,LENGTHOF myarray ; set number of elements


L4: sub ebx,myArray[esi] ; subtract each integer to sum

loop L1 ; repeat for array size


mov theDiff,eax ; store the difference

call Crlf ;end of line


mov edx,OFFSET str3 ; Redisplay the Difference

call WriteString

call Writeint

ret

ArrayDifference ENDP


ArrayMultiplication PROC

mov ebx,0 ; set the difference to zero

mov ecx,LENGTHOF myarray ; set number of elements


L5: imul ebx,myArray[esi] ; multiply each integer to sum

loop L1 ; repeat for array size


mov theProd,eax ; store the product

call Crlf ;end of line


mov edx,OFFSET str3 ; Redisplay the Product

call WriteString

call Writeint

ret


ArrayMultiplication ENDP


ArrayDivision PROC

mov ebx,0 ; set the difference to zero

mov ecx,LENGTHOF myarray ; set number of elements


L6: div ebx,myArray[esi] ; Divide each integer to sum

loop L1 ; repeat for array size


mov theQuotient,eax ; store the Quotient

call Crlf ;end of line


mov edx,OFFSET str3 ; Redisplay the Quotient

call WriteString

call Writeint

ret


ArrayDivision ENDP


Explanation / Answer

How about a working one :)

Here it is



section .data


; Messages


msg1 db 10,'-Calculator-',10,0

lmsg1 equ $ - msg1


msg2 db 10,'Number 1: ',0

lmsg2 equ $ - msg2


msg3 db 'Number 2: ',0

lmsg3 equ $ - msg3


msg4 db 10,'1. Add',10,0

lmsg4 equ $ - msg4


msg5 db '2. Subtract',10,0

lmsg5 equ $ - msg5


msg6 db '3. Multiply',10,0

lmsg6 equ $ - msg6


msg7 db '4. Divide',10,0

lmsg7 equ $ - msg7


msg8 db 'Operation: ',0

lmsg8 equ $ - msg8


msg9 db 10,'Result: ',0

lmsg9 equ $ - msg9


msg10 db 10,'Invalid Option',10,0

lmsg10 equ $ - msg10


nlinea db 10,10,0

lnlinea equ $ - nlinea


section .bss


; Spaces reserved for storing the values ??provided by the user.


opc: resb 2

num1: resb 2

num2: resb 2

result: resb 2


section .text


global _start


_start:


; Print on screen the message 1

mov eax, 4

mov ebx, 1

mov ecx, msg1

mov edx, lmsg1

int 80h


; Print on screen the message 2

mov eax, 4

mov ebx, 1

mov ecx, msg2

mov edx, lmsg2

int 80h


; We get num1 value.

mov eax, 3

mov ebx, 0

mov ecx, num1

mov edx, 2

int 80h


; Print on screen the message 3

mov eax, 4

mov ebx, 1

mov ecx, msg3

mov edx, lmsg3

int 80h


; We get num2 value.

mov eax, 3

mov ebx, 0

mov ecx, num2

mov edx, 2

int 80h


; Print on screen the message 4

mov eax, 4

mov ebx, 1

mov ecx, msg4

mov edx, lmsg4

int 80h


; Print on screen the message 5

mov eax, 4

mov ebx, 1

mov ecx, msg5

mov edx, lmsg5

int 80h


; Print on screen the message 6

mov eax, 4

mov ebx, 1

mov ecx, msg6

mov edx, lmsg6

int 80h


; Print on screen the message 7

mov eax, 4

mov ebx, 1

mov ecx, msg7

mov edx, lmsg7

int 80h


; Print on screen the message 8

mov eax, 4

mov ebx, 1

mov ecx, msg8

mov edx, lmsg8

int 80h


; We get the option selected.

mov ebx,0

mov ecx,opc

mov edx,2

mov eax,3

int 80h


mov ah, [opc] ; Move the selected option to the registry ah

sub ah, '0' ; Convert from ascii to decimal


; We compare the value entered by the user to know what operation to perform.


cmp ah, 1

je add

cmp ah, 2

je subtract

cmp ah, 3

je multiply

cmp ah, 4

je divide


; If the value entered by the user does not meet any of the above

; conditions then we show an error message and we close the program.

mov eax, 4

mov ebx, 1

mov ecx, msg10

mov edx, lmsg10

int 80h


jmp exit


add:

; We keep the numbers in the registers al and bl

mov al, [num1]

mov bl, [num2]


; Convert from ascii to decimal

sub al, '0'

sub bl, '0'


; Add

add al, bl


; Conversion from decimal to ascii

add al, '0'


; We move the result

mov [result], al


; Print on screen the message 9

mov eax, 4

mov ebx, 1

mov ecx, msg9

mov edx, lmsg9

int 80h


; Print on screen the result

mov eax, 4

mov ebx, 1

mov ecx, result

mov edx, 2

int 80h


; We end the program

jmp exit


subtract:

; We keep the numbers in the registers al and bl

mov al, [num1]

mov bl, [num2]


; Convert from ascii to decimal

sub al, '0'

sub bl, '0'


; Subtract

sub al, bl


; Conversion from decimal to ascii

add al, '0'


; We move the result

mov [result], al


; Print on screen the message 9

mov eax, 4

mov ebx, 1

mov ecx, msg9

mov edx, lmsg9

int 80h


; Print on screen the result

mov eax, 4

mov ebx, 1

mov ecx, result

mov edx, 1

int 80h


; We end the program

jmp exit


multiply:


; We store the numbers in registers al and bl

mov al, [num1]

mov bl, [num2]


; Convert from ascii to decimal

sub al, '0'

sub bl, '0'


; Multiply. AX = AL x BL

mul bl


; Conversion from decimal to ascii

add ax, '0'


; We move the result

mov [result], ax


; Print on screen the message 9

mov eax, 4

mov ebx, 1

mov ecx, msg9

mov edx, lmsg9

int 80h


; Print on screen the result

mov eax, 4

mov ebx, 1

mov ecx, result

mov edx, 1

int 80h


; We end the program

jmp exit


divide:


; We store the numbers in registers ax and bx

mov al, [num1]

mov bl, [num2]


mov dx, 0

mov ah, 0


; Convert from ascii to decimall

sub al, '0'

sub bl, '0'


; Division. AL = AX / BX

div bl


; Conversion from decimal to ascii

add ax, '0'

; We move the result

mov [result], ax


; Print on screen the message 9

mov eax, 4

mov ebx, 1

mov ecx, msg9

mov edx, lmsg9

int 80h


; Print on screen the result

mov eax, 4

mov ebx, 1

mov ecx, result

mov edx, 1

int 80h


; We end the program

jmp exit


exit:

; Print on screen two new lines

mov eax, 4

mov ebx, 1

mov ecx, nlinea

mov edx, lnlinea

int 80h

; End the program

mov eax, 1

mov ebx, 0

int 80h



Dont forget to rate.


Cheers!!!

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote