The four basic operations.

Laszlo TataiLaszlo Tatai
2 min read

The following assembly program demonstrates addition, subtraction, multiplication, and division:

; Auhtor : tatai.laszlo@mail.com
;

.386
.model flat, stdcall
option casemap :none

include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\msvcrt.inc
include c:\masm32\include\masm32.inc

includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\msvcrt.lib
includelib c:\masm32\lib\masm32.lib

.data
    stringInput1    db "Enter the first number : ", 0
    stringInput2     db "Enter the second number : ", 0
    stringSum         db "Sum : %d", 13, 10, 0
    stringDiff        db "Difference : %d", 13, 10, 0
    stringProduct    db "Product : %d", 13, 10, 0
    stringQuot        db "Quotient : %d", 13, 10, 0
    stringRem        db "Remainder : %d", 13, 10, 0
    stringError     db "Error: Division by zero! ", 13, 10, 0
    inputNum1         db 11 dup (?)
    inputNum2         db 11 dup (?)
    number1         dd ?
    number2         dd ?
    result             dd ?
    remainder         dd ?

.code
start:
    ; Getting the first number as input.
    invoke StdOut, addr stringInput1        ; Displaying the input text. StdOut és StdIn
    invoke StdIn, addr inputNum1, 10        ; This here is the input.
    invoke crt_atoi, addr inputNum1            ; ASCII to integer conversion.
    mov number1, eax

    ; Getting the second number as input.
    invoke StdOut, addr stringInput2        ; Displaying the input text.
    invoke StdIn, addr inputNum2, 10        ; This here is the input.
    invoke crt_atoi, addr inputNum2            ; ASCII to integer conversion.
    mov number2, eax

    ; Addition
    mov eax, number1
    add eax, number2
    mov result, eax
    invoke crt_printf, addr stringSum, result

    ; Subtraction
    mov eax, number1
    sub eax, number2
    mov result, eax
    invoke crt_printf, addr stringDiff, result

    ; Multiplication
    mov eax, number1
    imul number2
    mov result, eax
    invoke crt_printf, addr stringProduct, result

    ; Division
    mov eax, number1
    mov edx, 0              ; Clearing the upper 32 bits for division.
    mov ebx, number2
    cmp ebx, 0
    je divisionError
    idiv ebx                ; eax = quotient, edx = Remainder
    mov result, eax
    mov remainder, edx
    invoke crt_printf, addr stringQuot, result
    invoke crt_printf, addr stringRem, remainder
    jmp exit

divisionError:
    invoke StdOut, addr stringError 

exit:
    ; exit
    invoke ExitProcess, 0

end start
0
Subscribe to my newsletter

Read articles from Laszlo Tatai directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Laszlo Tatai
Laszlo Tatai

I am happy to help beginner programmers.