سؤال

في ARM، يتم تشفير المراسلات الفورية للتجميع بقيمة مدورة 8 بت مما يعني أنه لا يمكننا التشفير إلا

(0-256)^2n.

مشكلتي الآن هي أنني أريد مسح الـ 16 بت العلوية من r0 واستبدالها بنصف الكلمة المخزنة r1.ولكن بسبب النطاق المحدود للرسائل الفورية، يجب علي القيام بما يلي:-

bic r0, r0, #0xff000000
bic r0, r0, #0x00ff0000
add r0, r0, r1, LSL #16

هل من الممكن استبدال تعليمات 2 bic بتعليم واحد؟0xffff0000 غير قابل للتشفير.ربما ينبغي علي استخدام عملية منطقية أخرى لمسح الـ 16 بت العلوية؟

شكرًا

يحرر:آسف، لقد نسيت أن أقول إن أعلى 16 بت من r1 فارغة، وأنا أستخدم ARM7TDMI

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

المحلول

وماذا عن:

orr r0,r1,r0,lsl #16
mov r0,r0,ror #16

(وهذا يفترض أن halfword العلوي من R1 فارغ، مثل فعل رمز مرجع الخاص بك.) تبعا للظروف، قد تكون قادرة على تجاهل وسائل التحقق النهائي هنا من خلال دمجه مع بعض الرموز لاحق.

نصائح أخرى

إذا كان لديك نواة جديد ARM بما فيه الكفاية على سؤال بسيط:

movt    r0, #0
orr     r0, r0, r1,lsl#16

http://www.keil.com/support/man /docs/armasm/armasm_cjagdjbf.htm

ولكن إذا كان لديك ARMv6 + كنت في الواقع يمكن أن تفعل كله نقلت سبيل المثال في دفعة واحدة:

pkhbt   r0, r0, r1,lsl#16

http://www.keil.com/support/man /docs/armasm/armasm_cihjedjg.htm

و"الاستعاضة عنها بكلمة نصف المخزنة R1" - هل هذا يعني أنك يمكن أن تحمل أعلى 16 بت من R1 والصفر؟ إذا كان الأمر كذلك،

add r0, r1, r0 lsl #16
mov r0, r0 ror #16

وفكر في وسائل التحقق كعنصر نائب، حيث يمكنك التحرك نأمل أن ROR على كل ما من شأنه أن تأخذ R0 كمدخل المقبل وفعلا القيام بعمل مفيد في نفس الحلقة المفرغة.

في ARMv6 (مثل MPCore)، يمكنك أن تقول

    uxth    r1, r1
    orr     r0, r1, r0, asl #16

إذا كان بإمكانك مسح الأمر برمته، فيمكنك ذلك xor مع نفسه.

إذا كنت بحاجة إلى الاحتفاظ بالنصف السفلي، فهل يمكنك تحريك السجل إلى اليسار بمقدار 8 بتات والعكس؟قد يكون هذا نفس العدد من التعليمات، بالرغم من ذلك.

لرمز C

 (a<<16)|((short)b)

ودول مجلس التعاون الخليجي يولد

    mov     r1, r1, asl #16
    mov     r1, r1, asr #16
    orr     r0, r1, r0, asl #16

والتي لا تستخدم أي immediates - انها لا تزال اثنين من تعليمات، على الرغم

.

ويمكنك استخدام تعليمات BFC. قليلا الميدان واضح. هذه التعليمات يزيل بت ن من م قليلا

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