กลับไปหน้าบทความ

อ่าน 3 นาที

สาขา (วิทยาการคอมพิวเตอร์)

คำ สั่ง กระโดดหรือ การเปลี่ยนเส้นทาง ( branch or transfer) เป็นคำสั่งใน โปรแกรมคอมพิวเตอร์ ที่สามารถทำให้คอมพิวเตอร์เริ่มประมวลผลลำดับคำสั่งที่แตกต่างออกไป...

สาขา (วิทยาการคอมพิวเตอร์)

คำสั่งกระโดดหรือการเปลี่ยนเส้นทาง( branch or transfer) เป็นคำสั่งในโปรแกรมคอมพิวเตอร์ที่สามารถทำให้คอมพิวเตอร์เริ่มประมวลผลลำดับคำสั่งที่แตกต่างออกไป และทำให้เบี่ยงเบนจากพฤติกรรมปกติในการประมวลผลคำสั่งตามลำดับ[ a ]คำสั่งกระโดด (หรือbranching , branched ) อาจหมายถึงการเปลี่ยนการประมวลผลไปยังลำดับคำสั่งที่แตกต่างออกไปอันเป็นผลมาจากการประมวลผลคำสั่งกระโดด คำสั่งกระโดดใช้เพื่อควบคุมการไหลของโปรแกรมในลูปและเงื่อนไข (เช่น การประมวลผลลำดับคำสั่งเฉพาะเมื่อตรงตามเงื่อนไขบางอย่างเท่านั้น)

คำสั่งกระโดด (branch instruction) สามารถเป็นได้ทั้งแบบ กระโดด โดยไม่มีเงื่อนไข (unconditional branch ) ซึ่งจะกระโดดไปยังตำแหน่งใหม่เสมอ หรือ แบบกระโดด โดยมีเงื่อนไข (conditional branch ) ซึ่งอาจกระโดดหรือไม่กระโดดก็ได้ ขึ้นอยู่กับเงื่อนไขบางอย่าง นอกจากนี้ ขึ้นอยู่กับวิธีการระบุที่อยู่ของลำดับคำสั่งใหม่ (ที่อยู่ "เป้าหมาย") คำสั่งกระโดดโดยทั่วไปจะถูกจัดประเภทเป็นแบบตรง (direct ), แบบอ้อม ( indirect)หรือ แบบสัมพัทธ์ (relative ) ซึ่งหมายความว่าคำสั่งนั้นมีที่อยู่เป้าหมายอยู่แล้ว หรือระบุตำแหน่งที่จะพบที่อยู่เป้าหมาย (เช่น ตำแหน่งในรีจิสเตอร์หรือหน่วยความจำ) หรือระบุความแตกต่างระหว่างที่อยู่ปัจจุบันและที่อยู่เป้าหมาย

การดำเนินการ

คำสั่งกระโดด (Branch instructions) สามารถเปลี่ยนแปลงเนื้อหาของตัวนับโปรแกรม (PC) ของCPU (หรือตัวชี้คำสั่งในไมโครโปรเซสเซอร์ Intel) ได้ ตัวนับโปรแกรมจะเก็บที่อยู่หน่วยความจำของคำสั่งเครื่องถัดไปที่จะถูกดึงมาประมวลผล ดังนั้น หากมีการเรียกใช้คำสั่งกระโดด จะทำให้ CPU ประมวลผลโค้ดจากที่อยู่หน่วยความจำใหม่ ซึ่งจะเปลี่ยนตรรกะของโปรแกรมตามอัลกอริทึมที่โปรแกรมเมอร์วางแผนไว้

