Conditions इन असेम्ब्ली लैंग्वेज

Prahlad Godara ------ From DOOSEEP

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


असेंबली लैंग्वेज में सशर्त निर्देश - cms jmp लेबल

कंडिशनल स्टेटमेंट्स का प्रयोग असेंबली लैंग्वेज में प्रोग्राम के प्रवाह को नियंत्रित करने के लिए किया जाता है। यानी अगर पहले से बताई गई शर्तें सही या गलत हैं तो कौन सा कोड आगे चलाना है। जैसे - अगर, jmp, लूप आदि।

jump कंडीशन

असेंबली लैंग्वेज में 2 तरह के जंप स्टेटमेंट होते हैं। - बिना शर्त जंप, सशर्त जंप।

  1. बिना शर्त जंप - इस निर्देश के पहले कोई शर्त नहीं है। जब यह निर्देश चलाया जाता है, तो प्रोग्राम इस निर्देश द्वारा निर्दिष्ट कोड ब्लॉक को पहले चलाता है, आगे के कोड को छोड़ देता है। यह JMP निर्देश द्वारा किया जाता है।
  2. सशर्त जंप

    - यह निर्देश एक शर्त से पहले है। जब यह निर्देश चलाया जाता है, तो यह स्थिति की जाँच करता है, फिर यह निर्भर करता है कि स्थिति सही है या गलत, प्रोग्राम अगला कोड या निर्देशित कोड ब्लॉक चलाता है।यह जंप निर्देशों के एक सेट द्वारा किया जाता है j < condition>.

CMP अनुदेश

सीएमपी निर्देश दो ऑपरेंड या संख्यात्मक डेटा फ़ील्ड की तुलना करता है। यह आमतौर पर सशर्त निष्पादन में प्रयोग किया जाता है। यह निर्देश मूल रूप से एक ऑपरेंड की तुलना दूसरे को घटाकर यह देखने के लिए करता है कि ऑपरेंड बराबर हैं या नहीं। यह गंतव्य या स्रोत ऑपरेंड को हेरफेर नहीं करता है। निर्णय लेने के लिए सशर्त jump निर्देशों के साथ इसका उपयोग किया जाता है।

Syntax
 CMP   destination, source

For example

 INC	EDX
  CMP	EDX, 10	; Compares whether the counter has reached 10
  JLE	LP1     ; If it is less than or equal to 10, then jump to LP1

CMP का उपयोग अक्सर यह तुलना करने के लिए किया जाता है कि क्या काउंटर वैल्यू लूप को चलाने की आवश्यकता की संख्या तक पहुँच गया है।


असेंबली भाषा में लेबल क्या है?

एक लेबल एक प्रतीक है जो एक निर्देश या डेटा के स्मृति पते का प्रतिनिधित्व करता है। पते पीसी-रिलेटिव, रजिस्टर-रिलेटिव या निरपेक्ष हो सकते हैं। जब तक आप निर्यात निर्देश का उपयोग करके उन्हें वैश्विक नहीं बनाते हैं, तब तक लेबल स्रोत फ़ाइल के लिए स्थानीय होते हैं। आप इसे मार्कअप भाषा में "आईडी" की तरह सोच सकते हैं।

Unconditional jump

बिना शर्त जंप JMP कीवर्ड द्वारा किया जाता है। यह JMP निर्देश बिना किसी शर्त के एक कोड ब्लॉक से दूसरे कोड ब्लॉक में जाता है।

Syntax
 JMP	label

For example

 MOV  AX, 00    ; Initializing AX to 0
  MOV  BX, 00    ; Initializing BX to 0
  MOV  CX, 01    ; Initializing CX to 1
  L20:
  ADD  AX, 01    ; Increment AX
  ADD  BX, AX    ; Add AX to BX
  SHL  CX, 1     ; shift left CX, this in turn doubles the CX value
  JMP  L20       ; repeats the statements


Conditional jump

