Assembly - अंकगणितीय निर्देश

Prahlad Godara ------ From DOOSEEP

अंकगणितीय निर्देश - असेम्बली भाषा में अंकगणितीय संक्रियाएँ या अंकगणितीय निर्देश गणितीय संक्रियाएँ जैसे जोड़, घटाव, गुणा, भाग आदि करने के लिए प्रयुक्त होते हैं।

Content

NASM असेंबली में उपयोगी अंकगणितीय निर्देश.


NASM - INC DEC ADD and SUB MUL/IMUL DIV/IDIV

अंकगणितीय निर्देश - INC DEC ADD और SUB MUL/IMUL DIV/IDIV NASM असेंबली भाषा में, ये (INC, DEC, ADD, SUB, MUL/IMUL, DIV/IDIV) निर्देश उसी तरह से उपयोग किए जाते हैं जैसे अंकगणितीय ऑपरेटर (+ +, --, +, -, ×, ÷).

INC निर्देश

INC निर्देश का उपयोग एक ऑपरेंड (++) को बढ़ाने के लिए किया जाता है। यह एक ही ऑपरेंड पर काम करता है जो या तो रजिस्टर में या मेमोरी में हो सकता है।

Syntax - INC destination

  INC EBX	     ; Increments 32-bit register
  INC DL       ; Increments 8-bit register
  INC [count]  ; Increments the count variable

ऑपरेंड गंतव्य 8-बिट, 16-बिट या 32-बिट ऑपरेंड हो सकता है।


DEC अनुदेश

DEC निर्देश - DEC निर्देश का उपयोग किसी ऑपरेंड को एक (--) से कम करने के लिए किया जाता है। यह एक ही ऑपरेंड पर काम करता है जो या तो रजिस्टर में या मेमोरी में हो सकता है।

Syntax - DEC destination

DEC EBX	     ; Increments 32-bit register
DEC DL       ; Increments 8-bit register
DEC  [count]  ; Increments the count variable

संकार्य गंतव्य 8-बिट, 16-बिट या 32-बिट संकार्य हो सकता है।


ADD and SUB अनुदेश

ADD और SUB निर्देशों का उपयोग बाइट, शब्द और दोहरे शब्दों के आकार में बाइनरी डेटा के सरल जोड़ / घटाव को करने के लिए किया जाता है।


ADD निर्देश - ADD निर्देश का उपयोग बाइट, शब्द और डबलवर्ड आदि जोड़ने के लिए किया जाता है। Syntax - ADD destination, source

  add eax, ebx 
  add eax, '0'

SUB निर्देश - SUB Instruction का प्रयोग Bytes, Numbers आदि को घटाने के लिए किया जाता है। Syntax - SUB destination, source

  sub     ebx, '0'
  sub     eax, '7 '
  sub  eax, ebx 

ADD/SUB निर्देश - पर लागू हो सकते हैं

  • Register to register
  • Memory to register
  • Register to memory
  • Register to constant data
  • Memory to constant data

अन्य निर्देशों की तरह, ADD/SUB निर्देशों का उपयोग करके मेमोरी-टू-मेमोरी संचालन संभव नहीं है। एक ADD या SUB ऑपरेशन ओवरफ्लो और कैरी फ्लैग को सेट या क्लियर करता है।


The MUL/IMUL निर्देश

बाइनरी डेटा को गुणा करने के लिए दो निर्देश हैं। MUL (मल्टीप्ली) निर्देश अहस्ताक्षरित डेटा को हैंडल करता है और IMUL (इंटीजर मल्टीप्ली) साइन किए गए डेटा को हैंडल करता है। दोनों निर्देश कैरी और ओवरफ्लो फ्लैग को प्रभावित करते हैं।.


Syntax - MUL/IMUL multiplier

दोनों ही मामलों में गुणक एक संचायक में होगा, गुणक और गुणक के आकार के आधार पर और उत्पन्न उत्पाद को संकार्य के आकार के आधार पर दो रजिस्टरों में संग्रहीत किया जाता है।


निम्नलिखित खंड तीन अलग-अलग मामलों के साथ एमयूएल निर्देशों को समझाता है −

  1. दो बाइट गुणा करते समय - गुणक AL रजिस्टर में है, और गुणक मेमोरी या किसी अन्य रजिस्टर में एक बाइट है। उत्पाद AX में है। उत्पाद के उच्च क्रम के 8 बिट्स AH में संग्रहीत होते हैं और निम्न क्रम के 8 बिट्स AL में संग्रहीत होते हैं।

    AL × 8 bit source = AH AL

  2. जब दो एक शब्द के मानों का गुणा करते समय - जब दो एक-शब्द मानों को गुणा किया जाता है - परिणाम AX और DX में संग्रहीत होता है।

    AX × 16 bit source = DX AX

  3. जब दो डबलवर्ड मानों को गुणा करते समय - जब दो डबलवर्ड मानों को गुणा किया जाता है, तो गुणक EAX में होना चाहिए। उत्पाद EDX में संग्रहीत है: EX रजिस्टर, यानी, उच्च-क्रम 32-बिट्स EDX रजिस्टर में संग्रहीत हैं और निम्न-ऑर्डर 32-बिट्स EAX रजिस्टर में संग्रहीत हैं।

    EAX × 32 bit source = EDX EAX

