include irvine32.inc
.data
line byte " This is a Simple Calculator in Assembly ",0,13h,10h
line1 byte " Chosee Operation: '+' '-' '/' '*' ",0,13h,10h
line11 byte " Addition: '+' ",0,13h,10h
line12 byte " Subtraction: '-' ",0,13h,10h
line13 byte " Multiplication: '*' ",0,13h,10h
line14 byte " Division: '/' ",0,13h,10h
line15 byte " Repete: 'R' ",0,13h,10h
line16 byte " Exit: 'E' ",0,13h,10h

line2 byte " Addition: ",0,13h,10h
line3 byte " Subtraction: ",0,13h,10h
line4 byte " Multiplication: ",0,13h,10h
line5 byte " Division: ",0,13h,10h

msg byte " Enter First Integer: ",0,13h,10h
msg1 byte " Enter second Integer: ",0,13h,10h

put byte " Result is Equal to = ",0
put1 byte " First No is: ",0
put2 byte " Second No is: ",0

num1 word ?
num2 word ?

button byte ?

.code
main PROC
call clrscr
mov edx,offset line
call writestring
call crlf

start:
call crlf
mov edx,offset line1
call writestring
call crlf
mov edx,offset line11
call writestring
call crlf
mov edx,offset line12
call writestring
call crlf
mov edx,offset line13
call writestring
call crlf
mov edx,offset line14
call writestring
call crlf
mov edx,offset line15
call writestring
call crlf
mov edx,offset line16
call writestring
call crlf
call crlf

mov edx,offset button
call readchar
mov button,al

cmp button,'+'
JE addition

cmp button,'-'
JE subtraction

cmp button,'*'
JE multiplication

cmp button,'/'
JE division

cmp button,'r'
JE start
JNE stop

addition:
mov edx,offset line2
call writestring
call crlf
mov edx,offset msg ;Read first no
call writestring
call readint
mov num1,ax

mov edx,offset msg1 ;read 2nd no
call writestring
call readint
mov num2,ax

mov edx,offset put1 ;display both no
call writestring
mov ax,num1
call writeint
call crlf
mov edx,offset put2
call writestring
mov ax,num2
call writeint
call crlf
call crlf
mov edx,offset put
call writestring
mov ax,num1
add ax,num2
call writeint
call crlf

Jmp start

subtraction:
mov edx,offset line3
call writestring
call crlf
mov edx,offset msg ;Read first no
call writestring
call readint
mov num1,ax

mov edx,offset msg1 ;read 2nd no
call writestring
call readint
mov num2,ax

mov edx,offset put1 ;display both no
call writestring
mov ax,num1
call writeint
call crlf
mov edx,offset put2
call writestring
mov ax,num2
call writeint
call crlf
call crlf
mov edx,offset put
call writestring
mov ax,num2
sub ax,num1
call writeint
call crlf

JMP start

multiplication:
mov edx,offset line4
call writestring
call crlf
mov edx,offset msg ;Read first no
call writestring
call readint
mov num1,ax

mov edx,offset msg1 ;read 2nd no
call writestring
call readint
mov num2,ax

mov edx,offset put1 ;display both no
call writestring
mov ax,num1
call writeint
call crlf
mov edx,offset put2
call writestring
mov ax,num2
call writeint
call crlf
call crlf
mov edx,offset put
call writestring
mov ax,num1
mov bx,num2
mul bx
call writeint
call crlf

JMP start

division:
mov edx,offset line5
call writestring
call crlf
mov edx,offset msg ;Read first no
call writestring
call readint
mov num1,ax

mov edx,offset msg1 ;read 2nd no
call writestring
call readint
mov num2,ax

mov edx,offset put1 ;display both no
call writestring
mov ax,num1
call writeint
call crlf
mov edx,offset put2
call writestring
mov ax,num2
call writeint
call crlf
call crlf
mov edx,offset put
call writestring
mov ax,num1
mov bx,num2
mov dx,0
div bx
call writeint
call crlf

JMP start
stop:
exit
main endp
end main 

Assembly Online Compiler

Write, Run & Share Assembly code online using OneCompiler's Assembly online compiler for free. It's one of the robust, feature-rich online compilers for Assembly language. Getting started with the OneCompiler's Assembly compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as Assembly and start coding.

About Assembly

Assembly language(asm) is a low-level programming language, where the language instructions will be more similar to machine code instructions.

Every assembler may have it's own assembly language designed for a specific computers or an operating system.

Assembly language requires less execution time and memory. It is more helful for direct hardware manipulation, real-time critical applications. It is used in device drivers, low-level embedded systems etc.

Syntax help

Assembly language usually consists of three sections,

  1. Data section

    To initialize variables and constants, buffer size these values doesn't change at runtime.

  2. bss section

    To declare variables

  3. text section

    _start specifies the starting of this section where the actually code is written.

Variables

There are various define directives to allocate space for variables for both initialized and uninitialized data.

1. To allocate storage space to Initialized data

Syntax

variable-name    define-directive    initial-value 
Define DirectiveDescriptionAllocated Space
DBDefine Byte1 byte
DWDefine Word2 bytes
DDDefine Doubleword4 bytes
DQDefine Quadword8 bytes
DTDefine Ten Bytes10 bytes

2. To allocate storage space to un-initialized data

Define DirectiveDescription
RESBReserve a Byte
RESWReserve a Word
RESDReserve a Doubleword
RESQReserve a Quadword
RESTReserve a Ten Bytes

Constants

Constants can be defined using

1. equ

  • To define numeric constants
CONSTANT_NAME EQU regular-exp or value

2. %assign

  • To define numeric constants.
%assign constant_name value

3. %define

  • To define numeric or string constants.
%define constant_name value

Loops

Loops are used to iterate a set of statements for a specific number of times.

mov ECX,n
L1:
;<loop body>
loop L1

where n specifies the no of times loops should iterate.

Procedures

Procedure is a sub-routine which contains set of statements. Usually procedures are written when multiple calls are required to same set of statements which increases re-usuability and modularity.

procedure_name:
   ;procedure body
   ret