ฉันไม่เข้าใจโค้ดแอสเซมบลี gnu ต่อไปนี้สำหรับสถาปัตยกรรม powerpc

#define START_GOT \
 .section ".got2","aw";\
.LCTOC1 = .+32768

.LCTOC1 เป็นคำสั่งหรือไม่ ทำไมถึงมี . ก่อน +32768?


person Zhang Baolei    schedule 16.04.2013    source แหล่งที่มา


คำตอบ (1)


. (จุด) คือสัญลักษณ์พิเศษที่แสดงถึงตำแหน่งปัจจุบัน เส้นกำลังประกอบเข้า

ดังนั้น นิพจน์ .+32768 หมายถึง "32 KB จากที่นี่" และค่านั้นจะได้รับชื่อเชิงสัญลักษณ์ .LCTOC1

โปรดทราบว่าคำสั่ง .section ซึ่งอยู่ในคำจำกัดความของมาโครอาจเปลี่ยนค่าของ . เช่น ตำแหน่งปัจจุบันนับตั้งแต่เริ่มส่วนใหม่ที่เรียกว่า .got2 อาร์กิวเมนต์ "aw" หมายถึง "สามารถเขียนได้" (โดยละเว้น a)

person unwind    schedule 16.04.2013
comment
ฉันถูกไหม? .LCTOC1 กำลังกำหนดสัญลักษณ์ .LCTOC1 = .+32768 แค่บอกว่า .LCTOC1 เท่ากับ +32768 - person Zhang Baolei; 16.04.2013
comment
@ZhangBaolei: กำลังตั้งค่า .LCTOC1 เป็น (ที่อยู่ปัจจุบัน) + 32768 - person Jeremy Kerr; 07.04.2015