1
ทำไมคอมไพเลอร์ไม่ใช้ LSR โดยตรง
สวัสดีฉันได้ทำงานในโครงการที่ใช้ Arduino Uno (ดังนั้น ATmega328p) ซึ่งเวลาค่อนข้างสำคัญและฉันต้องการดูว่าคำสั่งใดที่คอมไพเลอร์แปลงรหัสของฉัน และในนั้นฉันมีuint8_tที่ฉันเปลี่ยนหนึ่งบิตไปทางขวาในแต่ละการใช้ซ้ำdata >>= 1และดูเหมือนว่าคอมไพเลอร์แปลสิ่งนี้เป็น 5 คำแนะนำ ( dataอยู่ในr24): mov r18, r24 ldi r19, 0x00 asr r19 ror r18 mov r24, r18 แต่ถ้าฉันดูเอกสารชุดคำสั่งฉันเห็นคำสั่งที่ทำสิ่งนี้: lsr r24 ฉันจะมองข้ามบางสิ่งหรือทำไมคอมไพเลอร์ก็ไม่ใช้สิ่งนี้ด้วย การลงทะเบียนr18และr19ไม่ได้ใช้ที่อื่น ฉันใช้ Ardunio แต่ถ้าฉันถูกต้องมันจะใช้avr-gccคอมไพเลอร์ปกติ นี่คือรหัส (ตัด) ซึ่งสร้างลำดับ: ISR(PCINT0_vect) { uint8_t data = 0; for (uint8_t i = 8; i > …