Skip to main content

Arthematic Function In Assembly Language

Hello Friends,



Welcome Again To My Blog. I hope You all are Enjoying Series of Assembly Tutorials Well, Actually Assembly Is Very Important Part To Keep Strong Grep Over Exploit writing. that's why I am trying To Polish my Assembly Programming Writing Skill. So, Today Again I am going To share Example Of Codes Where I tried To Demonstrate how To Use Various Previous Posted Subroutine To Perform Arthematic Functionality.

Basically, Today I am going to Demonstrate How To Perform Addition, Division, Subtraction And Multiplication. I Hope You All Will Learn Something New.

By The Way, If you Are new And Don't Know How To Start, Compile Or Run?
Then, Don't Follow up Our Previous Blog post. Here, it's The List.

1. Hello World In Assembly
2. Find String Length In Assembly Language
3. Subroutine Demo In Assembly language
4. Some Subroutine Functionality Example
5. User Input Example In Assembly Language
6. Variable Decleration/Include function In Assembly
7. Convert Integer Into ASCII in Assembly Language

Mathematical Functions Example In Assembly Language 


Arthematic Function (Arthematicfunction.asm)

; Arthematic Functions Examples
;
; author : suraj singh bisht
; Email : surajsinghbisht054@gmail.com
;
; includable functions
;
; ====================================================
;              [ Includable File]
; Functions:
;       _strlen
;       _exit
;       _print
;       _printline
;
; ====================================================
; ====================================================
;              [ Includable File]
; Functions:
;       _printsingle
;       _printdigit
; ====================================================

%include 'DigitPrinter_without_start.asm'



; section .bss
SECTION .bss

; section data
SECTION .data
; ------------------------------------------------------------------------------------------------
;  Variable | Size | newline | String   | Null Character |
; -----------------------------------------------------------------------------------------------
 string0  db 0Ah, "[+] Your Addition Answer       : ",0h ; String Deceleration
 string1  db 0Ah, "[+] Your Subtraction Answer    : ",0h ; String Decleration
 string2  db 0Ah, "[+] Your Multiplication Answer : ",0h
 string3  db 0Ah, "[+] Your Division Answer        : ",0h
 rem  db      " Answer And Remainder is : ",  0h

; section text
SECTION .text
 global _start  ; Linker Trigger


_start:
 ; print first string
 mov eax, string0 ; print string
 call _print  ; call printline

 ; Perform Addition
 mov eax, 50 ; Load NUMBER1 into eax
 mov ebx, 5 ; Load NUMBER2 into eax
 add eax, ebx  ; Perform Addition [EAX = EAX + EBX ]
 call _printdigit ; print answer


 ; print second string
 mov eax, string1 ; load string address
 call _print  ; call print line

 ; perform subtraction
 mov eax, 50 ; Load First Number 
 mov ebx, 5 ; Load Second Number
 sub eax, ebx  ; Perform Subtraction [EAX = EAX - EBX]
 call _printdigit

 ; Print third string
 mov eax, string2 ; load string address
 call _print  ; print answer

 ; perform multiplication
 mov eax, 10 ; Load First Number
 mov ebx, 5 ; Load Second Number
 mul ebx   ; Perform Multiplication, First Argument is Default Set To = EAX,
    ; Hence, no need to pass first register, [EAX = EAX * EBX ]
 call _printdigit ; print answer

 ; print string
 mov eax, string3 ; load string address
 call _print  ; call printline

 ; perform division
 mov eax, 100 ; Load First Number
 mov ebx, 9 ; Load Second Number
 mov edx, 0 ; Make Sure, Edx = 0
 div ebx   ; perform division, First Argument is Default Set To = EAX,
    ; Hence, No need to pass first register, [EDX, EAX = EAX / EBX]
    ; Here, EAX = Quotient & EDX = Remainder
 push edx  ; Save Remainder Into Stack

 call _printdigit ; print answer Quotient

 ; print remainer text
 mov eax, rem  ; Load Address
 call _print  ; 

 ; print remainder
 pop eax   ; Load Remainder
 call _printdigit ; call printline


 ; exit
 jmp _exit  ; exit routine

Digit Printer Function (DigitPrinter_without_start.asm)


