250 likes | 329 Views
2.2.3 การแก้ไขแอดเดรส โดยการใช้อินเด็กรีจิสเตอร์. การแก้ปัญหาที่ได้ผลดีที่สุด คือการใช้ อินเด็กรีจิสเตอร์ เมื่อต้องมีการแก้ไขแอดเดรส แอดเดรสนั้น มีค่าเท่ากับ ค่าของเบสรีจิสเตอร์ บวกด้วยค่าของอินเด็กรีจิสเตอร์ บวกด้วยค่าของอ๊อฟเซท
E N D
2.2.3 การแก้ไขแอดเดรส โดยการใช้อินเด็กรีจิสเตอร์ • การแก้ปัญหาที่ได้ผลดีที่สุด คือการใช้ อินเด็กรีจิสเตอร์ • เมื่อต้องมีการแก้ไขแอดเดรส แอดเดรสนั้น มีค่าเท่ากับ ค่าของเบสรีจิสเตอร์ บวกด้วยค่าของอินเด็กรีจิสเตอร์ บวกด้วยค่าของอ๊อฟเซท • เรายังใช้ชุดของ 3 คำสั่งเดิม คือคำสั่ง Load คำสั่งบวก 49 และคำสั่งเก็บข้อมูล เราใช้คำสั่งวนลูปรอบ 3 คำสั่งนั้น • เมื่อมีการเปลี่ยนค่าในตัวอินเด็กรีจิสเตอร์ทีละ 4 ค่าแอดเดรสของคำสั่ง Load และ Store ก็จะเปลี่ยนตามไปโดยปริยาย Machine Structure, Machine Language, and Assembly Language
คำสั่งลูปวน ในหัวข้อนี้ เราจะกล่าวถึงการใช้คำสั่งลูปวนในภาษาเครื่อง 2 วิธี โดยการตั้งข้อสมมุติฐานเพิ่มดังนี้ • สมมุติฐานที่ 6. ที่ Relative address เก็บค่าของ 10 • สมมุติฐานที่ 7. ที่ Relative address เก็บค่าของ 1 (สำหรับวิธีแรกเท่านั้น) Machine Structure, Machine Language, and Assembly Language
วิธีที่ 1 • ภายหลังจากที่ 4 คำสั่งพื้นฐานแรกทำงาน มันจะเกิด Sequence ของคำสั่ง ที่มีการลบ 1 ออกจากที่เก็บหน่วยความจำชั่วคราว และตรวจสอบดูว่า ค่าที่เก็บอยู่ยังเป็นบวกหรือไม่ ถ้าเป็นบวก มันก็จะกลับขึ้นไปทำงานที่Relative address ตำแหน่งที่ 2 Machine Structure, Machine Language, and Assembly Language
วิธีที่ 2 • คำสั่ง BCT (Branch on Count ดังแสดงในรูป 2.13) จะทำหน้าที่ให้โปรแกรมวนจนครบลูป • รีจิสเตอร์ 3 จะมีค่าลดลงทีละ 1 จนมีค่าเหลือ 0 ในขณะที่ค่าของ รีจิสเตอร์ 3 เป็นบวก ค่าของแอดเดรส คือ 6 บวกกับค่าของ รีจิสเตอร์ 1 เมื่อค่าของมันลดลงถึง 0 ก็จะไม่มีการวนลูปอีก • คอมพิวเตอร์เกือบทุกระบบ มีการใช้คำสั่งประเภท Branch เพื่อวนลูปแบบนี้ Machine Structure, Machine Language, and Assembly Language
โปรแกรมที่ 2.13 • เราสามารถลดขนาดของโปรแกรม โดยที่ป็นชุดคำสั่ง 26 ไบท์ และชุดข้อมูล 52 ไบท์ รวมเป็น 78 ไบท์ ซึ่งโปรแกรมแรกของเรา ใช้ชุดคำสั่ง 120 ไบท์ และชุดข้อมูล 44 ไบท์ รวมเป็น 164 ไบท์ ทำให้ประหยัดเนื้อที่ไปถึง 86 ไบท์ หมายเหตุ โปรแกรมสามารถเคลื่อนย้ายไปวางยังตำแหน่งต่างๆ ของหน่วยความจำ (เช่น 400 แทนที่จะเป็น 48) โดยเพียงแค่เปลี่ยนค่าของรีจิสเตอร์ 1 เท่านั้น Machine Structure, Machine Language, and Assembly Language
2.3 ภาษาแอสเซมบลี้ เมื่อผู้ใช้ต้องการติดต่อกับคอมพิวเตอร์ เขาสามารถติดต่อกับคอมพิวเตอร์ได้หลายภาษา Machine Structure, Machine Language, and Assembly Language
ข้อดี ของภาษาแอสเซมบลี้ • มันเป็น Mnemonic เช่น เราเขียน ST แทนที่จะเขียน 01010000 สำหรับคำสั่งเก็บข้อมูล • ใช้สัญลักษณ์แทนแอดเดรส แทนที่จะเป็น Absolute • อ่านเข้าใจได้ง่าย • การกำหนดข้อมูลให้กับโปรแกรม กระทำได้ง่ายกว่า Machine Structure, Machine Language, and Assembly Language
ข้อเสีย ของภาษาแอสเซมบลี้ • ต้องการตัวแอสเซมเบลอร์ แปลง Source program ไปเป็น Object code Machine Structure, Machine Language, and Assembly Language
2.3.1 โปรแกรมที่ใช้ภาษาแอสเซมบลี้ • ข้อสมมุติฐานต่างๆ ที่กำหนดไว้สำหรับการเขียนภาษาเครื่อง ต้องถูกยกเลิก ตัวอย่างข้อสมมุติฐานอันหนึ่ง ก็คือ ค่าแอดเดรส เริ่มต้น ในหน่วยความจำอยู่ที่ Absolute แอดเดรส 48 ในฐานะของโปรแกรมเมอร์ เราไม่สามารถรู้ล่วงหน้าได้ว่า โปรแกรมของเราจะถูกโหลดไปวางไว้ที่ไหนในหน่วยความจำ ดังนั้นจึงเป็นหน้าที่ของเรา ที่จะต้องโหลดเบสรีจิสเตอร์ ด้วยแอดเดรสโปรแกรมของเราในหน่วยความจำ ก่อนที่เราจะให้โปรแกรมทำงาน คำสั่ง BALR เป็นกลไกหนึ่ง ที่ใช้ในการโหลด เบสรีจิสเตอร์ Machine Structure, Machine Language, and Assembly Language
คำสั่ง Pseudo-op • DC คำสั่งการกำหนดตัวคงที่ (Define constant) • DS คำสั่งการกำหนดที่เก็บ (Define storage) • F คำสั่งวางค่า ตัวเลข เช่น 10, 4, และ 49 ในหน่วยความจำ ติดต่อกัน แบบ Fullword ตัวอย่าง เช่น DS 100F ทำให้ ตัวแอสเซมเบลอร์ จองที่เก็บข้อมูลแบบ Fullword จำนวน 100 ที่ Machine Structure, Machine Language, and Assembly Language
คำสั่ง USING • USING เป็น Pseudo-op ที่บอกตัวแอสเซมเบลอร์ว่า รีจิสเตอร์อะไร ใช้เป็นเบสรีจิสเตอร์ และค่าของเบสรีจิสเตอร์เป็นเท่าไร ตัวอย่าง Machine Structure, Machine Language, and Assembly Language
คำสั่ง BALR • BALR เป็นคำสั่งที่ใช้โหลดรีจิสเตอร์ด้วยแอดเดรสถัดไป และกระโดดไปที่แอดเดรสในฟิลด์ที่ 2 เมื่อ Operand ตัวที่ 2 เป็นรีจิสเตอร์ 0 (ดังแสดง) มันจะทำงานคำสั่งถัดไป ตัวอย่าง Machine Structure, Machine Language, and Assembly Language
คำสั่ง START • START เป็น Pseudo-op บอกตัวแอสเซมเบลอร์ว่า โปรแกรมจะเริ่มต้นทำงานที่ตำแหน่งไหน และยอมให้โปรแกรมเมอร์ ตั้งชื่อโปรแกรมอีกด้วย ตัวอย่าง Machine Structure, Machine Language, and Assembly Language
คำสั่ง END • END เป็น Pseudo-op ที่บอกตัวแอสเซมเบลอร์ว่า คำสั่งสุดท้ายของโปรแกรมมาถึงแล้ว เครื่องจะหยุดทำงานโปรแกรมนี้ Machine Structure, Machine Language, and Assembly Language
คำสั่ง BR 14 • เป็นคำสั่งที่โดด (Branch) ไปทำยังตำแหน่งแอดเดรสที่บรรจุอยู่ใน รีจิสเตอร์ 14 • ตามข้อตกลงทั่วไป ตอนเรียกใช้โปรแกรมย่อย รีจิสเตอร์ 14 จะใช้เก็บ ค่ารีเทอร์นแอดเดรส (return address) ตอนที่ทำคำสั่งในโปรแกรมย่อยเสร็จ • ตัวอย่าง Machine Structure, Machine Language, and Assembly Language
2.3.2 ตัวอย่างการใช้ Literals ตัวอย่าง A 2, =F’49’ Arguments คือ =F’49’ เป็น Literals ซึ่งทำให้เกิดการสร้างที่เก็บข้อมูล บรรจุ 49 Machine Structure, Machine Language, and Assembly Language