क्या कभी ऐसी स्थिति होती है जब एएसएम पर्याप्त स्तर नहीं है? आखिरकार, असेंबलर को अभी भी इकट्ठा होना है। क्या किसी ने कभी बाइनरी में एक कार्यक्रम लिखा है? मैं बस सोच रहा हूं कि क्या सैद्धांतिक कारण है कि ऐसा क्यों करना व्यावहारिक हो सकता है या भले ही यह आधुनिक कंप्यूटर पर संभव हो।क्या शुद्ध बाइनरी में कोड लिखने का कोई कारण होगा?
उत्तर
ऐतिहासिक कारण: आप एक मशीन चला रहे हैं जिसके लिए इसके बूट कोड को फ्रंट पैनल पर टॉगल किया जाना आवश्यक है। (और हाँ, इस मशीन की पीढ़ी की पहली जोड़ी में किया गया था नियमित रूप से।।)
नहीं-क्या-यू-गया दिखने के लिए आधुनिक कारण: आप एक कोडांतरक आप यह पता लगाने की है लिख रहे हैं जब प्रक्रिया।
कई अन्य स्थितियां हैं, और एक असेंबलर लिखना वास्तव में बाइनरी में किसी भी कार्य/कार्यक्रम को लिखना नहीं चाहिए/नहीं। – Potatoswatter
@ पोटाटोस्वाटर: आप मशीन कोड में इकट्ठा नहीं करते हैं जबतक कि आप पहले इकट्ठा नहीं कर रहे हों। लेकिन * आपको * हाथ (या सिर) को पर्याप्त कोड का अनुवाद करना चाहिए ताकि यह पता चल सके कि इकट्ठा करने के लिए क्या करना है। मैं जवाब से खड़ा हूँ। – dmckee
यह व्यक्तिगत कंप्यूटर के बहुत ही शुरुआती दिनों में किया गया था। मैंने एक आईएमएसएआई कंप्यूटर की एक समीक्षा देखी जिसने इसकी फ्रंट पैनल पर पैडल स्विच करने के लिए प्रशंसा की, अल्टेयर 8800 के स्विच से काफी अच्छा। (आईआईआरसी, यह भी समीक्षा थी जिसने असेंबली की आसानी के लिए किट की प्रशंसा की, क्योंकि समीक्षक को केवल एक बार अपने ऑसिलोस्कोप को बाहर ले जाना पड़ा।) हालांकि, कुछ समय पहले यह था। –
यह डंप को समझने के लिए बाइनरी से असेंबलर जाने के लिए बहुत असामान्य नहीं था।
लेकिन असेंबलर का उपयोग नहीं करते? मैं किसी भी कारण से नहीं सोच सकता। असेंबलर पहले से ही नंगे धातु प्रोग्रामिंग कर रहा है। वास्तविक लाभ (बाइनरी) निर्देश के लिए "एड" जैसे लेबलों के उपयोग को सक्षम करना केवल यही लाभ है। आदि
आपको यह मिला - यदि कोई [डी] असेंबलर उपलब्ध नहीं है। मैं फर्मवेयर हैकिंग परिस्थितियों में रहा हूं जहां मैंने कच्चे पावरपीसी निर्देश धाराओं को देखने में पर्याप्त समय बिताया है ताकि वे कुछ प्रकार के निर्देशों को पहचान सकें और इकट्ठा कर सकें। (मैंने एक डिस्सेबलर को बंद कर दिया: http://homepage.mac.com/potswa/source/DisDave.sit, यदि आप इसे इंस्टॉल करने के लिए प्रबंधित कर सकते हैं।)
कुछ आईएसए दूसरों की तुलना में बहुत सरल हैं। आरआईएससी सरल प्रारूपों का पालन करते हैं और खुद को उन्मुख करना आसान है क्योंकि निर्देश आम तौर पर समान लंबाई होते हैं और शब्द सीमाओं के साथ गठबंधन होते हैं। दूसरी ओर, x86-64, परिवर्तनीय-लंबाई एन्कोडिंग और उपसर्ग कोड से भरा है।
एफपीजीए परियोजनाओं या जब कस्टम सर्किटरी शामिल है, तो बाइनरी में किसी प्रकार की निर्देश धारा और हाथ-एन्कोड तैयार करना बहुत आम है।
एक पोस्ट अपोकैल्पिक दुनिया में जहां सभी कीबोर्ड और मॉनीटर नष्ट हो गए हैं और आपके कंप्यूटर में टेट्रिस प्रोग्राम करने का एकमात्र तरीका आपके फ्रंट-पैनल पर टॉगल के माध्यम से है, हां।
लेकिन गंभीरता से कोई ऐसा क्यों करना चाहेगा?
संपादित करें: जाहिर है वहां ऐसे लोग हैं जो प्रोसेसर डिजाइन करते हैं जिन्हें बाइनरी में प्रोग्राम करना होता है, जब तक कि वे अपने प्रोसेसर पर एक असेंबलर नहीं चलाते, लेकिन वे लोगों का एक बहुत छोटा समूह हैं।
सबसे पहले आपको पैनल पर टॉगल स्विच के साथ एक कंप्यूटर खोजने की आवश्यकता होगी। मुझे एक मिलियन डॉलर सीडीसी साइबर मेनफ्रेम याद है। यह टॉगल था, लेकिन आपको पहले सही कैबिनेट मिलना था और फिर दरवाजा खोलना था। वहां वे थे: 60 बिट शब्दों के लिए 60 टॉगल। आह यादें –
मेरा पहला भुगतान प्रोग्रामिंग जॉब बर्रॉस 1800 पर था, जिसने रोशनी को टॉगल और ब्लिंक किया था। जब हमने बर्रॉस 5900 में अपग्रेड किया, तो हमने टॉगल और ब्लिंकिंग रोशनी खो दी और हमें नहीं पता था कि कंप्यूटर क्या कर रहा था। हाँ ... यादें। –
यादें, चमकते रोशनी के साथ अकेले अकेले, पुराने दिनों में वापस रास्ते में, वहां और अधिक टॉगल थे। मुझे याद है, टाइम पंच कार्ड लक्जरी सामान थे, और डिबगिंग ने आपको पागल बना दिया। (ठीक है, मैं व्यक्तिगत रूप से नहीं करता।) – Potatoswatter
जब आप हाथ से द्विआधारी प्रारूपों को हैक कर रहे हैं, A Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux करता है।
ठीक है, यदि आप चिप डेवलपर थे, तो आप एक असेंबलर का उपयोग करने के बजाय रैम या रोम में कुछ बुनियादी बूटलोड निर्देशों को प्रोग्राम करने के लिए हेक्स का उपयोग कर सकते हैं। मैंने लिखा एक सॉफ्टकोर के लिए मैंने ऐसा किया है।
वास्तव में, ऐसा करने के बाद, अगला चरण पर्ल या कुछ में मूल असेंबलर लिखना है।
गतिशील कोड पीढ़ी:
आप हल करने के लिए एक बहुत ही सरल समस्या है, और प्रदर्शन के लिए महत्वपूर्ण है यह अक्सर एक अच्छा विचार समस्या को अंतरिक्ष का विश्लेषण और समस्या को हल करने मक्खी पर एक विशेष समारोह बढ़ाना है तो ।
एक व्यावहारिक उदाहरण: स्पैर मैट्रिस के साथ उच्च प्रदर्शन गणित।
इसमें अक्सर संख्याओं के हजारों से गुणा करने के लिए लाखों बार गुणा करना शामिल होता है। चूंकि बहुत से मैट्रिक्स तत्व शून्य हो सकते हैं या एक यदि आप सभी छोटी गुणाओं को हटाते हैं तो आप एक महत्वपूर्ण मात्रा बचा सकते हैं।
ऐसा करने के लिए थोड़ा कोड जनरेटर matrices का विश्लेषण कर सकता है और फ्लाई पर मैट्रिक्स अंकगणितीय के लिए मशीन कोड उत्पन्न कर सकता है। यह कैसे एक जेआईटी लाइब्रेरी (या अंतर्निहित भाषा सुविधा) का उपयोग करके बहुत सरल योजनाओं तक हो सकता है।
स्पैर मैट्रिक्स गुणात्मकता के मामले के लिए आप अलग-अलग मामलों के लिए केवल पूर्व-निर्मित कोड स्निपेट को ग्लूइंग करके शानदार प्रदर्शन प्राप्त कर सकते हैं। यह सी-कोड की 50 लाइनों में किया जा सकता है।
- अप्रलेखित opcodes का लाभ लेने (कई आधुनिक दिन प्रोसेसर पर अभी भी वहाँ!) 6502 आधारित प्रोसेसर पर भी बहुत पहले यह करने के लिए नहीं था।
- जब एक माइक्रोक्रोनरोलर के साथ घर से निर्मित सर्किट में एक प्रोग्राम चमकती है। माइक्रोकंट्रोलर इन दिनों सभी प्रकार की चीजों के लिए उपयोगी हैं।
1 99 7 में मैं टीआई -83 कैलकुलेटर पर ऐसा करता था जब मैं स्कूल में था और लिंक केबल तक पहुंच नहीं थी।
आम तौर पर उस समय, आप केवल एक असेंबली प्रोग्राम लिखेंगे, इसे बनाने के लिए टीएएसएम का उपयोग करेंगे, और उसके बाद इसे एक लिंक केबल के माध्यम से कैलकुलेटर में स्थानांतरित करें। लेकिन अगर मैं ऊब गया था और कुछ छोटे से रखना चाहता था, तो मैंने कुछ बाइट निर्देशों को याद किया था ताकि वे कुछ चीजों के लिए उन्हें टाइप कर सकें।
साइड नोट बेशक यह मजेदार था अगर कार्यक्रम में कोई बग था, क्योंकि यह आसानी से पूरे कैलक्यूलेटर की रैम को दूषित कर सकता था। तो फिर आपको ओएनए बटन को दबाए रखना होगा और/या एएए बैटरी को हटा देना होगा और उम्मीद है कि कैल्क को बहाल करने के लिए पर्याप्त था (स्मृति में किसी भी प्रोग्राम को स्कैन करता है)। अन्यथा हार्ड रीसेट करने के लिए, आपको एक विशेष बैकअप बैटरी को रद्द करने के लिए एक स्क्रूड्राइवर का उपयोग करना होगा। अच्छा समय ...
इसका संक्षिप्त संस्करण (और वास्तव में सभी वास्तविक उत्तरों): जब आपके लिए यह करने के लिए कोई उपकरण उपलब्ध नहीं है। – dmckee
मुझे याद है कि वोज़ ने मशीन भाषा में पहला ऐप्पल बेसिक (ऐप्पल I? Apple II?) लिखा था। स्टोरेज डिवाइस होने से पहले, आपको मॉनीटर में हेक्स कोड दर्ज करना होगा।
भले ही आप स्वयं को असेंबलर छोड़कर सीधे मशीन कोड पर जाएं, आप बाइनरी का उपयोग नहीं करेंगे, बल्कि हेक्स का उपयोग नहीं करेंगे।
स्कूल में, मुझे एक असेंबलर के लाभ के बिना डीबगर का उपयोग करके कोड इन-मेमोरी पैच करना पड़ा। मनोरंजन करते समय, यह एक कौशल है जिसमें एम्बेडेड सिस्टम डीबगिंग के बाहर लगभग कोई मूल्य नहीं है।
इसके अलावा, इस बात पर विचार करें कि असेंबली में इस्तेमाल किए गए ऑपोडोड निमोनिक्स में वास्तविक ओपोड्स (इस प्रकार शब्द "निमोनिक") के साथ 1: 1 पत्राचार होना चाहिए, इसलिए आप हाथ से मशीन कोड को पाउंड करके कुछ भी करने में सक्षम नहीं होंगे आप असेंबली में नहीं कर सके। असेंबलर की भूमिका निमोनिक्स को ऑपकोड में परिवर्तित करना है (यह भी निर्धारित करना कि एक विशिष्ट निर्देश का कौन सा संस्करण उपयोग किया जाना चाहिए - उदाहरण के लिए तत्काल बनाम अप्रत्यक्ष एमओवी), पते के लिए लेबल, और इसी तरह के कार्य।
यह जानना अच्छा है कि असेंबलर के अंदर क्या हो रहा है, लेकिन यह तब तक नहीं आ जाएगा जब तक कि आप एक असेंबलर में एक बग की तलाश नहीं कर रहे हों, एक एम्बेडेड गैजेट हैकिंग कर रहे हों या वास्तव में अजीब तरीके से मैकजीवरिंग कर रहे हों परिस्थिति।
कोई फर्क नहीं पड़ता। हेक्स (या ऑक्टल जो मुझे कई पुराने टाइमर पसंद करते हैं (अलग शब्द की लंबाई, 'या केन?)) बस बाइनरी शॉर्टेंड है। – dmckee
और सूर्य गर्म है और पानी गीला है। हालांकि, क्या आप "01011010" या "5 ए" टाइप करेंगे? इसके अलावा, मुझे अभी भी डीबगर नहीं देखना है जो आपको बाइनरी में प्रवेश करने देगा; मैंने जो भी देखा है वह हेक्स या (यूघ) ऑक्टल एंट्री की आवश्यकता है। –
यदि आप एक दुभाषिया बना रहे हैं। शायद आपके पास दुभाषिया पूरा हो गया है, लेकिन पार्सर नहीं। आप शुद्ध बाइनरी में टू-टू-इन-प्रोग्राम प्रोग्राम लिखकर दुभाषिया का परीक्षण कर सकते हैं।
मेरे पास आठ आठ अटारी में कोई असेंबलर नहीं था, इसलिए मैंने सीधे मशीन कोड लिखा था। बेसिक से कोड शुरू करने के लिए आप या तो दशमलव डेटा बाइट्स या स्ट्रिंग के रूप में कोड लिखते हैं। (हां, आप वास्तव में एक स्ट्रिंग में कोड लिख सकते हैं, 256 से एकमात्र वर्ण कोड जिसे आप टाइप नहीं कर सके 155 था - वापसी के लिए कोड। सौभाग्य से उस मूल्य के साथ 6502 मशीन कोड निर्देश नहीं है, इसलिए यह केवल एक समस्या है जब एक शाखा 101 बाइट्स पीछे की ओर (-101 = 155))
मैं अभी भी कोड की एक आम टुकड़ा याद एक टाइमर शुरू करने के लिए हुआ:।
104 (pla)
169, 7 (lda #7)
162, 6 (ldx #6)
160, 10 (ldy #10)
76, 92, 228 (jmp 0xE45C)
हाल के वर्षों में मैं कुछ में भाग लिया है आकार अनुकूलन असेंबली प्रतियोगिताओं। घटनाक्रम अधिकांश कोड असेंबली है, आपको अभी भी पता होना चाहिए कि असेंबलर कौन से निर्देश उत्पन्न करता है ताकि आप जान सकें कि वे कितने बाइट हैं। साथ ही, कभी-कभी आप कुछ बाइट्स जैसे ट्रिक्स का उपयोग डेटा और कोड दोनों के रूप में करते हैं, या कुछ बाइट्स को अलग-अलग निर्देशों के आधार पर इस्तेमाल करते हैं, चाहे आप पहले बाइट दर्ज करते हैं या निर्देश के बीच में प्रवेश करते हैं। फिर आप असेंबली कोड के बीच में डेटा बाइट्स के रूप में निर्देश लिखते हैं।
जब मैं अपने नौसेना के दिनों में प्रशिक्षण में था, (कुछ समय 1 9 86 के आसपास) हमारे पास एक कंप्यूटर है जिसे हमें इलेक्ट्रॉनिक्स समस्या निवारण सीखने के लिए दिया गया था, प्रोग्रामिंग समस्या निवारण नहीं, जिसे कंप्यूटर के सामने बाइनरी जानकारी दर्ज करके प्रोग्राम किया गया था , और हमें प्रशिक्षक को यह बताना था कि उन्होंने परिणाम के आधार पर मशीन में क्या टूटा और साथ ही हार्डवेयर की समस्या निवारण भी किया। जहां तक मुझे पता है कि अभी भी उन मशीनों में से एक हो सकता है।
मेरी इच्छा है कि मैं इसके लिए अपना स्रोत कोड पा सकूं, मैंने वास्तव में मशीन के सिम्युलेटर और मशीन के लिए भाषा के लिए एक संकलन लिखा था। यह आश्चर्यजनक था कि आप 1024 बाइट्स मेमोरी के साथ कितना काम कर सकते थे! :)
नई टीम के सदस्य के लिए अद्भुत अनुष्ठान।
कच्चे मशीन कोड के साथ काम करने से आपको कुछ बार लाभ होता है, न केवल असेंबली भाषा। उदाहरण के लिए, ईमेल के माध्यम से एक बाइनरी फ़ाइल भेजने पर विचार करें, लेकिन एक ईमेल प्रोग्राम के साथ जो संलग्नक को डीकोड करने के बारे में नहीं जानता था। एक समय में, कुछ लोगों ने छोटे कार्यक्रम लिखे जो शेष अनुलग्नक को डीकोड कर सकते थे, लेकिन कार्यक्रम में सब कुछ एक प्रिंट करने योग्य चरित्र था। इसलिए, आप अपने अनुलग्नक को डीकोड करते हैं, आप ईमेल के शरीर को whatever.com
के रूप में सहेज लेंगे, और उसके बाद इसे निष्पादित करेंगे। यह अनुलग्नक को डीकोड करेगा और एक बाइनरी फ़ाइल लिख देगा जिसे आप निष्पादित कर सकते हैं।
एक और उदाहरण के लिए, साल पहले फिडोनेट पर एक साधारण चुनौती थी: एक ऐसा प्रोग्राम लिखें जो प्रत्येक बार दौड़ने पर एक संख्या को प्रिंट करता है - लेकिन (जिस हिस्से ने इसे मुश्किल बना दिया) इसे उपयोग करने की अनुमति नहीं है नौकरी करने के लिए कोई बाहरी फाइल या अन्य भंडारण। इसे बहुत उबाऊ होने से रोकने के लिए, यह एक कोड-गोल्फ प्रकार की चीज भी थी, हालांकि मापा आकार निष्पादन योग्य बाइट था, स्रोत कोड नहीं। इस चुनौती के लिए बहुत सी प्रविष्टियों में स्वयं-संशोधित कोड का उपयोग किया गया था जो कि वास्तव में निर्देशों को कैसे एन्कोड किया गया था और इस तरह से निर्भर था।
.model tiny,c
.286
.code
.startup
main proc
mov si,offset count
inc byte ptr [si]
mov al, [si]
mov bx,4090h
shr al, 4
call convert
lodsb
and al,0fh
mov byte ptr end_convert, 08bh
convert:
add al,bl
daa
adc al,bh
daa
int 29h
end_convert:
ret
db 0d6h
; mov dx, si
mov ah,3ch
xor cx, cx
int 21h
xchg bx, ax
mov dx,offset main
mov cx,offset the_end - offset main
int 21h
ret
main endp
count:
db 0
name:
db 'c.com', 0
the_end:
end
अच्छा रहेगा कि अब छोड़ दिया था, इससे पहले कि मैं किसी को भी करने के लिए जिम्मेदार हूँ मिरगी से ग्रस्त फिट है (उम्मीद कर रहा:
एक पल के लिए देख रहे हैं, मैं मैं अभी भी अपने प्रयास से एक के लिए स्रोत कोड है देखने मुझे बहुत देर नहीं हुई है ...)
यह मशहूर उदाहरण है कि यह प्रसिद्ध पॉलीग्लोट है, जो वैध डॉस है।अन्य चीजों के साथ COM फ़ाइल क्योंकि ASCII अपने स्रोत कोड में द्विआधारी x86 निर्देशों के रूप में दोगुनी है! http://ideology.com.au/polyglot/polyglot.txt
अधिक उबाऊ उदाहरण ...
कई प्रोसेसर अधिक आदिम सूक्ष्म निर्देश के दृश्यों के रूप में ईसा निर्देश (मूल रूप से datapath नियंत्रण संकेत के संग्रह), जो "microcoded" एक माइक्रोकोड रोम में हैं लागू।
एक साधारण पर्याप्त प्रोसेसर के लिए, आप इसे माइक्रोकॉजिक भाषा से जोड़कर बाइनरी में सीधे माइक्रोकोड लिख सकते हैं। या यदि आप एक प्रोसेसर रिवर्स इंजीनियरिंग कर रहे हैं, तो हो सकता है कि आप इसके माइक्रो-निर्देश सेट को नहीं जानते और केवल माइक्रो-निर्देशों के प्रारूप पर अनुमान लगाना होगा ... इस मामले में आप शायद बाइनरी में भी काम कर रहे हैं। असेंबली भाषा की तुलना में यह निम्न स्तर है।
कभी-कभी पुराने प्रोसेसर के लिए कोड 6502 जैसे गैर-दस्तावेज निर्देशों का उपयोग किया गया था, जिनके पास आधिकारिक निमोनिक्स नहीं था, इसलिए आपको असेंबली निर्देशों के बजाय बाइनरी मान लिखना पड़ा।
एक कॉलेज प्रोजेक्ट के लिए मुझे वीएचडीएल (एक हार्डवेयर विवरण भाषा) में एक सरलीकृत माइक्रोकंट्रोलर डिजाइन करना पड़ा। इसका परीक्षण करने के लिए, मैंने बाइनरी में एक बेहद सरल कार्यक्रम लिखा, क्योंकि यह सिम्युलेटेड माइक्रोकंट्रोलर में प्रोग्राम को खिलाने का सबसे सुविधाजनक तरीका था।
- 1. क्या इस कोड को लिखने का कोई शानदार तरीका है?
- 2. सर्वर द्वारा PHP चर को फिर से लिखने का क्या कारण होगा?
- 3. क्या इसे F # में लिखने का कोई तरीका है?
- 4. क्या पीडी-विस्तारित के बजाय वेनिला शुद्ध डेटा का उपयोग करने का कोई कारण है?
- 5. क्रोम ऑटोफिल काम करना बंद करने का कारण क्या होगा?
- 6. आईसीएमपीएसएंडईको विफल होने का कारण क्या होगा जब ping.exe
- 7. शुद्ध वर्चुअल फ़ंक्शंस और बाइनरी संगतता
- 8. django बाइनरी (कोई स्रोत कोड) परिनियोजन
- 9. क्या मिश्रित कोड प्रोजेक्ट में groovyc पर javac का उपयोग करने का कोई कारण है?
- 10. क्या विंडोज कंसोल में हिब्रू लिखने का कोई तरीका है?
- 11. सी ++ में शुद्ध आभासी फ़ंक्शन कॉल का कारण क्या हो सकता है?
- 12. FileSystemObject लिखने के साथ बाइनरी डेटा लिखें()
- 13. क्या असुरक्षितफॉर्मियो का उपयोग करने का कोई अच्छा कारण है?
- 14. क्या मुर्मूरशैश का शुद्ध पायथन कार्यान्वयन है?
- 15. शुद्ध कोड में आईओआरएफ से बचें
- 16. क्या कोड लिखने के लिए कोड लिखना संभव है?
- 17. NSInvalidArgumentException, कारण: 'JSON लिखने में अमान्य प्रकार (__NSDate)'
- 18. पुन: प्रयोज्य कोड लिखने का सर्वोत्तम अभ्यास
- 19. क्या स्कोपगार्ड का उपयोग वास्तव में बेहतर कोड का कारण बनता है?
- 20. लिखने योग्य कोड
- 21. जेवीएम निकास कोड 1073807364 का कारण क्या है?
- 22. क्या System.Uri का उपयोग करने का कोई कारण है?
- 23. ग्राफवीज़ का शुद्ध जावा पुनर्मूल्यांकन?
- 24. पायथन में '//' रखने का क्या कारण है?
- 25. क्या यह सी # कंपाइलर लिखने का भी अर्थ होगा जो एलएलवीएम को लक्षित करता है?
- 26. शुद्ध विधानसभा - कोई भी लिंक सी कार्यों
- 27. क्या इसका उपयोग करने का कोई कारण है->
- 28. क्या कोई कारण है .NET विंडोज प्रोग्रामर को सी या सी ++ सीखना होगा?
- 29. क्या प्रत्येक डब्ल्यूसीएफ कॉल असिनक बनाने का कोई कारण है?
- 30. Intellij अचानक स्केल के साथ वास्तव में धीमी गति से क्या कारण होगा?
शायद आपको इंटेल/एएमडी से किसी से यह पूछना चाहिए। –
@ डेविड: आपका मुद्दा क्या है? –