section .data
@DATA
mainMenu DB "Welcome to the inventory system! Please choose from the following options:", 0Ah
option1 DB "1. View inventory list", 0Ah
option2 DB "2. Add item to inventory list", 0Ah
option3 DB "3. Remove item from inventory list", 0Ah
option4 DB "4. Check inventory levels", 0Ah
option5 DB "5. Exit", 0Ah

section .code
MAIN:
    MOV AX,@DATA    ;Move data segment address to AX
    MOV DS,AX       ;Move AX to DS
    MOV AH,09H      ;Set AH to 9 to display string
    LEA DX,mainMenu  ;Load Effective Address of mainMenu to DX
    INT 21H         ;Display the mainMenu
    MOV AH,09H      ;Set AH to 9 to display string
    LEA DX,option1  ;Load Effective Address of option1 to DX
    INT 21H         ;Display option1
    MOV AH,09H      ;Set AH to 9 to display string
    LEA DX,option2  ;Load Effective Address of option2 to DX
    INT 21H         ;Display option2
    MOV AH,09H      ;Set AH to 9 to display string
    LEA DX,option3  ;Load Effective Address of option3 to DX
    INT 21H         ;Display option3
    MOV AH,09H      ;Set AH to 9 to display string
    LEA DX,option4  ;Load Effective Address of option4 to DX
    INT 21H         ;Display option4
    MOV AH,09H      ;Set AH to 9 to display string
    LEA DX,option5  ;Load Effective Address of option5 to DX
    INT 21H         ;Display option5
    MOV AH,01H      ;Set AH to 1 to take input
    INT 21H         ;Take input
    MOV CH,AH       ;Move the input to CH
    CMP CH, 30H     ;Compare the input to 30H
    JNE END         ;If not equal, jump to end
    CMP CH, 35H     ;Compare the input to 35H
    JNE END         ;If not equal, jump to end
    JMP CHOICE      ;Else jump to choice

CHOICE:
    CMP CH, 31H     ;Compare the input to 31H
    JNE CH2         ;If not equal, jump to CH2
    JMP VIEW        ;Else jump to VIEW

CH2:
    CMP CH, 32H     ;Compare the input to 32H
    JNE CH3         ;If not equal, jump to CH3
    JMP ADD         ;Else jump to ADD

CH3:
    CMP CH, 33H     ;Compare the input to 33H
    JNE CH4         ;If not equal, jump to CH4
    JMP REMOVE      ;Else jump to REMOVE

CH4:
    CMP CH, 34H     ;Compare the input to 34H
    JNE CH5         ;If not equal, jump to CH5
    JMP CHECK       ;Else jump to CHECK

CH5:
    CMP CH, 35H     ;Compare the input to 35H
    JNE END         ;If not equal, jump to END
    JMP EXIT        ;Else jump to EXIT

END:
    JMP MAIN        ;Jump to main

VIEW:
    ;Code to view inventory list
    JMP MAIN        ;Jump to main

ADD:
    ;Code to add item to inventory list
    JMP MAIN        ;Jump to main

REMOVE:
    ;Code to remove item from inventory list
    JMP MAIN        ;Jump to main

CHECK:
    ;Code to check inventory levels
    JMP MAIN        ;Jump to main

EXIT:
    MOV AH, 4CH     ;Set AH to 4CH to exit program
    INT 21H         ;Exit program 

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