2.2.3 การแก้ไขแอดเดรส โดยการใ

Download Report

Transcript 2.2.3 การแก้ไขแอดเดรส โดยการใ

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