คำสั่งกระโดด (Jump)เป็นคำสั่งประเภทหนึ่งที่ใช้ในการประมวลผลระดับเครื่องจักรคำสั่งนี้อาจส่งผลให้ค่าของตัวชี้กำลัง (PC) ถูกโหลดหรือแก้ไขด้วยค่าใหม่ที่แตกต่างจากค่าปกติ (เช่น ค่าเพิ่มขึ้นจากคำสั่งปัจจุบันไปยังคำสั่งถัดไป) โดยทั่วไป คำสั่งกระโดดจะมี ทั้งแบบ ไม่มีเงื่อนไขและ แบบ มีเงื่อนไขซึ่งแบบมีเงื่อนไขอาจถูกกระโดดหรือไม่ถูกกระโดดก็ได้ (ค่าของ PC จะถูกแก้ไขหรือไม่) ขึ้นอยู่กับเงื่อนไขบางอย่าง

การแยกสาขาในระดับเครื่องประเภทที่สองคือคำสั่งเรียก (call)ซึ่งใช้ในการทำงานย่อยเช่นเดียวกับคำสั่งกระโดด (jump) คำสั่งเรียกอาจเปลี่ยนแปลงค่า PC หรือไม่ก็ได้ ขึ้นอยู่กับรหัสเงื่อนไข อย่างไรก็ตาม คำสั่ง เรียกจะบันทึกที่อยู่สำหรับส่งคืน ( return address ) ไว้ในที่ปลอดภัยในหน่วยความจำ (โดยปกติจะอยู่ในโครงสร้างข้อมูล ที่อยู่ในหน่วยความจำ เรียกว่าสแต็ก ) เมื่อการทำงานย่อยเสร็จสิ้น ที่อยู่สำหรับส่งคืนนี้จะถูกส่งคืนไปยัง PC และการทำงานของโปรแกรมจะดำเนินต่อด้วยคำสั่งถัดจากคำสั่งเรียก

ประเภทที่สามของการแยกสาขาในระดับเครื่องคือคำสั่งส่งคืน (return instruction ) คำสั่งนี้จะ "ดึง" ที่อยู่ส่งคืนออกจากสแต็กและโหลดลงในรีจิสเตอร์ PC ซึ่งเป็นการส่งการควบคุมกลับไปยังรูทีนที่เรียกใช้ คำสั่งส่งคืนอาจถูกดำเนินการแบบมีเงื่อนไขได้เช่นกัน คำอธิบายนี้เกี่ยวข้องกับการใช้งานทั่วไป อย่างไรก็ตาม โปรแกรมเมอร์เครื่องมีอำนาจมากในการจัดการที่อยู่ส่งคืนบนสแต็ก และเปลี่ยนเส้นทางการทำงานของโปรแกรมในหลายวิธีที่แตกต่างกัน

ขึ้นอยู่กับหน่วยประมวลผล คำสั่งกระโดดและเรียกฟังก์ชันอาจเปลี่ยนแปลงเนื้อหาของรีจิสเตอร์ PC ในรูปแบบที่แตกต่างกัน อาจมีการโหลดที่อยู่แบบสัมบูรณ์ หรืออาจมีการเพิ่มหรือลบค่าบางอย่าง (หรือค่าชดเชย) จากค่าปัจจุบันของ PC ทำให้ที่อยู่ปลายทางสัมพันธ์กับตำแหน่งปัจจุบันในโปรแกรม แหล่งที่มาของค่าชดเชยอาจแตกต่างกันไป เช่น ค่าคงที่ที่ฝังอยู่ในคำสั่ง หรือเนื้อหาของรีจิสเตอร์ของหน่วยประมวลผลหรือตำแหน่งหน่วยความจำ หรือเนื้อหาของตำแหน่งบางตำแหน่งที่บวกกับค่าดัชนี

