लॉजिकल ऑपरेटर बूलियन एक्सप्रेशन का मूल्यांकन करते हैं और यह निर्धारित करते हैं कि उपयोग किए गए ऑपरेटर के आधार पर संपूर्ण एक्सप्रेशन सही है या गलत। असेंबली लैंग्वेज में कंडीशन इंस्ट्रक्शंस के साथ लॉजिकल इंस्ट्रक्शंस का भी इस्तेमाल किया जाता है।
असेंबली में लॉजिकल ऑपरेटर - AND, OR, XOR, TEST and NOT
Operators - AND, OR, XOR, TEST and NOT
NASM असेंबली लैंग्वेज प्रोसेसर इंस्ट्रक्शन सेट AND, OR, XOR, टेस्ट और नॉट बूलियन लॉजिक प्रदान करता है, जो प्रोग्राम द्वारा आवश्यक बिट्स का परीक्षण, सेट और क्लियर करता है।
निर्देशों का प्रारूप −
Sr.No. | Instruction | Format |
---|---|---|
1 | AND | AND operand1, operand2 |
2 | OR | OR operand1, operand2 |
3 | XOR | XOR operand1, operand2 |
4 | TEST | TEST operand1, operand2 |
5 | NOT | NOT operand1 |
सभी मामलों में पहला ऑपरेंड या तो एक रजिस्टर या मेमोरी में हो सकता है। दूसरा ऑपरेंड या तो रजिस्टर/मेमोरी या तत्काल (स्थिर) मान में हो सकता है। हालाँकि, मेमोरी-टू-मेमोरी ऑपरेशन संभव नहीं हैं। ये निर्देश ऑपरेंड के बिट्स की तुलना या मिलान करते हैं और CF, OF, PF, SF और ZF फ्लैग सेट करते हैं।
Operand1: Operand1: register or memory
Operand2: Operand2: register/memory or immediate (constant)
--------------------------------------
After AND -> Operand: register/memory
AND अनुदेश
AND निर्देश बिटवाइज़ AND ऑपरेशन करके तार्किक अभिव्यक्तियों का समर्थन करने के लिए उपयोग किया जाता है। यदि दोनों ऑपरेंड के मैचिंग बिट 1 हैं, तो बिटवाइज़ AND ऑपरेशन 1 देता है, अन्यथा यह 0 देता है।
Syntax AND Register or memory, register/memory or immediate (constant)
For example
AND AL, 01H
THE OR अनुदेश
OR निर्देश बिटवाइज़ OR ऑपरेशन करके तार्किक अभिव्यक्ति का समर्थन करने के लिए उपयोग किया जाता है। यदि एक या दोनों ऑपरेंड के मिलान बिट 1 हैं। तो बिटवाइज़ OR ऑपरेटर 1 लौटाता है, यदि दोनों बिट शून्य हैं, तो यह 0 देता है।
OR ऑपरेशन का उपयोग एक या अधिक बिट सेट करने के लिए भी किया जा सकता है।
Syntax OR Register or memory, register/memory or immediate (constant)
For example
OR AL, BL
XOR इंस्ट्रक्शन
XOR इंस्ट्रक्शन बिटवाइज़ XOR ऑपरेशन को लागू करता है। यदि दोनों ऑपरेंड के बिट अलग-अलग हैं। एक्सओआर ऑपरेशन परिणामी बिट को 1 पर सेट करता है, यदि ऑपरेंड के बिट समान हैं (दोनों 0 या दोनों 1), परिणामी बिट 0 पर सेट है।
किसी ऑपरेंड को अपने साथ XOR करने से ऑपरेंड 0 में बदल जाता है। इसका उपयोग रजिस्टर को खाली करने के लिए किया जाता है।
Syntax XOR Register or memory, register/memory or immediate (constant)
For example
XOR EAX, EAX
TEST अनुदेश
TEST निर्देश AND ऑपरेशन की तरह ही काम करता है, लेकिन AND निर्देश के विपरीत, यह पहले ऑपरेंड को नहीं बदलता है।
Syntax TEST Register or memory, register/memory or immediate (constant)
For example
TEST AL, 01H
NOT इंस्ट्रक्शन
नॉट इंस्ट्रक्शन बिटवाइज़ नॉट ऑपरेशन को लागू करता है। NOT ऑपरेशन एक ऑपरेंड में बिट्स को उलट देता है। ऑपरेंड या तो रजिस्टर में या मेमोरी में हो सकता है। यदि परिणाम 1 है तो 0 लौटाता है। 0 होने पर 1 लौटाता है।
Syntax NOT Register or memory
NOTE - एक से अधिक स्थितियों की तुलना करने के लिए लॉजिकल इंस्ट्रक्शंस/ऑपरेटर्स का उपयोग किया जाता है। अन्य भाषाओं में सत्य और असत्य की तरह, असेंबली में 1 और 0 का प्रयोग किया जाता है।
Exampal
एक उदाहरण लेते हैं। कि दी गई संख्या विषम है या सम।
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov ax, 8h ;getting 8 in the ax
and ax, 1 ;and ax with 1
jz evnn
mov eax, 4 ;system call number (sys_write)
mov ebx, 1 ;file descriptor (stdout)
mov ecx, odd_msg ;message to write
mov edx, len2 ;length of message
int 0x80 ;call kernel
jmp outprog
evnn:
mov ah, 09h
mov eax, 4 ;system call number (sys_write)
mov ebx, 1 ;file descriptor (stdout)
mov ecx, even_msg ;message to write
mov edx, len1 ;length of message
int 0x80 ;call kernel
outprog:
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
even_msg db 'Even Number!' ;message showing even number
len1 equ $ - even_msg
odd_msg db 'Odd Number!' ;message showing odd number
len2 equ $ - odd_msg
जब उपरोक्त कोड संकलित और निष्पादित किया जाता है, तो यह निम्न परिणाम उत्पन्न करता है −
Even Number!