The four basic operations.

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.