2.2.3 การแก้ไขแอดเดรส โดยการใช้อินเด็กรีจิสเตอร์ การแก้ปัญหาที่ได้ผลดีที่สุด คือการใช้ อินเด็กรีจิสเตอร์ เมื่อต้องมีการแก้ไขแอดเดรส แอดเดรสนั้น มีค่าเท่ากับ ค่าของเบสรีจิสเตอร์ บวกด้วยค่าของอินเด็กรีจิสเตอร์ บวกด้วยค่าของอ๊อฟเซท เรายังใช้ชุดของ 3 คำสั่งเดิม คือคำสั่ง Load คำสั่งบวก 49 และคำสั่งเก็บข้อมูล เราใช้คำสั่งวนลูปรอบ 3 คำสั่งนั้น เมื่อมีการเปลี่ยนค่าในตัวอินเด็กรีจิสเตอร์ทีละ 4 ค่าแอดเดรสของคำสั่ง Load และ Store ก็จะเปลี่ยนตามไปโดยปริยาย 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Instructions Comments 48 50 54 58 62 : 948 952 956 960 964 968 972 976 980 984 988 2 6 10 14 900 904 908 912 916 920 924 928 932 936 940 SR 4,4 L 2,904(4,1) A 2,900(0,1) ST 2,904(4,1) A 4,904(0,1) Branch to 0 49 5 7 9 12 8 15 16 3 4 เคลียร์ Reg. 4 โหลด ข้อมูลจาก 904 บวก 49 เก็บข้อมูลจาก 904 เพิ่ม Index อีก 4 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Instructions Comments 48 50 54 58 62 : 948 952 956 960 964 968 972 976 980 984 988 2 6 10 14 900 904 908 912 916 920 924 928 932 936 940 SR 4,4 L 2,904(4,1) A 2,900(0,1) ST 2,904(4,1) A 4,904(0,1) Branch to 0 49 5 7 9 12 8 15 16 3 4 เคลียร์ Reg. 4 โหลด ข้อมูลจาก 904 บวก 49 เก็บข้อมูลจาก 904 เพิ่ม Index อีก 4 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Instructions Comments 48 50 54 58 62 : 948 952 956 960 964 968 972 976 980 984 988 2 6 10 14 900 904 908 912 916 920 924 928 932 936 940 SR 4,4 L 2,904(4,1) A 2,900(0,1) ST 2,904(4,1) A 4,904(0,1) Branch to 0 49 7 9 12 8 15 16 3 4 เคลียร์ Reg. 4 โหลด ข้อมูลจาก 904 บวก 49 เก็บข้อมูลจาก 904 เพิ่ม Index อีก 4 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Instructions Comments 48 50 54 58 62 : 948 952 956 960 964 968 972 976 980 984 988 2 6 10 14 900 904 908 912 916 920 924 928 932 936 940 SR 4,4 L 2,904(4,1) A 2,900(0,1) ST 2,904(4,1) A 4,904(0,1) Branch to 0 49 56 9 12 8 15 16 3 4 เคลียร์ Reg. 4 โหลด ข้อมูลจาก 908 บวก 49 เก็บข้อมูลจาก 908 เพิ่ม Index อีก 4 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Instructions Comments 48 50 54 58 62 : 948 952 956 960 964 968 972 976 980 984 988 2 6 10 14 900 904 908 912 916 920 924 928 932 936 940 SR 4,4 L 2,904(4,1) A 2,900(0,1) ST 2,904(4,1) A 4,904(0,1) Branch to 0 49 56 12 8 15 16 3 4 เคลียร์ Reg. 4 โหลด ข้อมูลจาก 912 บวก 49 เก็บข้อมูลจาก 912 เพิ่ม Index อีก 4 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language คำสั่งลูปวน ในหัวข้อนี้ เราจะกล่าวถึงการใช้คำสั่งลูปวนในภาษาเครื่อง 2 วิธี โดยการตั้งข้อสมมุติฐานเพิ่มดังนี้ สมมุติฐานที่ 6. ที่ Relative address เก็บค่าของ 10 สมมุติฐานที่ 7. ที่ Relative address เก็บค่าของ 1 (สำหรับวิธีแรกเท่านั้น) 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language วิธีที่ 1 ภายหลังจากที่ 4 คำสั่งพื้นฐานแรกทำงาน มันจะเกิด Sequence ของคำสั่ง ที่มีการลบ 1 ออกจากที่เก็บหน่วยความจำชั่วคราว และตรวจสอบดูว่า ค่าที่เก็บอยู่ยังเป็นบวกหรือไม่ ถ้าเป็นบวก มันก็จะกลับขึ้นไปทำงานที่Relative address ตำแหน่งที่ 2 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language วิธีที่ 2 คำสั่ง BCT (Branch on Count ดังแสดงในรูป 2.13) จะทำหน้าที่ให้โปรแกรมวนจนครบลูป รีจิสเตอร์ 3 จะมีค่าลดลงทีละ 1 จนมีค่าเหลือ 0 ในขณะที่ค่าของ รีจิสเตอร์ 3 เป็นบวก ค่าของแอดเดรส คือ 6 บวกกับค่าของ รีจิสเตอร์ 1 เมื่อค่าของมันลดลงถึง 0 ก็จะไม่มีการวนลูปอีก คอมพิวเตอร์เกือบทุกระบบ มีการใช้คำสั่งประเภท Branch เพื่อวนลูปแบบนี้ 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language โปรแกรมที่ 2.13 เราสามารถลดขนาดของโปรแกรม โดยที่ป็นชุดคำสั่ง 26 ไบท์ และชุดข้อมูล 52 ไบท์ รวมเป็น 78 ไบท์ ซึ่งโปรแกรมแรกของเรา ใช้ชุดคำสั่ง 120 ไบท์ และชุดข้อมูล 44 ไบท์ รวมเป็น 164 ไบท์ ทำให้ประหยัดเนื้อที่ไปถึง 86 ไบท์ หมายเหตุ โปรแกรมสามารถเคลื่อนย้ายไปวางยังตำแหน่งต่างๆ ของหน่วยความจำ (เช่น 400 แทนที่จะเป็น 48) โดยเพียงแค่เปลี่ยนค่าของรีจิสเตอร์ 1 เท่านั้น 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language 2.3 ภาษาแอสเซมบลี้ เมื่อผู้ใช้ต้องการติดต่อกับคอมพิวเตอร์ เขาสามารถติดต่อกับคอมพิวเตอร์ได้หลายภาษา 21/06/47 Machine Structure, Machine Language, and Assembly Language
ข้อดี ของภาษาแอสเซมบลี้ มันเป็น Mnemonic เช่น เราเขียน ST แทนที่จะเขียน 01010000 สำหรับคำสั่งเก็บข้อมูล ใช้สัญลักษณ์แทนแอดเดรส แทนที่จะเป็น Absolute อ่านเข้าใจได้ง่าย การกำหนดข้อมูลให้กับโปรแกรม กระทำได้ง่ายกว่า 21/06/47 Machine Structure, Machine Language, and Assembly Language
ข้อเสีย ของภาษาแอสเซมบลี้ ต้องการตัวแอสเซมเบลอร์ แปลง Source program ไปเป็น Object code 21/06/47 Machine Structure, Machine Language, and Assembly Language
2.3.1 โปรแกรมที่ใช้ภาษาแอสเซมบลี้ ข้อสมมุติฐานต่างๆ ที่กำหนดไว้สำหรับการเขียนภาษาเครื่อง ต้องถูกยกเลิก ตัวอย่างข้อสมมุติฐานอันหนึ่ง ก็คือ ค่าแอดเดรส เริ่มต้น ในหน่วยความจำอยู่ที่ Absolute แอดเดรส 48 ในฐานะของโปรแกรมเมอร์ เราไม่สามารถรู้ล่วงหน้าได้ว่า โปรแกรมของเราจะถูกโหลดไปวางไว้ที่ไหนในหน่วยความจำ ดังนั้นจึงเป็นหน้าที่ของเรา ที่จะต้องโหลดเบสรีจิสเตอร์ ด้วยแอดเดรสโปรแกรมของเราในหน่วยความจำ ก่อนที่เราจะให้โปรแกรมทำงาน คำสั่ง BALR เป็นกลไกหนึ่ง ที่ใช้ในการโหลด เบสรีจิสเตอร์ 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language คำสั่ง Pseudo-op DC คำสั่งการกำหนดตัวคงที่ (Define constant) DS คำสั่งการกำหนดที่เก็บ (Define storage) F คำสั่งวางค่า ตัวเลข เช่น 10, 4, และ 49 ในหน่วยความจำ ติดต่อกัน แบบ Fullword ตัวอย่าง เช่น DS 100F ทำให้ ตัวแอสเซมเบลอร์ จองที่เก็บข้อมูลแบบ Fullword จำนวน 100 ที่ 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language คำสั่ง USING USING เป็น Pseudo-op ที่บอกตัวแอสเซมเบลอร์ว่า รีจิสเตอร์อะไร ใช้เป็นเบสรีจิสเตอร์ และค่าของเบสรีจิสเตอร์เป็นเท่าไร ตัวอย่าง Assembly Relative Mnemonic Program TEST BEGIN START BALR USING SR 15,0 BEGIN+2, 15 4,4 2 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language คำสั่ง BALR BALR เป็นคำสั่งที่ใช้โหลดรีจิสเตอร์ด้วยแอดเดรสถัดไป และกระโดดไปที่แอดเดรสในฟิลด์ที่ 2 เมื่อ Operand ตัวที่ 2 เป็นรีจิสเตอร์ 0 (ดังแสดง) มันจะทำงานคำสั่งถัดไป ตัวอย่าง Assembly Relative Mnemonic Program TEST BEGIN START BALR USING SR 15,0 BEGIN+2, 15 4,4 2 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language คำสั่ง START START เป็น Pseudo-op บอกตัวแอสเซมเบลอร์ว่า โปรแกรมจะเริ่มต้นทำงานที่ตำแหน่งไหน และยอมให้โปรแกรมเมอร์ ตั้งชื่อโปรแกรมอีกด้วย ตัวอย่าง Assembly Relative Mnemonic Program TEST BEGIN START BALR USING SR 15,0 BEGIN+2, 15 4,4 2 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language คำสั่ง END END เป็น Pseudo-op ที่บอกตัวแอสเซมเบลอร์ว่า คำสั่งสุดท้ายของโปรแกรมมาถึงแล้ว เครื่องจะหยุดทำงานโปรแกรมนี้ Assembly Relative Mnemonic Program : BASE EQU END 15 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language คำสั่ง BR 14 เป็นคำสั่งที่โดด (Branch) ไปทำยังตำแหน่งแอดเดรสที่บรรจุอยู่ใน รีจิสเตอร์ 14 ตามข้อตกลงทั่วไป ตอนเรียกใช้โปรแกรมย่อย รีจิสเตอร์ 14 จะใช้เก็บ ค่ารีเทอร์นแอดเดรส (return address) ตอนที่ทำคำสั่งในโปรแกรมย่อยเสร็จ ตัวอย่าง Assembly Relative Mnemonic Program : BCT BR LTORG 3, *-16 14 24 28 BCR 3,6(0,15) 15,14 21/06/47 Machine Structure, Machine Language, and Assembly Language
2.3.2 ตัวอย่างการใช้ Literals A 2, =F’49’ Arguments คือ =F’49’ เป็น Literals ซึ่งทำให้เกิดการสร้างที่เก็บข้อมูล บรรจุ 49 21/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language 21/06/47 Machine Structure, Machine Language, and Assembly Language