उदाहरण


  MOV AL, 10
MOV DL, 25
MUL DL
...
MOV DL, 0FFH	; DL= -1
MOV AL, 0BEH	; AL = -66
IMUL DL 

DIV/IDIV निर्देश

DIV (डिवाइड) निर्देश का उपयोग अहस्ताक्षरित डेटा के लिए किया जाता है और IDIV (इंटीजर डिवाइड) का उपयोग हस्ताक्षरित डेटा के लिए किया जाता है।

विभाजन संक्रिया से दो तत्व उत्पन्न होते हैं - एक भागफल और एक शेषफल। गुणन के मामले में, अतिप्रवाह नहीं होता है क्योंकि उत्पाद को धारण करने के लिए डबल-लम्बाई रजिस्टरों का उपयोग किया जाता है। हालांकि, विभाजन के मामले में अतिप्रवाह हो सकता है। यदि अतिप्रवाह होता है, तो प्रोसेसर बाधा उत्पन्न करता है।


Syntax - DIV/IDIV divisor

लाभांश संचयकर्ता में है। दोनों निर्देश 8-बिट, 16-बिट या 32-बिट ऑपरेंड के साथ काम कर सकते हैं। ऑपरेशन सभी छह स्थिति फ़्लैग को प्रभावित करता है।

निम्नलिखित खंड विभिन्न ऑपरेंड आकारों के साथ विभाजन के तीन मामलों की व्याख्या करता है −

  1. जब भाजक 1 बाइट हो -लाभांश को AX रजिस्टर (16 बिट्स) में माना जाता है। विभाजन के बाद भागफल AL रजिस्टर में जाता है और शेष AH रजिस्टर में जाता है।

    16 bit divident
    AX

    8 bit divisor

        =
    Quoitient
    AL

    And
    Remainde
    AH

  2. जब भाजक 1 शब्द हो - लाभांश को 32 बिट लंबा और DX:AX रजिस्टरों में माना जाता है। उच्च-क्रम के 16 बिट DX में हैं और निम्न-क्रम के 16 बिट AX में हैं। विभाजन के बाद, 16-बिट भागफल AX रजिस्टर में जाता है और 16-बिट शेष भाग DX रजिस्टर में जाता है।

    32 bit divident
    DXAX

    16 bit divisor

        =
    Quoitient
    AX

    And
    Remainde
    DX

  3. जब भाजक दोहरा शब्द हो - लाभांश को 64 बिट लंबा और EDX: EAX रजिस्टरों में माना जाता है। ईडीएक्स में उच्च क्रम के 32 बिट और ईएक्स में निम्न क्रम के 32 बिट हैं। विभाजन के बाद, 32-बिट अंश EAX रजिस्टर में जाता है और 32-बिट शेष EDX रजिस्टर में जाता है।

    64 bit divident
    EDXEAX

    16 bit divisor

        =
    Quoitient
    EAX

    And
    Remainde
    EDX

Exampal

निम्नलिखित उदाहरण में आप विधानसभा अंकगणितीय संचालन और निर्देश देख सकते हैं।


    section	.text
    global _start    ;must be declared for using gcc
   
 _start:             ;tell linker entry point
    mov	ax,'8'
    sub     ax, '0'
   
    mov 	bl, '2'
    sub     bl, '0'
    div 	bl
    add	ax, '0'
   
    mov 	[res], ax
    mov	ecx,msg	
    mov	edx, len
    mov	ebx,1	;file descriptor (stdout)
    mov	eax,4	;system call number (sys_write)
    int	0x80	;call kernel
   
    mov	ecx,res
    mov	edx, 1
    mov	ebx,1	;file descriptor (stdout)
    mov	eax,4	;system call number (sys_write)
    int	0x80	;call kernel
   
    mov	eax,1	;system call number (sys_exit)
    int	0x80	;call kernel
   
 section .data
 msg db "The result is:", 0xA,0xD 
 len equ $- msg   
 segment .bss
 res resb 1

When the above code is compiled and executed, it produces the following result −

 The result is: 4


Read in- English
Tags- education, Assembly - Arithmetic Instructions , assembly language, type of Assembly Arithmetic Instructions , example program in assembly language in hindi
कोई टिप्पणी नहीं:
एक टिप्पणी भेजें