GNU Assembler: احصل على عنوان التسمية / المتغير [بناء جملة Intel

StackOverflow https://stackoverflow.com/questions/1897401

سؤال

لدي رمز مثل هذا:

.bss
woof: .long 0

.text
bleh:
...some op codes here.

الآن أود نقل عنوان Woof إلى EAX. ما هو بناء الجملة Intel. كود هنا للقيام بذلك؟ الشيء نفسه ينطبق مع تحريك عنوان Bleh، على سبيل المثال، EBX.

مساعدتكم هو محل تقدير كبير!

هل كانت مفيدة؟

المحلول

لا يمكن أن يكون قسم BSS أي كائنات فعلية فيها. قد لا يزال بعض المجمعين يسمح لك بالتحول إلى قسم .bss، ولكن كل ما يمكنك فعله هناك يقول شيئا مثل: x: . = . + 4.

في معظم المجمعين هذه الأيام وخاصة في جنو من أجل إنتل، لم يعد هناك .bss التوجيه، لذلك يمكنك التبديل مؤقتا إلى BSS وإنشاء رمز BSS في طلقة واحدة مع شيء مثل: .comm sym,size,alignment. وبعد هذا هو السبب في أنه من المفترض أن تحصل على خطأ ".BSS التوجيه غير معترف به" أو شيء من هذا القبيل.

ثم يمكنك الحصول على العنوان إما:

lea woof, %eax

أو

movl $woof, %eax

تحديث: آها، بناء جملة إنتل، وليس بنية إنتل. نعم:

.intel_syntax noprefix
    lea    esi,fun
    lea    esi,[fun]
    mov     eax,OFFSET FLAT:fun
.att_syntax
    lea     fun, %eax
    mov     $fun, %eax
.data
fun: .long 0x123

كل ال lea يجب أن تولد النماذج نفس الرمز.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top