सशर्त निष्पादन में अक्सर निर्देश पते पर नियंत्रण का स्थानांतरण शामिल होता है। यदि सशर्त छलांग में कुछ निर्दिष्ट शर्तों को पूरा किया जाता है, तो नियंत्रण प्रवाह को लक्ष्य निर्देश में स्थानांतरित कर दिया जाता है। स्थिति और डेटा के आधार पर कई कंडीशनल जम्प निर्देश हैं।

nasm असेंबली लैंग्वेज में, हम कंडीशनल जंप निर्देशों को उपयोग के आधार पर तीन श्रेणियों में विभाजित कर सकते हैं। अंकगणित, तार्किक, विशेष उपयोग।

अंकगणित, तार्किक, विशेष - jump instruction list

अंकगणित jmp निर्देश

Instruction Description Flags tested
JE/JZ Jump Equal or Jump Zero ZF
JNE/JNZ Jump not Equal or Jump Not Zero ZF
JG/JNLE Jump Greater or Jump Not Less/Equal OF, SF, ZF
JGE/JNL Jump Greater/Equal or Jump Not Less OF, SF
JL/JNGE Jump Less or Jump Not Greater/Equal OF, SF
JLE/JNG Jump Less/Equal or Jump Not Greater OF, SF, ZF

लॉजिकल जंप निर्देश

Instruction Description Flags tested
JE/JZ Jump Equal or Jump Zero ZF
JNE/JNZ Jump not Equal or Jump Not Zero ZF
JA/JNBE Jump Above or Jump Not Below/Equal CF, ZF
JAE/JNB Jump Above/Equal or Jump Not Below CF
JB/JNAE Jump Below or Jump Not Above/Equal CF
JBE/JNA Jump Below/Equal or Jump Not Above AF, CF

विशेष उपयोग निर्देश

Instruction Description Flags tested
JXCZ Jump if CX is Zero none
JC Jump If Carry CF
JNC Jump If No Carry CF
JO Jump If Overflow OF
JNO Jump If No Overflow OF
JP/JPE Jump Parity or Jump Parity Even PF
JNP/JPO Jump No Parity or Jump Parity Odd PF
JS Jump Sign (negative value) SF
JNS Jump No Sign (positive value) SF
Syntax
j<condition>

For example

 CMP	AL, BL
  JE	EQUAL
  CMP	AL, BH
  JE	EQUAL
  CMP	AL, CL
  JE	EQUAL
  NON_EQUAL: ...
  EQUAL: ...

उदाहरण

निम्नलिखित कार्यक्रम तीन चरों में से सबसे बड़ा प्रदर्शित करता है। चर दो अंकों वाले चर हैं। तीन वेरिएबल्स num1, num2 और num3 के मान क्रमशः 37, 22 और 41 हैं -


  section	.text
  global _start         ;must be declared for using gcc

_start:	                 ;tell linker entry point
  mov   ecx, [num1]
  cmp   ecx, [num2]
  jg    check_third_num
  mov   ecx, [num2]
  
 check_third_num:

  cmp   ecx, [num3]
  jg    _exit
  mov   ecx, [num3]
  
 _exit:
  
  mov   [largest], ecx
  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,largest
  mov   edx, 2
  mov   ebx,1	;file descriptor (stdout)
  mov   eax,4	;system call number (sys_write)
  int   0x80	;call kernel
   
  mov   eax, 1
  int   80h

section	.data
  
  msg db "The largest digit is: ", 0xA,0xD 
  len equ $- msg 
  num1 dd '37'
  num2 dd '22'
  num3 dd '41'

segment .bss
  largest resb 2  

जब उपरोक्त कोड संकलित और निष्पादित किया जाता है, तो यह निम्न परिणाम उत्पन्न करता है -

 41


Read in- English
Tags- education, Assembly - Conditions in hindi, assembly language, type of Assembly Conditions , example program in assembly language, Conditions Operators, This blogcreates content similar to stackoverflow geeks for geeks tutorialspoint w3schools and dooseep
कोई टिप्पणी नहीं:
एक टिप्पणी भेजें