คำถามติดแท็ก x86-64

x86-64 เป็นส่วนขยาย 64 บิตสำหรับสถาปัตยกรรม Intel x86

10
เหตุใดระบบ x86-64 จึงมีพื้นที่แอดเดรสเสมือน 48 บิตเท่านั้น
ในหนังสือฉันอ่านสิ่งต่อไปนี้: โปรเซสเซอร์ 32 บิตมีแอดเดรสที่เป็นไปได้ 2 ^ 32 ในขณะที่โปรเซสเซอร์ 64 บิตปัจจุบันมีพื้นที่แอดเดรส 48 บิต ความคาดหวังของฉันคือถ้าเป็นโปรเซสเซอร์ 64 บิตพื้นที่แอดเดรสควรเป็น 2 ^ 64 ผมเลยสงสัยว่าเหตุผลของข้อ จำกัด นี้คืออะไร?


2
“ ตัวแทน; นพ;” ค่าเฉลี่ยในการประกอบ x86? เหมือนกับคำสั่ง "หยุดชั่วคราว" หรือไม่
อะไรrep; nopหมายถึง? เหมือนกับการpauseเรียนการสอนหรือไม่? มันเหมือนกับrep nop(ไม่มีอัฒภาค) หรือไม่? nopคำสั่งง่ายๆแตกต่างกันอย่างไร? มันทำงานแตกต่างกันในโปรเซสเซอร์ AMD และ Intel หรือไม่? (โบนัส) เอกสารอย่างเป็นทางการสำหรับคำแนะนำเหล่านี้อยู่ที่ไหน? แรงจูงใจสำหรับคำถามนี้ หลังจากการสนทนาในความคิดเห็นของคำถามอื่นฉันตระหนักว่าฉันไม่รู้ว่าrep; nop;หมายความว่าอย่างไรในการประกอบ x86 (หรือ x86-64) และฉันไม่พบคำอธิบายที่ดีในเว็บ ฉันรู้ว่านั่นrepคือคำนำหน้าซึ่งหมายถึง"ทำซ้ำคำสั่งcxครั้งต่อไป" (หรืออย่างน้อยก็คือในแอสเซมบลี x86 16 บิตเก่า) ตามนี้ตารางสรุปที่วิกิพีเดียดูเหมือนว่าrepสามารถนำมาใช้เฉพาะกับmovs, stos, cmps, lods, scas( แต่บางทีข้อ จำกัด นี้จะถูกลบออกในโปรเซสเซอร์ใหม่กว่า) ดังนั้นฉันคิดว่าrep nop(ไม่ลำไส้ใหญ่กึ่ง) จะทำซ้ำnopการดำเนินการcxครั้ง อย่างไรก็ตามหลังจากค้นหาเพิ่มเติมฉันก็ยิ่งสับสน ดูเหมือนว่าrep; nopและpause แมปกับ opcode เดียวกันและpauseมีพฤติกรรมที่แตกต่างจากเพียงnopเล็กน้อย จดหมายเก่าบางฉบับจากปี 2548กล่าวถึงสิ่งที่แตกต่างกัน: “ พยายามอย่าเผาผลาญพลังงานมากเกินไป” "เทียบเท่ากับ 'nop' เพียงแค่เข้ารหัส …

2
โค้ดตัวอย่างของ IBM ฟังก์ชั่นที่ไม่ใช่ผู้เข้าร่วมใหม่ไม่ทำงานในระบบของฉัน
ฉันกำลังศึกษาเรื่องการเขียนโปรแกรมอีกครั้ง บนเว็บไซต์ของ IBM (อันนี้ดีจริงๆ) ฉันได้ก่อตั้งรหัสแล้วคัดลอกด้านล่าง มันเป็นรหัสแรกที่นำมาลงเว็บไซต์ รหัสพยายามแสดงปัญหาที่เกี่ยวข้องกับการเข้าถึงตัวแปรในการพัฒนาเชิงเส้นของโปรแกรมข้อความ (asynchronicity) โดยการพิมพ์ค่าสองค่าที่เปลี่ยนแปลงตลอดเวลาใน "บริบทอันตราย" #include <signal.h> #include <stdio.h> struct two_int { int a, b; } data; void signal_handler(int signum){ printf ("%d, %d\n", data.a, data.b); alarm (1); } int main (void){ static struct two_int zeros = { 0, 0 }, ones = { 1, 1 …
11 c  gcc  signals  x86-64  data-race 

