मैं वर्तमान में लिनक्स पर असेंबली भाषा सीख रहा हूं। मैं 'प्रोग्रामिंग फ्रॉम द ग्राउंड अप' पुस्तक का उपयोग कर रहा हूं और सभी उदाहरण 32-बिट हैं। मेरा ओएस 64-बिट है और मैं 64-बिट में सभी उदाहरण करने की कोशिश कर रहा हूं। मुझे परेशानी हो रही है:x86_64 असेंबली लिनक्स सिस्टम कॉल भ्रम
.section .data
.section .text
.global _start
_start:
movq $60, %rax
movq $2, %rbx
int $0x80
यह केवल लिनक्स निकास सिस्टम कॉल या इसे चाहिए। इसके बजाय यह एक एसईजी FAULT का कारण बनता है और जब मैं इसे
.section .data
.section .text
.global _start
_start:
movq $1, %rax
movq $2, %rbx
int $0x80
यह काम करता है। स्पष्ट रूप से समस्या वह मान है जो मैं% रैक्स पर जाता हूं। दूसरे उदाहरण में उपयोग किए जाने वाले मूल्य $ 1 में 'ग्राउंड अप से प्रोग्रामिंग' का उपयोग करने के लिए कहा गया है, हालांकि इंटरनेट पर कई स्रोतों ने कहा है कि 64-बिट सिस्टम कॉल नंबर $ 60 है। Reference मैं क्या गलत कर रहा हूँ? इसके अलावा मुझे अन्य मुद्दों के बारे में क्या देखना चाहिए और संदर्भ के लिए मुझे क्या उपयोग करना चाहिए? बस अगर आपको पता होना चाहिए, तो मैं ग्राउंड अप से प्रोग्रामिंग में अध्याय 5 पर हूं।
मैं शायद ऐसा करने जा रहा हूं। आपकी प्रतिक्रिया के लिए धन्यवाद। –
किसी को पहले सिस्टम कॉल तर्क के लिए '% आरडीआई' का उपयोग करना चाहिए, न कि '% आरबीएक्स'। –
इसे पकड़ने के लिए धन्यवाद - निश्चित। – duskwuff