2.2 ภาษาเครื่อง (Machine language) จากรูป แสดงลำดับของเลข 0 และ 1 นำไปใช้งานโดย CPU เป็นคำสั่ง Load ข้อมูล และ Mnemonic form ที่ใช้แทนคำสั่งดังกล่าวนี้ 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language ตัวอย่าง จงเขียนโปรแกรม ที่บวกตัวเลข 49 กับข้อมูลแบบ Fullword ที่เก็บเรียงแถวติดกัน 10 ตัว โดยอยู่ภายใต้ข้อสมมุติฐานต่อไปนี้ ข้อสมมุติฐานที่ 1: เลข 10 จำนวน ที่จะนำมาบวก เป็นแบบ Fullword เรียงติดกัน มีแอดเดรสเริ่มต้นแบบ Absolute ที่ 952 ข้อสมมุติฐานที่ 2: โปรแกรมอยู่ในหน่วยความจำ เริ่มต้นที่แอดเดรส 48 ข้อสมมุติฐานที่ 3: เลข 49 เป็นข้อมูลแบบ Fullword อยู่ที่ Absolute แอดเดรส 948 ข้อสมมุติฐานที่ 4: รีจิสเตอร์ 1 บรรจุข้อมูล 48 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Hexa Decimal Instructions : 948 952 956 960 964 968 972 976 980 984 988 900 904 908 912 916 920 924 928 932 936 940 00000031 00000005 00000007 00000009 0000000C 00000008 0000000A 0000000F 00000100 00000003 00000004 49 5 7 9 12 8 10 15 16 3 4 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Hexa Decimal Instructions : 948 952 956 960 964 968 972 976 980 984 988 900 904 908 912 916 920 924 928 932 936 940 00000031 00000036 00000007 00000009 0000000C 00000008 0000000A 0000000F 00000100 00000003 00000004 49 54 7 9 12 8 10 15 16 3 4 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Hexa Decimal Instructions : 948 952 956 960 964 968 972 976 980 984 988 900 904 908 912 916 920 924 928 932 936 940 00000031 00000036 00000038 00000009 0000000C 00000008 0000000A 0000000F 00000100 00000003 00000004 49 54 56 9 12 8 10 15 16 3 4 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Hexa Decimal Instructions 48 52 56 : 948 952 956 960 964 968 972 976 980 984 988 4 8 900 904 908 912 916 920 924 928 932 936 940 58201388 5A201384 5201388 00000031 00000005 00000007 00000009 0000000C 00000008 0000000A 0000000F 00000100 00000003 00000004 L 2,904(0,1) A 2,900(0,1) ST 2,904(0,1) 49 5 7 9 12 10 15 16 3 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Hexa Decimal Instructions 48 52 56 : 948 952 956 960 964 968 972 976 980 984 988 4 8 900 904 908 912 916 920 924 928 932 936 940 58201388 5A201384 5201388 00000031 00000036 00000007 00000009 0000000C 00000008 0000000A 0000000F 00000100 00000003 00000004 L 2,904(0,1) A 2,900(0,1) ST 2,904(0,1) 49 54 7 9 12 10 15 16 3 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Hexa Decimal Instructions 48 52 56 60 64 68 : 948 952 956 960 964 968 972 976 980 984 988 4 8 12 16 20 900 904 908 912 916 920 924 928 932 936 940 58201388 5A201384 5201388 5820138C 5020138C 00000031 00000036 00000007 00000009 0000000C 00000008 0000000A 0000000F 00000100 00000003 00000004 L 2,904(0,1) A 2,900(0,1) ST 2,904(0,1) L 2,908(0,1) ST 2,908(0,1) 49 54 7 9 10 15 3 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Hexa Decimal Instructions 48 52 56 60 64 68 : 948 952 956 960 964 968 972 976 980 984 988 4 8 12 16 20 900 904 908 912 916 920 924 928 932 936 940 58201388 5A201384 5201388 5820138C 5020138C 00000031 00000036 00000038 00000009 0000000C 00000008 0000000A 0000000F 00000100 00000003 00000004 L 2,904(0,1) A 2,900(0,1) ST 2,904(0,1) L 2,908(0,1) ST 2,908(0,1) 49 54 9 10 15 3 13/06/47 Machine Structure, Machine Language, and Assembly Language
2.2.1 หนทางยาวไกล ไม่มีลูปวนซ้ำ (Long Way, No Looping) ปัญหาของโปรแกรมที่แล้ว 1) ถ้าเราต้องการโปรเซสข้อมูล 300 ตัว (แทนที่จะเป็น 10 ตัว เหมือนครั้งแรก) ที่เก็บสำหรับคำสั่ง จะเป็น (3 คำสั่ง) x (ความยาวของแต่ละคำสั่ง) x (จำนวนข้อมูลทั้งหมด) = 3,600 ไบท์ ดังนั้น คำสั่งก็จะ ทับข้อมูลของเราในหน่วยความจำ 13/06/47 Machine Structure, Machine Language, and Assembly Language
ปัญหาของโปรแกรมที่แล้ว (ต่อ) 2) ระยะทางจาก คำสั่งแรก จนถึงข้อมูลตัวสุดท้าย ควรจะเป็น 4,800 ไบท์ แต่เนื่องจาก ข้อมูลมันเอง กินพื้นที่ 4 x 300 = 1,200 ไบท์ การใช้รีจิสเตอร์ เป็น Base รีจิสเตอร์ จึงเป็นไปไม่ได้ที่จะ Access ข้อมูล ตั้งแต่หัวถึงท้ายพร้อมกัน ถ้าเขียนภาษาเครื่อง และจะต้องนึกอยู่เสมอว่าตัวเลขที่มากที่สุด ที่เป็นไปได้คือ 212-1 หรือ 4,095 ซึ่งอาจไม่สามารถ Access ข้อมูลได้ทั่วถึงทั้งหมดพร้อมกัน 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Relocation ถ้าโปรแกรมก่อนหน้านี้ ถูก Load ไปไว้ที่แอดเดรส 336 (แทนที่จะเป็นแอดเดรส 48 เหมือนก่อนหน้า) มันยังคงทำงานได้อย่างถูกต้อง ถ้าค่าในรีจิสเตอร์ 1 ถูกเปลี่ยนให้เป็น 336 การย้ายโปรแกรมไปยังตำแหน่งต่างๆ ในหน่วยความจำ เรียกว่า การ Relocation โดยปกติ Base รีจิสเตอร์ จะถูกใช้ในการ Relocation นี้ 13/06/47 Machine Structure, Machine Language, and Assembly Language
2.2.2 การเปลี่ยนค่าแอดเดรส โดยการใช้คำสั่งเสมือนเป็นข้อมูล 2.2.2 การเปลี่ยนค่าแอดเดรส โดยการใช้คำสั่งเสมือนเป็นข้อมูล สมมติว่า มีนักศึกษาของ MIT คนหนึ่งต้องการออกเดทกับหญิงสาว ขั้นตอนการออกเดทของเขา อาจจะเขียนเป็นโปรแกรมได้ดังนี้ 1 2 3 4 5 เช่าสูท เหน็บ Slide rule โทรหา Nancy ถ้าถูกปฏิเสธ เปลี่ยน 3 เป็น Marry กลับไปทำ 1 13/06/47 Machine Structure, Machine Language, and Assembly Language
2.2.2 การเปลี่ยนค่าแอดเดรส โดยการใช้คำสั่งเสมือนเป็นข้อมูล (ต่อ) 2.2.2 การเปลี่ยนค่าแอดเดรส โดยการใช้คำสั่งเสมือนเป็นข้อมูล (ต่อ) สมมติว่า มีนักศึกษาของ MIT คนหนึ่งต้องการออกเดทกับหญิงสาว ขั้นตอนการออกเดทของเขา อาจจะเขียนเป็นโปรแกรมได้ดังนี้ 1 2 3 4 5 เช่าสูท เหน็บ Slide rule โทรหา Marry ถ้าถูกปฏิเสธ เปลี่ยน 3 เป็น Jane กลับไปทำ 1 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Instructions Comments 48 52 56 60 64 68 72 76 80 : 944 948 952 956 960 964 968 972 976 980 984 988 4 8 12 16 20 24 28 32 896 900 904 908 912 916 920 924 928 932 936 940 L 2,904(0,1) A 2,900(0,1) ST 2,904(0,1) L 2,0 (0,1) A 2,896(0,1) ST 2,0 (0,1) L 2,8 (0,1) ST 2,8 (0,1) Branch to 0 49 5 7 9 10 15 3 บวก 49 ให้กับ 904 เพิ่ม Load อีก 4 เพิ่ม Store อีก 4 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Instructions Comments 48 52 56 60 64 68 72 76 80 : 944 948 952 956 960 964 968 972 976 980 984 988 4 8 12 16 20 24 28 32 896 900 904 908 912 916 920 924 928 932 936 940 L 2,904(0,1) A 2,900(0,1) ST 2,904(0,1) L 2,0 (0,1) A 2,896(0,1) ST 2,0 (0,1) L 2,8 (0,1) ST 2,8 (0,1) Branch to 0 49 5 7 9 10 15 3 บวก 49 ให้กับ 904 เพิ่ม Load อีก 4 เพิ่ม Store อีก 4 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Instructions Comments 48 52 56 60 64 68 72 76 80 : 944 948 952 956 960 964 968 972 976 980 984 988 4 8 12 16 20 24 28 32 896 900 904 908 912 916 920 924 928 932 936 940 L 2,904(0,1) A 2,900(0,1) ST 2,904(0,1) L 2,0 (0,1) A 2,896(0,1) ST 2,0 (0,1) L 2,8 (0,1) ST 2,8 (0,1) Branch to 0 49 54 7 9 10 15 3 บวก 49 ให้กับ 904 เพิ่ม Load อีก 4 เพิ่ม Store อีก 4 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Instructions Comments 48 52 56 60 64 68 72 76 80 : 944 948 952 956 960 964 968 972 976 980 984 988 4 8 12 16 20 24 28 32 896 900 904 908 912 916 920 924 928 932 936 940 L 2,904(0,1) A 2,900(0,1) ST 2,904(0,1) L 2,0 (0,1) A 2,896(0,1) ST 2,0 (0,1) L 2,8 (0,1) ST 2,8 (0,1) Branch to 0 49 54 7 9 10 15 3 บวก 49 ให้กับ 904 เพิ่ม Load อีก 4 เพิ่ม Store อีก 4 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Instructions Comments 48 52 56 60 64 68 72 76 80 : 944 948 952 956 960 964 968 972 976 980 984 988 4 8 12 16 20 24 28 32 896 900 904 908 912 916 920 924 928 932 936 940 L 2,908(0,1) A 2,900(0,1) ST 2,904(0,1) L 2,0 (0,1) A 2,896(0,1) ST 2,0 (0,1) L 2,8 (0,1) ST 2,8 (0,1) Branch to 0 49 54 7 9 10 15 3 บวก 49 ให้กับ 904 เพิ่ม Load อีก 4 เพิ่ม Store อีก 4 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Instructions Comments 48 52 56 60 64 68 72 76 80 : 944 948 952 956 960 964 968 972 976 980 984 988 4 8 12 16 20 24 28 32 896 900 904 908 912 916 920 924 928 932 936 940 L 2,908(0,1) A 2,900(0,1) ST 2,904(0,1) L 2,0 (0,1) A 2,896(0,1) ST 2,0 (0,1) L 2,8 (0,1) ST 2,8 (0,1) Branch to 0 49 54 7 9 10 15 3 บวก 49 ให้กับ 904 เพิ่ม Load อีก 4 เพิ่ม Store อีก 4 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Instructions Comments 48 52 56 60 64 68 72 76 80 : 944 948 952 956 960 964 968 972 976 980 984 988 4 8 12 16 20 24 28 32 896 900 904 908 912 916 920 924 928 932 936 940 L 2,908(0,1) A 2,900(0,1) ST 2,908(0,1) L 2,0 (0,1) A 2,896(0,1) ST 2,0 (0,1) L 2,8 (0,1) ST 2,8 (0,1) Branch to 0 49 54 7 9 10 15 3 บวก 49 ให้กับ 904 เพิ่ม Load อีก 4 เพิ่ม Store อีก 4 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language Absolute address Relative Address Instructions Comments 48 52 56 60 64 68 72 76 80 : 944 948 952 956 960 964 968 972 976 980 984 988 4 8 12 16 20 24 28 32 896 900 904 908 912 916 920 924 928 932 936 940 L 2,908(0,1) A 2,900(0,1) ST 2,908(0,1) L 2,0 (0,1) A 2,896(0,1) ST 2,0 (0,1) L 2,8 (0,1) ST 2,8 (0,1) Branch to 0 49 54 9 10 15 3 บวก 49 ให้กับ 904 เพิ่ม Load อีก 4 เพิ่ม Store อีก 4 13/06/47 Machine Structure, Machine Language, and Assembly Language
แอดเดรส เปลี่ยนได้อย่างไร เพื่อที่จะดูการทำงานของโปรแกรม เราต้องนึกอยู่เสมอว่า ค่าที่บรรจุอยู่ในตำแหน่ง 48 (ดังรูปที่ 2.1 ไม่ใช่ L 2, 904(0,1) แต่มันเป็น 13/06/47 Machine Structure, Machine Language, and Assembly Language
Machine Structure, Machine Language, and Assembly Language ปัญหา การใช้คำสั่งเป็นเสมือนข้อมูลไม่ใช่เทคนิคการเขียนโปแกรมที่ดี เพราะว่าในระยะยาว การแก้ไขบำรุงรักษา (Maintenance) โปรแกรมจะลำบาก มันจะยากต่อการทำความเข้าใจว่าเริ่มแรกเลย ผู้เขียนต้องการจะทำอะไร ในกรณีของระบบ Multiprocessing (หลายงาน บนระบบที่มีโปรเซสเซอร์มากกว่า 1 ตัว ทำงานพร้อมกัน) มันจะขัดแย้งกับกับกฎของ โค้ดบริสุทธิ์ (Pure code) หรือที่เรียกว่า เข้าใหม่ได้หลายครั้ง (Re-entrant code) เป็นโค้ดที่ ไม่มีการแก้ไขตัวมันเอง 13/06/47 Machine Structure, Machine Language, and Assembly Language