1
ทำไมคอมไพเลอร์ยืนยันที่จะใช้การลงทะเบียนที่บันทึกไว้ที่นี่?
พิจารณารหัส C นี้: void foo(void); long bar(long x) { foo(); return x; } เมื่อฉันรวบรวมใน GCC 9.3 ด้วย-O3หรือ-Osฉันได้รับ: bar: push r12 mov r12, rdi call foo mov rax, r12 pop r12 ret เอาท์พุทจากเสียงดังกราวเหมือนกันยกเว้นการเลือกrbxแทนr12การลงทะเบียน callee- บันทึก อย่างไรก็ตามฉันต้องการ / คาดหวังว่าจะเห็นชุดประกอบที่มีลักษณะดังนี้: bar: push rdi call foo pop rax ret ในภาษาอังกฤษนี่คือสิ่งที่ฉันเห็นว่าเกิดขึ้น: ผลักดันค่าเก่าของการลงทะเบียนที่บันทึกไว้แบบสลี ย้ายxไปยังการลงทะเบียนที่ถูกบันทึกด้วย callee โทร …
10 c  gcc  assembly  clang  x86-64 

1
C11 Atomic Acquire / Release และ x86_64 ขาดการเชื่อมโยงโหลด / จัดเก็บ?
ฉันกำลังดิ้นรนกับมาตรา 5.1.2.4 ของมาตรฐาน C11 โดยเฉพาะความหมายของการเปิดตัว / การได้มา ฉันทราบว่าhttps://preshing.com/20120913/acquire-and-release-semantics/ (ในจำนวนอื่น ๆ ) ระบุว่า: ... ความหมายของการวางจำหน่ายป้องกันการเรียงลำดับหน่วยความจำของการปล่อยการเขียนด้วยการดำเนินการอ่านหรือการเขียนที่นำหน้ามันตามลำดับของโปรแกรม ดังนั้นสำหรับต่อไปนี้: typedef struct test_struct { _Atomic(bool) ready ; int v1 ; int v2 ; } test_struct_t ; extern void test_init(test_struct_t* ts, int v1, int v2) { ts->v1 = v1 ; ts->v2 = v2 ; atomic_store_explicit(&ts->ready, false, …

2
prefetcher L2 HW มีประโยชน์จริง ๆ หรือไม่
ฉันอยู่ที่Whisky Lake i7-8565Uและวิเคราะห์เคาน์เตอร์ที่สมบูรณ์แบบและเวลาสำหรับการคัดลอกข้อมูลขนาด 512 KiB (ขนาดแคช L2 มากกว่าสองเท่า) และต้องเผชิญกับความเข้าใจผิดบางประการเกี่ยวกับการทำงานของ L2 HW prefetcher ในIntel Manual Vol.4 MSRมี MSR 0x1A4บิต 0 เป็นสำหรับการควบคุมการใช้ prefetcher L2 HW (1 เพื่อปิดการใช้งาน) พิจารณาเกณฑ์มาตรฐานดังต่อไปนี้: memcopy.h: void *avx_memcpy_forward_lsls(void *restrict, const void *restrict, size_t); memcopy.S: avx_memcpy_forward_lsls: shr rdx, 0x3 xor rcx, rcx avx_memcpy_forward_loop_lsls: vmovdqa ymm0, [rsi + 8*rcx] vmovdqa [rdi …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.