2011-11-16 14 views
10

मैं इन सवालों आशा का उपयोग करना नहीं बल्कि सरल है: (एनएएसएम संकलक, लिनक्स, 86 इंटेल सिंटेक्स)86 एएसएम लिनक्स - .bss धारा

भाग 1:

मैं कैसे उपयोग करने के लिए यह पता लगाने की कोशिश कर रहा हूँ एक असेंबली प्रोग्राम के .bss अनुभाग को मूल्यों को स्टोर करने का एक तरीका खोजने के लिए, एक ऑपरेशन (+ - * /) से एक मान की तरह घोषित चर के लिए। उदाहरण के लिए:

section .bss 

variable: resb 50          ;Imaginary buffer 

section .text 

add 10,1             ;Operation 
;move the result into variable 

तो, मैं जानता हूँ कि यह उपयोगकर्ता इनपुट को पढ़ने के लिए कर्नेल intterupt के साथ ऐसा करना संभव है (लेकिन यह है कि तार शामिल है, लेकिन वहाँ है चर चर में इस मान की प्रतिलिपि के लिए एक रास्ता तो ? कि यह बाद में इस्तेमाल किया जा सकता इस पर और ढेर धक्का और दो बातें पॉप की तुलना में बहुत आसान होता

भाग 2:।

वहाँ में चर का मान निकालने के लिए एक रास्ता है .bss सेक्शन? दूसरे शब्दों में, अगर मैं .bss चर में एक नया मान स्टोर करना चाहता हूं, तो मैं इसे कैसे कर सकता हूं वेरिएबल में पहले से वर्णित वर्णों/मानों को नए मान के साथ मिश्रित नहीं कर रहे हैं?

धन्यवाद

उत्तर

25
section .bss 

variable: resb 4 

... प्रतीक variable अब .bss खंड में भंडारण की 4 बाइट्स की पता (अर्थात में एक 32-बिट मान संग्रहीत करने के लिए पर्याप्त) को दर्शाता है।

section .text 
... 
mov eax, 123 
mov [variable], eax 

... 123 करने के लिए सेट eax रजिस्टर, और फिर स्थान प्रतीक variable ने संबोधित में eax का मूल्य संग्रहीत करता है।

mov eax, [variable] 

... पढ़ता वर्तमान स्थान eax रजिस्टर में variable ने संबोधित में संग्रहीत मूल्य।

mov eax, 456 
mov [variable], eax 

... पिछले एक को ओवरराइट करने, एक नया मान स्टोर करता है।

+0

हमेशा अच्छी तरह से समझाया गया है! – nmagerko