;    Digit printing concept
; author : Suraj Singh Bisht
; Email   : surajsinghbisht054@gmail.com
;
; includable functions
%include 'includable_functions_without_start.asm'

; ====================================================
;              [ Includable File]
; Functions:
;       _strlen
;       _exit
;       _print
;       _printline
;
; ====================================================
;
; ====================================================
;              [ Includable File]
; Functions:
; _printsingle
; _printdigit
;
;
; ====================================================
;
; Simple Concept to print multi digit numbers
;
; For Example :
; Dividend  = 1000 (Dividend)
; Divisor   = 10
;
; ( Quotient, Remainder ) = ( Dividend / Divisor )
;
;
; While (if Quotient is Not Equal To 0){
; print (Remainder);
;
; ( Quotient, Remainder ) = ( Quotient / Divisor )
;
; }
;
;
;
; Come On! Use Mind And Calculate Above Provided Algo.
;
;
__printreverse:
 ; input
 ;  eax = address of string
 ;
 ; output
 ; nothing
 push ebx
 push ecx
 push edx

 ; store value into stack
 push eax
 call _strlen  ; Find String length
 mov ecx, eax  ; ECX = Length Of String
 pop ebx   ; EBX = Address of string

_printreverseiterate:
 mov al, [ebx+ecx]  ; Load Address Into EAX
 call _printsingle  ; print single number over terminal
 cmp ecx, 0   ; Compare if ECX is zero
 je _printreversereturn  ; Return
 dec ecx
 jmp _printreverseiterate ; Repeat


_printreversereturn:
 pop edx
 pop ecx
 pop ebx
 ret


; routine to print single digit
_printsingle:
        ; Input:
        ;       EAX = Value
        ; Output:
        ;       nothing
        push ebx        ; store register into stack

        mov ebx, 0      ; EBX = 0
        push ebx        ; push ebx
        push eax        ; push eax
        mov eax, esp    ; EAX = ESP
        call _print     ; call print 

        pop eax         ; pop Eax
        pop ebx         ; pop EBX Null Value
        pop ebx         ; pop eax

        ret             ; return 


; Digit To ASCII Digit Convertion Subroutine
_printdigit:
        ; Input:
        ;       EAX = Digit Number
        ; Output
        ;       EAX
        ;

 ; Save Values
        push eax                ; Save Digit [Previous Arguments]
        push ebx                ; Push Ebx To Stack [Previous Arguments]
 push ecx
 push edx
 mov ebx, 10  ; Set EBX = 10
 mov ecx, 0  ;

; division loop
_divisionloop:
 xor edx, edx  ; EDX = 0
        div ebx                 ; Perform Division Between EAX, EBX [EDX, EAX = EAX / EBX ]
                                ; EAX = Quotient And EDX = Remainder

        push eax                ; Push EAX Into Stack [Division Answer]
        mov eax, edx            ; EAX = EDX [EAX = Remainder]

        add eax, 48             ; ASCII code Difference Is 48
 mov [digitprintersave+ecx], eax  ;
        ;call _printsingle       ; Call printsingle routine
 inc ecx;
        pop eax                 ; Get EAX
        cmp eax, 0              ; Compare
        je _comparisionsection  ; To Avoid Print
 jmp _divisionloop ; Repeat


_comparisionsection:
 mov eax, digitprintersave  ;
 call __printreverse
 ; Pop Values
 pop edx
 pop ecx
        pop ebx                 ; Pop Digit [Previous Arguments]
        pop eax                 ; Pop Digit[Previous Arguments]

        ret             ; Return





Please Check Github For Latest Error Free Examples Codes. Click here

Related Post

Top Visited

how to install burp suite in Linux/Ubuntu 16.04

Create Simple Packet Sniffer Using Python

Big List Of Google Dorks For Sqli Injection

Latest Google Dorks List

how to configure burpsuite with firefox?

List of Keyboard Shortcuts Keys for GNOME Desktop (Kali linux / Linux / Ubuntu/*nix )

Python Beautiful Soup Module - Tutorial - Part 2

Create Ping Sweeping Script Using Python

How to create Phishing Page Using Kali Linux | Webpage Page Cloning Using Kali Linux Social Engineering Toolkit

What is Burp Suite And its Features?