คำว่า"สาขา" (branch) ยังสามารถใช้ได้กับโปรแกรมในภาษาโปรแกรมระดับสูงด้วย โดยปกติแล้วสาขาเหล่านี้จะอยู่ในรูปของคำสั่งเงื่อนไขต่างๆ ที่ครอบคลุมลำดับคำสั่งที่จะถูกดำเนินการหากเงื่อนไขนั้นเป็นจริง คำสั่งสาขาแบบไม่มีเงื่อนไข เช่นGOTOใช้เพื่อกระโดดไปยังลำดับคำสั่งอื่นโดยไม่มีเงื่อนไข หากอัลกอริทึมต้องการสาขาแบบมีเงื่อนไข คำสั่ง GOTO (หรือการเรียกใช้ซับรูทีน GOSUB) จะนำหน้าด้วย คำสั่ง IF-THENที่ระบุเงื่อนไข ภาษาโปรแกรมระดับสูงทุกภาษาสนับสนุนอัลกอริทึมที่สามารถนำโค้ดกลับมาใช้ใหม่ได้ในรูปแบบของลูปซึ่งเป็นโครงสร้างควบคุมที่ทำซ้ำลำดับคำสั่งจนกว่าจะมีเงื่อนไขบางอย่างเป็นจริงซึ่งทำให้ลูปสิ้นสุดลง ลูปยังจัดเป็นคำสั่งสาขาด้วย ในระดับเครื่อง ลูปจะถูกนำไปใช้ในรูปแบบของการกระโดดแบบมีเงื่อนไขทั่วไปที่เปลี่ยนเส้นทางการทำงานไปยังโค้ดที่ทำซ้ำ

ในซีพียูที่มีรีจิสเตอร์แฟล็กคำสั่งก่อนหน้าจะตั้งค่าเงื่อนไขในรีจิสเตอร์แฟล็ก คำสั่งก่อนหน้านั้นอาจเป็น คำสั่ง ทางคณิตศาสตร์หรือตรรกะมักจะอยู่ใกล้กับคำสั่งกระโดด แต่ไม่จำเป็นต้องเป็นคำสั่ง ที่อยู่ ก่อนหน้าคำสั่งกระโดดโดยตรง เงื่อนไขที่เก็บไว้จะถูกนำมาใช้ในคำสั่งกระโดด เช่นกระโดดหากแฟล็กโอเวอร์โฟลว์ถูกตั้งค่า ข้อมูลชั่วคราวนี้มักจะถูกเก็บไว้ในรีจิสเตอร์แฟล็ก แต่ก็อาจอยู่ที่อื่นได้เช่นกัน การออกแบบรีจิสเตอร์แฟล็กนั้นง่ายในคอมพิวเตอร์ที่ช้าและเรียบง่าย ในคอมพิวเตอร์ที่เร็ว รีจิสเตอร์แฟล็กอาจเป็นคอขวดของความเร็ว เนื่องจากคำสั่งที่สามารถทำงานแบบขนานได้ (ในหน่วยประมวลผล หลายหน่วย ) จำเป็นต้องตั้งค่าบิตแฟล็กตามลำดับที่กำหนด

นอกจากนี้ยังมีเครื่องจักร (หรือคำสั่งเฉพาะ) ที่สามารถตรวจสอบเงื่อนไขได้ด้วยคำสั่งกระโดดเอง เช่นbranch <label> if register X negativeในการออกแบบคอมพิวเตอร์แบบง่าย การแยกสาขาโดยใช้การเปรียบเทียบจะทำการคำนวณทางคณิตศาสตร์มากกว่าและอาจใช้พลังงานมากกว่าการแยกสาขาโดยใช้รีจิสเตอร์แฟล็ก ในการออกแบบคอมพิวเตอร์ที่รวดเร็ว การแยกสาขาโดยใช้การเปรียบเทียบสามารถทำงานได้เร็วกว่าการแยกสาขาโดยใช้รีจิสเตอร์แฟล็ก เนื่องจากสามารถเข้าถึงรีจิสเตอร์ได้แบบขนานมากกว่า โดยใช้กลไก CPU เดียวกันกับการคำนวณ

