किसी प्रोग्राम के प्रवाह को नियंत्रित करने के लिए असेंबली भाषा में सशर्त निर्देशों का उपयोग किया जाता है। असेम्बली लैंग्वेज में कंडिशनल स्टेटमेंट्स प्रोग्राम के माध्यम से कंप्यूटर को कुछ शर्तों के दिए जाने पर निर्णय लेने के लिए निर्देशित करने के लिए उपयोग किए जाते हैं। ये निर्णय तभी किए जाते हैं जब पूर्व-कथित शर्तें सही या गलत होती हैं, यह इस बात पर निर्भर करता है कि प्रोग्रामर के दिमाग में क्या है।
असेंबली लैंग्वेज में सशर्त निर्देश - cms jmp लेबल
कंडिशनल स्टेटमेंट्स का प्रयोग असेंबली लैंग्वेज में प्रोग्राम के प्रवाह को नियंत्रित करने के लिए किया जाता है। यानी अगर पहले से बताई गई शर्तें सही या गलत हैं तो कौन सा कोड आगे चलाना है। जैसे - अगर, jmp, लूप आदि।
jump कंडीशन
असेंबली लैंग्वेज में 2 तरह के जंप स्टेटमेंट होते हैं। - बिना शर्त जंप, सशर्त जंप।
- बिना शर्त जंप - इस निर्देश के पहले कोई शर्त नहीं है। जब यह निर्देश चलाया जाता है, तो प्रोग्राम इस निर्देश द्वारा निर्दिष्ट कोड ब्लॉक को पहले चलाता है, आगे के कोड को छोड़ देता है। यह JMP निर्देश द्वारा किया जाता है।
सशर्त जंप
- यह निर्देश एक शर्त से पहले है। जब यह निर्देश चलाया जाता है, तो यह स्थिति की जाँच करता है, फिर यह निर्भर करता है कि स्थिति सही है या गलत, प्रोग्राम अगला कोड या निर्देशित कोड ब्लॉक चलाता है।यह जंप निर्देशों के एक सेट द्वारा किया जाता है 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 |
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