ฉันต้องการเขียนจำนวนเต็ม 64 บิตไปยังตำแหน่งหน่วยความจำเฉพาะ
โค้ดตัวอย่าง C++ จะมีลักษณะดังนี้:
extern char* base;
extern uint64_t data;
((uint64_t *)base)[1] = data;
ต่อไปนี้เป็นความพยายามของฉันที่จะเขียนข้อความด้านบนแบบอินไลน์แอสเซมบลี:
uint64_t addr = (uint64_t)base + 8;
asm volatile (
"movq %0, (%1)\n\t"
:: "r" (data), "r"(addr) : "memory"
);
ข้อมูลข้างต้นใช้ได้กับโปรแกรมทดสอบขนาดเล็ก แต่ในแอปพลิเคชันของฉัน ฉันสงสัยว่ามีบางอย่างผิดปกติ
ฉันจำเป็นต้องระบุตัวถูกดำเนินการเอาต์พุตหรือข้อจำกัดอื่นใดข้างต้นหรือไม่
ขอบคุณ!