สถาปัตยกรรม CPU ยุคแรกๆ ที่เน้นคำ[ b ] บางแบบ ใช้การดำเนินการ "ข้ามคำสั่งถัดไป" แบบมีเงื่อนไข โดยแยกสาขาไปยัง NSI, NSI+1 หรือ NSI+2 (PC+1, PC+2, PC+3) ขึ้นอยู่กับผลลัพธ์ของการเปรียบเทียบ สถาปัตยกรรม CPU แบบง่ายๆ บางแบบ ซึ่งยังคงพบได้ในไมโครคอนโทรลเลอร์ อาจไม่ได้ใช้การกระโดดแบบมีเงื่อนไข แต่ใช้เฉพาะการข้ามและการกระโดดแบบไม่มีเงื่อนไขเท่านั้น ดังนั้น การกระโดดหรือการเรียกแบบมีเงื่อนไขจึงถูกนำไปใช้เป็นการข้ามแบบมีเงื่อนไขของคำสั่งกระโดดหรือการเรียกแบบไม่มีเงื่อนไข

ตัวอย่าง

ขึ้นอยู่กับสถาปัตยกรรมของคอมพิวเตอร์ตัวย่อในภาษาแอสเซ มบลี สำหรับคำสั่งกระโดดมักจะเป็นรูปแบบย่อของคำว่าjumpหรือ branch โดยมักจะมีตัวอักษรเพิ่มเติม (หรือพารามิเตอร์พิเศษ) ที่แสดงถึงเงื่อนไข บางครั้งอาจมีรายละเอียดอื่นๆ รวมอยู่ด้วย เช่น ช่วงของการกระโดด (ขนาดออฟเซ็ต) หรือโหมดการกำหนดแอดเดรส พิเศษ ที่ควรใช้เพื่อค้นหาออฟเซ็ตที่มีผลจริง

ตารางนี้แสดงรายการคำสั่งกระโดดหรือคำสั่งแยกสาขาในระดับเครื่องที่พบในสถาปัตยกรรมที่รู้จักกันดีหลายแบบ:

เงื่อนไขหรือผลลัพธ์ x86 พีดีพี-11, แวกซ์ อาร์เอ็ม (บางส่วน 6502) สมการ
ศูนย์ (หมายความว่าเท่ากันสำหรับ sub/cmp) เจซี; เจเอ็นซี บีคิว; บีเอ็นอี บีคิว; บีเอ็นอี ศูนย์; ไม่ใช่ศูนย์
ลบ (N), เครื่องหมาย (S) หรือ ลบ (M) เจเอส; เจเอ็นเอส ดัชนีมวลกาย (BMI); ทรัพย์สินส่วนท้อง (BPL) ดัชนีมวลกาย (BMI); ทรัพย์สินส่วนท้อง (BPL) เชิงลบ; ไม่ใช่เชิงลบ
เกิดข้อผิดพลาดทางคณิตศาสตร์ (มีแฟล็กชื่อ O หรือ V) โจ; เจเอ็นโอ บีวีเอส; บีวีซี บีวีเอส; บีวีซี ล้น; ไม่ล้น
ตัวทด (จาก add, cmp, shift เป็นต้น) เจซี; เจเอ็นซี บีซีเอส; บีซีซี บีซีเอส; บีซีซี ถือ; ไม่ถือ
ไม่มีลายเซ็นด้านล่าง (ล่าง) เจบี บลอ บลอ*ยืม
ไม่มีเครื่องหมายต่ำกว่าหรือเท่ากับ (ต่ำกว่าหรือเท่ากัน) เจบีอี บลอส บีแอลเอส*ยืมหรือศูนย์
ไม่มีเครื่องหมายกำกับสูงกว่าหรือเท่ากับ (สูงกว่าหรือเท่ากัน) เจเอ บีเอชไอเอส บีเอชเอส*ไม่ยืม
ไม่มีเครื่องหมายกำกับด้านบน (สูงกว่า) เจเอ บีเอชไอ บีเอชไอ*ไม่ยืมและไม่ใช่ศูนย์
ลงชื่อน้อยกว่า เจแอล บีแอลที บีแอลที เครื่องหมาย≠โอเวอร์โฟลว์
ลงชื่อน้อยกว่าหรือเท่ากับ เจแอลอี บีแอลอี บีแอลอี (เครื่องหมาย≠โอเวอร์โฟลว์) หรือศูนย์
ลงนามมากกว่าหรือเท่ากับ เจจีอี บีจีอี บีจีอี เครื่องหมาย = ล้น
ลงชื่อมากกว่า เจจี บีจีที บีจีที (เครื่องหมาย = เกินขีดจำกัด) และไม่ใช่ศูนย์

