2012-02-23 13 views
5

हैलो मैं सिर्फ विधानसभा में कुछ बिट समाशोधन पर एक बुनियादी सवाल है। यहां मैं जो कोशिश कर रहा हूं वह यहां है।बीआईसी निर्देश

MOV R0, #OxFFFFFFFF ;Load R0 with the HEX Values FFFFFFFF 
BIC R0, R0, #0xBF ;This should set bit 7 from my understanding as B is 1011 in hex 

जब प्रदर्शन कर यह ऊपर R0 (0xFFFFFF4F) में निम्नलिखित मूल्य मुझे आश्चर्य है कि ऐसा क्यों है देता है?

यह मूल्य 0xFFFFFFBF

MOV R0, #OxFFFFFFFF ;Load R0 with the HEX Values FFFFFFFF 
BIC R0, R0, #00000000000000000000000001000000b 

किसी को भी मदद कर सकते हैं मुझे इन परिणामों को समझने डालता है मैं इस बिट स्पष्ट करते हैं?

+0

क्षमा करें यह असंबंधित है लेकिन बीआईसी सी में लिखा जा सकता है? –

उत्तर

6

मैं यह दिलचस्प है कि कोडांतरक (गैस) आप त्रुटि के बिना अधिक से अधिक 8 महत्वपूर्ण बिट के साथ mov करने के लिए कोशिश की सुविधा देता है ... यह सिर्फ एक mvn आप के लिए encodes पाते हैं।

d6008030 <TESTFUN>: 
d6008030: e3e00000 mvn r0, #0 
d6008034: e3c000bf bic r0, r0, #191 ; 0xbf 
d6008038: e12fff1e bx lr 

मुझे 0xFFFFFF40 मिलता है जो अपेक्षित उत्तर है।

आप बिट 7, तो

orr r0,r0,#0x80 ;@ (corrected from 0x70) 

सेट करना चाहते हैं या फिर किया था, तो क्या आपका मतलब है आप बिट 6

orr r0,r0,#0x40 

सेट करना चाहता था अगर आप बिट 6 को छोड़कर बिट्स के सभी बंद पट्टी करना चाहता था , केवल 6 सेट छोड़कर।

and r0,r0,#0x40 

आप सभी को छोड़ने के लिए चाहते हैं, लेकिन थोड़ा 6 सेट है (स्पष्ट बिट 6) (बीआईसी = बिट स्पष्ट)

bic r0,r0,#0x40 

या आप इस

mov r0,#0xFFFFFFFF ;@ this is an interesting shortcut 
mov r1,#0xFFFFFFBF ;@ might as well keep using it 
bic r0,r0,r1 

करने के लिए कोशिश कर रहे थे जो 0x00000040 देता है, जो

mov r0,#0xFFFFFFFF ;@ this is an interesting shortcut 
and r0,r0,#0x40 

को छोड़कर बाद कम निर्देश का उपयोग करता है और

2

पंजीकृत करता है मुझे लगता है कि आप यह बेहतर के बारे में अगर आपको लगता है देखेंगे क्या बीआईसी साधन/करता है: बीआईसी रोड, आर एन के लिए खड़ा है "रोड न कि आर एन"।

तो, अपने पिछले उदाहरण के साथ:

Rn = 00000000000000000000000001000000b = 0x40 
NOT Rn = 0xFFFFFFBF = 11111111111111111111111110111111b 
Rd = 0xFFFFFFFF = 11111111111111111111111111111111b 
Rd AND NOT Rn = 0xFFFFFFFBF = 11111111111111111111111110111111b 

तो, बीआईसी रोड, # 0x40 आप रोड की बिट संख्या 7 समाशोधन रहे हैं के साथ। वही सोच आपके पूर्व उदाहरण पर लागू होती है।

उम्मीद है कि इससे मदद मिलती है।

0

मैं Arduino कारण पर हाथ-नन-EABI-जीसीसी 4.8.2 के साथ मामलों का परीक्षण, लेकिन पहला मामला अलग है।

// the results is 0xffffff40, but not 0xffffff4f 
mov r2, #0xffffffff 
bic r2, r2, #0xbf 

दूसरा मामला वही है।

तो पहले मामले का परिणाम स्पष्ट है बस के रूप में @Fernando ऊपर बताया गया है।

operand2 = 0xbf 
NOT operand2 = 0xffffff40 
r2 = 0xffffffff 
r2 AND NOT operand2 = 0xffffff40 

बीआईसी (बिट साफ़) अनुदेश Operand2 के मूल्य में इसी बिट्स के पूरक के साथ आर एन में बिट्स पर एक और आपरेशन प्रदर्शन करती है। आप इसे here देख सकते हैं।

संबंधित मुद्दे