*สถาปัตยกรรม x86, PDP-11, VAX และบางสถาปัตยกรรม จะตั้งค่าแฟล็ก carry เพื่อส่งสัญญาณการยืมและล้างแฟล็ก carry เพื่อส่งสัญญาณว่าไม่มีการยืม สถาปัตยกรรม ARM, 6502 , PIC และบางสถาปัตยกรรม จะทำตรงกันข้ามสำหรับการดำเนินการลบ ฟังก์ชันผกผันของแฟล็ก carry สำหรับคำสั่งบางอย่างจะถูกทำเครื่องหมายด้วย ( * ) นั่นคือยืม = ไม่ทดในบางส่วนของตาราง แต่ถ้าไม่ได้ระบุไว้เป็นอย่างอื่น ยืม ≡ ทด อย่างไรก็ตาม การทดในการดำเนินการบวกจะถูกจัดการในลักษณะเดียวกันโดยสถาปัตยกรรมส่วนใหญ่

ปัญหาประสิทธิภาพการทำงานกับคำสั่งกระโดด

เพื่อให้ได้ประสิทธิภาพสูง โปรเซสเซอร์สมัยใหม่จึงใช้สถาปัตยกรรมแบบไปป์ไลน์โดยประกอบด้วยหลายส่วน แต่ละส่วนจะประมวลผลคำสั่งบางส่วน ส่งผลลัพธ์ไปยังส่วนถัดไปในไปป์ไลน์ และเริ่มทำงานกับคำสั่งถัดไปในโปรแกรม การออกแบบนี้คาดหวังว่าคำสั่งจะทำงานตามลำดับที่แน่นอนและไม่เปลี่ยนแปลง คำสั่งการกระโดดแบบมีเงื่อนไขทำให้ไม่สามารถทราบลำดับนี้ได้ ดังนั้นคำสั่งการกระโดดแบบมีเงื่อนไขจึงอาจทำให้เกิด "การหยุดชะงัก" ซึ่งไปป์ไลน์จะต้องเริ่มต้นใหม่ในส่วนอื่นของโปรแกรม

ปรับปรุงประสิทธิภาพโดยลดจำนวนแผงขายของในสาขา

มีเทคนิคหลายอย่างที่ช่วยเพิ่มความเร็วโดยลดการหยุดชะงักจากการแยกเงื่อนไข

คำแนะนำการคาดการณ์สาขา

ในอดีต การคาดการณ์การกระโดดของคำสั่ง (branch prediction) ใช้สถิติ และนำผลลัพธ์นั้นมาใช้ในการปรับปรุงประสิทธิภาพของโค้ด โปรแกรมเมอร์จะคอมไพล์โปรแกรมเวอร์ชันทดสอบ และรันด้วยข้อมูลทดสอบ โค้ดทดสอบจะนับจำนวนครั้งที่คำสั่งกระโดดถูกเลือกจริง ๆ จากนั้นคอมไพเลอร์จะใช้สถิติจากโค้ดทดสอบนั้นเพื่อปรับปรุงประสิทธิภาพของคำสั่งกระโดดในโค้ดที่เผยแพร่ การปรับปรุงประสิทธิภาพจะทำให้ทิศทางการกระโดดที่เร็วที่สุด (ไม่ว่าจะถูกเลือกหรือไม่) เป็นเส้นทางควบคุมการไหลของโปรแกรมที่ถูกเลือกบ่อยที่สุดเสมอ เพื่อให้เป็นไปได้เช่นนี้ ซีพียูต้องได้รับการออกแบบให้มี (หรืออย่างน้อยก็มี) จังหวะการกระโดดที่คาดการณ์ได้ ซีพียูบางตัวมีชุดคำสั่ง (เช่นPower ISA ) ที่ได้รับการออกแบบมาพร้อมกับ "คำแนะนำการกระโดด" (branch hints) เพื่อให้คอมไพเลอร์สามารถบอกซีพียูได้ว่าควรเลือกคำสั่งกระโดดอย่างไรในแต่ละคำสั่ง

ปัญหาของการคาดการณ์การแตกแขนงของซอฟต์แวร์คือมันต้องการกระบวนการพัฒนาซอฟต์แวร์ที่ซับซ้อน

ตัวทำนายการแยกสาขาฮาร์ดแวร์

ในการรันซอฟต์แวร์ใดๆตัวทำนายการกระโดด ของฮาร์ดแวร์ ได้ย้ายสถิติเข้าไปในส่วนอิเล็กทรอนิกส์ ตัวทำนายการกระโดดเป็นส่วนหนึ่งของโปรเซสเซอร์ที่คาดเดาผลลัพธ์ของการกระโดดแบบมีเงื่อนไข จากนั้นตรรกะของโปรเซสเซอร์จะเสี่ยงทายกับการคาดเดานั้นโดยเริ่มดำเนินการตามลำดับคำสั่งที่คาดไว้ ตัวอย่างของระบบทำนายการกระโดดของฮาร์ดแวร์แบบง่ายๆ คือการสมมติว่าการกระโดดย้อนกลับทั้งหมด (เช่น ไปยังตัวนับโปรแกรมที่เล็กกว่า) จะถูกดำเนินการ (เพราะเป็นส่วนหนึ่งของลูป) และการกระโดดไปข้างหน้าทั้งหมด (ไปยังตัวนับโปรแกรมที่ใหญ่กว่า) จะไม่ถูกดำเนินการ (เพราะออกจากลูป) ตัวทำนายการกระโดดที่ดีกว่าได้รับการพัฒนาและตรวจสอบทางสถิติโดยการรันในโปรแกรมจำลองบนโปรแกรมทดสอบต่างๆ ตัวทำนายที่ดีมักจะนับผลลัพธ์ของการดำเนินการก่อนหน้าของการกระโดด คอมพิวเตอร์ที่เร็วขึ้นและมีราคาแพงกว่าสามารถทำงานได้เร็วขึ้นโดยการลงทุนในอิเล็กทรอนิกส์การทำนายการกระโดดที่ดีกว่า ใน CPU ที่มีการทำนายการกระโดดของฮาร์ดแวร์ คำแนะนำการกระโดดจะช่วยให้การทำนายการกระโดดที่เหนือกว่าของคอมไพเลอร์สามารถแทนที่การทำนายการกระโดดที่ง่ายกว่าของฮาร์ดแวร์ได้

รหัสที่ไม่ขึ้นกับสาขา

ตรรกะบางอย่างสามารถเขียนได้โดยไม่ต้องใช้สาขาหรือใช้สาขาน้อยลง บ่อยครั้งที่สามารถใช้การดำเนินการแบบบิตการย้ายแบบมีเงื่อนไขหรือการคาดการณ์ อื่นๆ แทนการใช้สาขาได้[ 2 ] [ 3 ]อันที่จริง โค้ดที่ไม่มีสาขาเป็นสิ่งจำเป็นสำหรับการเข้ารหัสลับเนื่องจากการโจมตีแบบจับเวลา[ 4 ]

ช่องหน่วงเวลา

เทคนิคอีกอย่างหนึ่งคือช่องหน่วงเวลาการแตกสาขา (branch delay slot ) ในแนวทางนี้ คำสั่งอย่างน้อยหนึ่งคำสั่งที่ตามหลังการแตกสาขาจะถูกประมวลผลเสมอ โดยมีข้อยกเว้นบางประการ เช่น คำสั่งแตกสาขาที่น่าจะเป็นไปได้/ไม่น่าจะเป็นไปได้ ของสถาปัตยกรรม MIPS แบบดั้งเดิม ดังนั้น คอมพิวเตอร์จึงสามารถใช้คำสั่งนี้เพื่อทำงานที่เป็นประโยชน์ได้ ไม่ว่าไปป์ไลน์จะหยุดชะงักหรือไม่ก็ตาม แนวทางนี้เคยได้รับความนิยมใน คอมพิวเตอร์ RISC ในอดีต แต่ในตระกูล CPU ที่เข้ากันได้ มันทำให้ CPU แบบมัลติไซเคิล (ที่ไม่มีไปป์ไลน์) CPU ที่เร็วกว่าที่มีไปป์ไลน์ยาวกว่าที่คาดไว้ และ CPU แบบซูเปอร์สเกลาร์ (ซึ่งสามารถประมวลผลคำสั่งนอกลำดับได้) ซับซ้อนขึ้น

ดูเพิ่มเติม

หมายเหตุ

  1. ^อย่างน้อยก็ในเชิงแนวคิด โปรดดูที่ไม่เรียงลำดับ
  2. ^เช่น เปรียบเทียบตัวสะสมกับพื้นที่จัดเก็บ (CAS) และเปรียบเทียบตัวสะสมเชิงตรรกะกับพื้นที่จัดเก็บ (LAS) บน IBM 7094 [ 1 ]
  • เอกสารประกอบการใช้งาน IA-32 และ x86-64 ฟรีจาก Intel
  • คำถามที่พบบ่อยเกี่ยวกับ PDP-11
  • ชุดคำสั่ง ARM
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Branch_(computer_science)&oldid=1347394501 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ สาขา (วิทยาการคอมพิวเตอร์)

คำ สั่ง กระโดดหรือ การเปลี่ยนเส้นทาง ( branch or transfer) เป็นคำสั่งใน โปรแกรมคอมพิวเตอร์ ที่สามารถทำให้คอมพิวเตอร์เริ่มประมวลผลลำดับคำสั่งที่แตกต่างออกไป...

การดำเนินการ

คำสั่งกระโดด (Branch instructions) สามารถเปลี่ยนแปลงเนื้อหาของ ตัวนับโปรแกรม (PC) ของ CPU (หรือตัวชี้คำสั่งในไมโครโปรเซสเซอร์ Intel) ได้ ตัวนับโปรแกรมจะเก็บ ที่อยู่หน่วยความจำ ของคำสั่งเครื่องถัดไปที่จะถูกดึงมาประมวลผล ดังนั้น หากมีการเรียกใช้คำสั่งกระโดด...

ตัวอย่าง

ขึ้นอยู่กับ สถาปัตยกรรมของคอมพิวเตอร์ ตัวย่อใน ภาษา แอสเซ มบลี สำหรับคำสั่งกระโดดมักจะเป็นรูปแบบย่อของคำว่า jump หรือ branch โดย มักจะมีตัวอักษรเพิ่มเติม (หรือพารามิเตอร์พิเศษ) ที่แสดงถึงเงื่อนไข บางครั้งอาจมีรายละเอียดอื่นๆ รวมอยู่ด้วย เช่น ช่วงของการกระโดด...

ปัญหาประสิทธิภาพการทำงานกับคำสั่งกระโดด

เพื่อให้ได้ประสิทธิภาพสูง โปรเซสเซอร์สมัยใหม่จึงใช้ สถาปัตยกรรมแบบไปป์ไลน์ โดยประกอบด้วยหลายส่วน แต่ละส่วนจะประมวลผลคำสั่งบางส่วน ส่งผลลัพธ์ไปยังส่วนถัดไปในไปป์ไลน์ และเริ่มทำงานกับคำสั่งถัดไปในโปรแกรม...