12
เอกสารคาสอนรายวิชา 2301274 ระบบคอมพิวเตอร์ คณะวิทยาศาสตร์ จุฬาลงกรณ์มหาวิทยาลัย | 119 บทที่ 11 แอลซีทรีโพรเซสเซอร์ วัตถุประสงค์ของการเรียนในบทนี อธิบายสถาปัตยกรรมและการทางานของแอลซีทรีโพรเซสเซอร์ (LC-3 Processor) อธิบายชุดคาสั ่ง (instruction set) ของแอลซีทรีโพรเซสเซอร์ (LC-3 Processor) ในบทนี ้เราจะมาดูโปรเซสเซอร์อีกตัวนึงที ่ชื ่อว่าแอลซีทรี (Little Computer 3 หรือ LC-3) ที ่มีสถาปัตยกรรม ชุดคาสั ่งต่างจากสแตกซีพียู (Stack CPU) โดยสิ ้นเชิง ที ่จริงแล้วยังมีโปรเซสเซอร์อีกหลายตัวที ่มีสถาปัตยกรรม แตกต่างกัน แต่เนื ่องจากเวลามีจากัด ผมจึงเลือกสแตกซีพียูมาให้ศึกษาก่อน เพราะฮาร์ดแวร์มีขนาดเล็กและมี ชุดคาสั ่งไม่มาก ทาให้ศึกษาลงรายละเอียดได้ทั ้งฮาร์ดแวร์และซอฟต์แวร์ แต่แอลซีทรีมีฮาร์ดแวร์ขนาดใหญ่ เกินไป ไม่เหมาะจะใช้สอนแบบลงรายละเอียดให้ดูจนถึงระดับหน่วยควบคุม (control unit) ดังนั ้นในบทนี ้ผมจะ ไม่เน้นที ่ฮาร์ดแวร์ของแอลซีทรี เพราะถือว่าได้สอนเรื ่องฮาร์ดแวร์ไปแล้วในบทสแตกซีพียู แต่จะเน้นที สถาปัตยกรรมชุดคาสั ่งและการเขียนโปรแกรมที ่จะโยงไปถึงเนื ้อหาในวิชา 2301371 ระบบปฏิบัติการ (Operating Systems) ผู ้พัฒนาแอลซีทรีโพรเซสเซอร์คือ Yale N. Patt และ Sanjay J. Patel แอลซีทรีถูกออกแบบมาสาหรับการสอน มากกว่าที ่จะเอาไปใช้ในอุตสาหกรรมจริงๆ เนื ่องจากการออกแบบไมโครโพรเซสเซอร์เชิงพาณิชย์จาเป็นต้อง ปรับแต่งสมรรถนะในหลายๆ จุด เพื ่อให้มีสมรรถนะเหนือกว่าผลิตภัณฑ์อื ่นๆ ในท้องตลาด ทาให้การออกแบบมี ความซับซ้อนมาก นอกจากนี ้ไมโครโพรเซสเซอร์เชิงพาณิชย์ยังเป็นความลับทางธุรกิจที ่ไม่เปิดเผยสถาปัตยกรรม การออกแบบภายใน แต่เปิดเผยเฉพาะชุดคาสั ่งเพื ่อให้โปรแกรมได้เท่านั ้น เนื ้อหาที ่เกี ่ยวกับแอลซีทรีส่วนใหญ่ เรียบเรียงจากหนังสือของ Patt และ Patel คือ Introduction to Computing Systems: From bits & gates to C & beyond, McGraw-Hill, 2003 นอกจากนี ้แบบฝึกหัดบางส่วนก็ประยุกต์มาจากหนังสือของ Patt และ Patel ใน การฝึกเขียนโปรแกรมให้นิสิตดาวน์โหลด LC3 Simulator จากเว็บไซต์ของรายวิชา คุณลักษณะโดยทั่วๆ ไปของแอลซีทรี แอลซีทรีมีคุณลักษณะทั ่วๆ ไปดังนี เป็นโปรเซสเซอร์แบบ 16 บิต มีสถาปัตยกรรมแบบโหลดสโตร์ (load/store architecture) โพรเซสเซอร์ที ่มีสถาปัตยกรรมแบบ นี ้จะโหลด (load) ข้อมูลจากหน่วยความจาขึ ้นมาเก็บไว ้บนเรจิสเตอร์ก่อน แล้วค่อยประมวลผล เช่น บวกค่าในเรจิสเตอร์ทั ้งสองเข ้าด้วยกัน แล้วเก็บในเรจิสเตอร์ตัวที ่สาม จากนั ้นจึงเขียน (store) ค่าจากเรจิสเตอร์ผลลัพธ์ลงหน่วยความจา ทั ้งหมดนี ้ใช ้หลายคาสั ่งผสมกัน เช่น load, add, store เป็นต้น จะไม่มีคาสั ่งเดียวสาหรับบวกค่าสองค่าที ่อยู ่ในหน่วยความจาแล้วเก็บผลลัพธ์ ลงหน่วยความจาด้วย สถาปัตยกรรมแบบโหลดสโตร์จะทาให้โปรแกรมที ่เป็นภาษาเครื ่องยาวมาก แต่มีข้อดีที ่ทาการคานวณแบบสายท่อ (pipeline) และ superscalar ได้ (รอดูในบทต่อๆ ไป) มีเรจิสเตอร์สาหรับใช้งานทั ่วไป (general purpose register) ทั ้งหมด 8 ตัว แต่ละตัวเก็บค่าได้ 16 บิต เราอ้างถึงเรจิสเตอร์ตามเบอร์นับจาก 0 ไปจนถึง 7

บทที่ 11 แอลซีทรีโพรเซสเซอร์pioneer.netserv.chula.ac.th/~achatcha/2301274/MyBook_11...บทท 11 แอลซ ทร โพรเซสเซอร

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: บทที่ 11 แอลซีทรีโพรเซสเซอร์pioneer.netserv.chula.ac.th/~achatcha/2301274/MyBook_11...บทท 11 แอลซ ทร โพรเซสเซอร

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 119

บทท 11 แอลซทรโพรเซสเซอร

วตถประสงคของการเรยนในบทน

อธบายสถาปตยกรรมและการท างานของแอลซทรโพรเซสเซอร (LC-3 Processor)

อธบายชดค าสง (instruction set) ของแอลซทรโพรเซสเซอร (LC-3 Processor)

ในบทน เราจะมาดโปรเซสเซอรอกตวนงทชอวาแอลซทร (Little Computer 3 หรอ LC-3) ทมสถาปตยกรรม

ชดค าสงตางจากสแตกซพย (Stack CPU) โดยสนเชง ทจรงแลวยงมโปรเซสเซอรอกหลายตวทมสถาปตยกรรม

แตกตางกน แตเนองจากเวลามจ ากด ผมจงเลอกสแตกซพยมาใหศกษากอน เพราะฮารดแวรมขนาดเลกและม

ชดค าสงไมมาก ท าใหศกษาลงรายละเอยดไดทงฮารดแวรและซอฟตแวร แต แอลซทรมฮารดแวรขนาดใหญ

เกนไป ไมเหมาะจะใชสอนแบบลงรายละเอยดใหดจนถงระดบหนวยควบคม (control unit) ดงนนในบทน ผมจะ

ไมเนนทฮารดแวรของแอลซทร เพราะถอวาไดสอนเร องฮารดแวรไปแลวในบทสแตกซพย แตจะเนนท

สถาปตยกรรมชดค าสงและการเขยนโปรแกรมทจะโยงไปถงเน อหาในวชา 2301371 ระบบปฏบตการ

(Operating Systems)

ผ พฒนาแอลซทรโพรเซสเซอรคอ Yale N. Patt และ Sanjay J. Patel แอลซทรถกออกแบบมาส าหรบการสอน

มากกวาทจะเอาไปใชในอตสาหกรรมจรงๆ เนองจากการออกแบบไมโครโพรเซสเซอรเชงพาณชยจ าเปนตอง

ปรบแตงสมรรถนะในหลายๆ จด เพอใหมสมรรถนะเหนอกวาผลตภณฑอนๆ ในทองตลาด ท าใหการออกแบบม

ความซบซอนมาก นอกจากน ไมโครโพรเซสเซอรเชงพาณชยยงเปนความลบทางธรกจทไมเปดเผยสถาปตยกรรม

การออกแบบภายใน แตเปดเผยเฉพาะชดค าสงเพอใหโปรแกรมไดเทานน เน อหาทเกยวกบแอลซทรสวนใหญ

เรยบเรยงจากหนงสอของ Patt และ Patel คอ Introduction to Computing Systems: From bits & gates to C &

beyond, McGraw-Hill, 2003 นอกจากน แบบฝกหดบางสวนกประยกตมาจากหนงสอของ Patt และ Patel ใน

การฝกเขยนโปรแกรมใหนสตดาวนโหลด LC3 Simulator จากเวบไซตของรายวชา

คณลกษณะโดยทวๆ ไปของแอลซทร

แอลซทรมคณลกษณะทวๆ ไปดงน

เปนโปรเซสเซอรแบบ 16 บต

มสถาปตยกรรมแบบโหลดสโตร (load/store architecture) โพรเซสเซอรทมสถาปตยกรรมแบบ

น จะโหลด (load) ขอมลจากหนวยความจ าขนมาเกบไวบนเรจสเตอรกอน แลวคอยประมวลผล

เชน บวกคาในเรจสเตอรทงสองเขาดวยกน แลวเกบในเรจสเตอรตวทสาม จากนนจงเขยน

(store) คาจากเรจสเตอรผลลพธลงหนวยความจ า ทงหมดน ใชหลายค าสงผสมกน เชน load,

add, store เปนตน จะไมมค าสงเดยวส าหรบบวกคาสองคาทอยในหนวยความจ าแลวเกบผลลพธ

ลงหนวยความจ าดวย สถาปตยกรรมแบบโหลดสโตรจะท าใหโปรแกรมทเปนภาษาเครองยาวมาก

แตมขอดทท าการค านวณแบบสายทอ (pipeline) และ superscalar ได (รอดในบทตอๆ ไป)

มเรจสเตอรส าหรบใชงานทวไป (general purpose register) ทงหมด 8 ตว แตละตวเกบคาได

16 บต เราอางถงเรจสเตอรตามเบอรนบจาก 0 ไปจนถง 7

Page 2: บทที่ 11 แอลซีทรีโพรเซสเซอร์pioneer.netserv.chula.ac.th/~achatcha/2301274/MyBook_11...บทท 11 แอลซ ทร โพรเซสเซอร

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 120

มหนวยความจ า 216

= 65,536 ชอง ชองละ 16 บตทงโปรแกรม (program) และขอมล (data)

อยบนหนวยความจ าชนเดยวกน สงเกตวามหนวยความจ าชนเดยว ไมเหมอนสแตกซพยทม

หนวยความจ าหลายชนทง MEM, DS, RS แยกตามประเภทของของทเกบ

โหมดเลขทอย (Addressing Mode)

แอลซทรโพรเซสเซอรมโหมดเลขทอยดงน (จะอธบายในหวขอสถาปตยกรรมชดค าสง)

Immediate

Register

PC-relative

Indirect

Base + offset

รหสเงอนไข (Condition Code)

แอลซทรโพรเซสเซอรมรหสเงอนไข 3 บต (จะอธบายในหวขอสถาปตยกรรมชดค าสง)

N (negative)

Z (zero)

P (positive)

สถาปตยกรรมชดค าสง (Instruction Set Architecture)

ทกค าสงของแอลซทร รวมตวด าเนนการ (opcode) กบตวถกด าเนนการ (operand) มความยาวคงทคอ 16 บต

ตางจากค าสงของสแตกซพยทสนบางยาวบาง เชน ค าสง LIT ใชท 2 ไบต ค าสง ADD ใชท 1 ไบต เปนตน ดรปท

11.1

รปท 11.1 ชดค าสงของแอลซทร

ค าสงทมเครองหมาย + จะเปลยนรหสเงอนไข (condition code) ทงสามบตคอ N, Z, P ตามผลลพธทเกดขน

จากค าสงนน เชน ถาผลลพธเปนบวก NZP จะมคาเทากบ 001 เปนตน

Page 3: บทที่ 11 แอลซีทรีโพรเซสเซอร์pioneer.netserv.chula.ac.th/~achatcha/2301274/MyBook_11...บทท 11 แอลซ ทร โพรเซสเซอร

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 121

ตวยอของสวนประกอบตางๆ ในแอลซทรมดงน

IR Instruction register

PC Program counter

R Register (R[0] ถง R[7])

N, Z, P Condition code (neg, zero, pos)

M Memory (M[0] ถง M[65535])

แตละค าสงจะท างานดงน (DR / SR ยอมาจาก Destination Register / Source Register, ดานซายมอคอค าสง

ดานขวามอคอผลลพธทเกดขนจากค าสงนน)

ค าสง Add (Register & Immediate mode)

ADD+ (IR[5] = 0) R[DR] = R[SR1] + R[SR2]

ADD+ (IR[5] = 1) R[DR] = R[SR1] + imm5 (2’s com)

ค าสง And (Register & Immediate mode)

AND+ (IR[5] = 0) R[DR] = R[SR1] & R[SR2]

AND+ (IR[5] = 1) R[DR] = R[SR1] & imm5 (เตม 0 หนา imm)

ค าสง Branch (PC-relative mode)

BR PC = PC + PCoffset9 (2’s com)

IR[11:9] เปนการเลอก N, Z, P มาสรางเงอนไข เชน 011 คอ ≥ 0

ถาเงอนไขเปนจรงถงจะท า PC = PC + PCoffset9 ถาไมจรงกเลอนไปท าค าสงถดไป

ค าสง Jump (Register mode)

JMP PC = R[BaseR]

ค าสง Jump Subroutine (PC-relative mode)

JSR R[7] = PC

PC = PC + PCoffset11 (2’s com)

ค าสง Jump Subroutine (Register mode)

JSRR R[7] = PC, PC = R[BaseR] (unsigned int)

ค าสง Load (PC-relative, Indirect, Base + offset mode)

LD+ R[DR] = M[PC + PCoffset9] (2’s com)

LDI+ R[DR] = M[M[PC + PCoffset9]] (2’s com)

LDR+ R[DR] = M[R[BaseR] + offset6] (2’s com)

ค าสง Load Effective Address (PC-relative mode)

LEA+ R[DR] = PC + PCoffset9 (2’s com)

ค าสง Not (Register mode)

NOT R[DR] = ~R[SR]

Page 4: บทที่ 11 แอลซีทรีโพรเซสเซอร์pioneer.netserv.chula.ac.th/~achatcha/2301274/MyBook_11...บทท 11 แอลซ ทร โพรเซสเซอร

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 122

ค าสง Return from Subroutine (Register mode)

RET PC = R[7]

ค าสง Return from Interrupt (Register mode)

RTI PC = R[7], change from supervisor (privileged) mode to user mode

ค าสง Store (PC-relative, Indirect, Base + offset mode)

ST M[PC + PCoffset9] = R[SR] (2’s com)

STI M[M[PC + PCoffset9]] = R[SR] (2’s com)

STR M[R[BaseR] + offset6] = R[SR] (2’s com)

ค าสง Trap to Subroutine (Immediate mode)

TRAP R[7] = PC, PC = M[trapvect8] ค าสงน จะไมเปลยน CPU mode

จากโหมดการท างานของแตละค าสงขางตน นสตนาจะพอเดาไดวาแตละโหมดเลขทอย (addressing mode)

หมายถงอะไร แตละโหมดขนอยกบการน าตวถกด าเนนการ (operand) ในแตละค าสงไปใช เชน สมมตวาตวถก

ด าเนนการคอ 5

Immediate คอเอาตวถกด าเนนการไปใชเปนคาคงท 5 ไดทนทเลย

Register คอเอาตวถกด าเนนการไปคนคาเรจสเตอรเบอร 5 (R[5]) มาใช

PC-relative คอเอาตวถกด าเนนการไปใชเปนเลขทอย (address) โดยบวกกบคา PC ณ ปจจบน

เพอคนคา M[PC + 5]

Indirect คอเอาตวถกด าเนนการไปใชเหมอนตวช (pointer) ในภาษาซ เพอคนคา M[M[5]]

Base + offset คอเอาตวถกด าเนนการไปใชเปน offset โดยบวกกบเบสเรจสเตอรเพอคนคา

R[base] + 5

ตวอยางการโปรแกรมดวยภาษาแอสเซมบล

ตวอยางโปรแกรม คณหก (x6)

Line 1: ; comment

Line 2: .ORIG x3050

Line 3: LD R1, SIX

Line 4: LD R2, NUMBER

Line 5: AND R3, R3, #0

Line 6: LOOP ADD R3, R3, R2

Line 7: ADD R1, R1, #-1

Line 8: BRp LOOP

Line 9: HALT

Line 10: NUMBER .BLKW 1

Line 11: SIX .FILL x0006

Line 12: HELLO .STRINGZ “Hello, World!”

Line 13: .END

Page 5: บทที่ 11 แอลซีทรีโพรเซสเซอร์pioneer.netserv.chula.ac.th/~achatcha/2301274/MyBook_11...บทท 11 แอลซ ทร โพรเซสเซอร

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 123

บรรทดท 1 ขอความหลง semicolon เปน comment

บรรทดท 2 บอกวาโปรแกรมเรมตนทเลขทอย x3050

บรรทดท 3 – 9 เปนโปรแกรม ทเอาคาทอยในชอง NUMBER มาคณ 6 โดยท า for-loop

เพอบวกกน 6 ครง และเกบผลลพธไวใน R3

บรรทดท 10 – 11 เรยกวา assembler directives อยในหนวยความจ าถดจากตวโปรแกรม

.BLKW คอ block ขนาด 1 word (2 ไบต หรอ 16 บต)

.FILL คอ คาเรมตนในหนวยความจ าในทนคอ 0x0006

.STRINGZ คอ string ในรหส ASCII และปดทายดวย null เชน Hello, World! คอ

0x0048, 0x0065, 0x006c, …, 0x0000 (x48, x65, x6C คอ H, e, l ในรหส

ASCII ตามล าดบ)

กอนทโปรแกรมน จะท างาน ตองเอาคาท ตองการคณดวยหกไปวางไวท NUMBER กอน จากนนจงเรมให

โปรแกรมท างาน เมอโปรแกรม HALT ผลลพธจะอยใน R3

เวลาหดเขยนโปรแกรมใหใช LC3Edit.exe ในไฟล Zip ท ใหดาวนโหลดจะมไฟล demo.asm เมอเปดดวย

โปรแกรม LC3Edit จะไดดงรปท 10.2

รปท 11.2 โปรแกรม LC3Edit

กดปม asm เพอสงคอมไฟลเปน executable code จะไดไฟล demo.obj เปดดวยโปรแกรม Simulate.exe จะไดดง

รปท 11.3 เราสามารถสง step เพอจ าลองการท างานทละค าสง หรอจะสงใหท าไปจนกวาจะ HALT กได

Page 6: บทที่ 11 แอลซีทรีโพรเซสเซอร์pioneer.netserv.chula.ac.th/~achatcha/2301274/MyBook_11...บทท 11 แอลซ ทร โพรเซสเซอร

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 124

รปท 11.3 โปรแกรม Simulate

เอกสารประกอบ (ส าหรบอานเพมเตม)

อานเพมเตมเกยวกบแอลซทรโพรเซสเซอรไดจากหนงสอเลมน

Yale N. Patt and Sanjay J. Patel, Introduction to Computing Systems: From bits & gates to C &

beyond, McGraw-Hill, 2003.

Page 7: บทที่ 11 แอลซีทรีโพรเซสเซอร์pioneer.netserv.chula.ac.th/~achatcha/2301274/MyBook_11...บทท 11 แอลซ ทร โพรเซสเซอร

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 125

แบบฝกหด

1. จงแปลโปรแกรมทเขยนดวยภาษาแอสเซมบลตอไปน ใหเปนภาษาเครอง .ORIG x3000 LD R1, OPER1 LD R2, OPER2 ADD R0, R1, R2 ST R0, RESULT HALT OPER1 .FILL x0001 OPER2 .FILL x0002 RESULT .BLKW 1 .END

แปลเปนภาษาเครองไดดงน (เตมชองวางทเวนไว)

x3000 0010 0010 0000 0100

x3001 …………………………

x3002 …………………………

x3003 0011 0000 0000 0011

x3004 1111 0000 0010 0101

x3005 0000 0000 0000 0001

x3006 0000 0000 0000 0002

x3007 0000 0000 0000 0000

.ORIG x3000

LEA R0, AAA

JMP R0

AAA BRn BBB

BBB BRz CCC

CCC BRp AAA

HALT

.END

แปลเปนภาษาเครองไดดงน (เตมชองวางทเวนไว)

x3000 1110 0000 0000 0001

x3001 1100 0000 0000 0000

x3002 0000 1000 0000 0000

x3003 …………………………

x3004 0000 0011 1111 1101

x3005 1111 0000 0010 0101

จงตอบค าถามตอไปน

หลงจากท าค าสง LEA แลว R0 จะมคาเทาใด

2. จงตอบสนๆ วาโปรแกรมตอไปนท าอะไร .ORIG x3000

LD R2, ZERO

LD R0, M0

LD R1, M1

LOOP BRz DONE ADD R2, R2, R0

ADD R1, R1, -1

BR LOOP

DONE ST R2, RESULT

HALT

RESULT .FILL x0000

ZERO .FILL x0000

M0 .FILL x0004

M1 .FILL x0803

.END

หลงจากโปรแกรมท างานจนเสรจ RESULT จะมคาเปนเทาใด

3. จงตอบสนๆ วาโปรแกรมตอไปนท าอะไร .ORIG x3000

AND R0, R0, #0 D LD R1, A

AND R2, R1, #1

BRp B

E ADD R1, R1, #-1

B ADD R0, R0, R1

ADD R1, R1, #-2

F BRp B

ST R0, C

TRAP x25

A .BLKW 1

C .BLKW 1

.END

4. จงเขยนโปรแกรมเพอนบจ านวนบตท เปน 1 ใน R0 เชน ถา R0 มคา 0001 0011 0111 0000 เม อ

โปรแกรมท างานเสรจ R1 จะตองมคาเปน 0000 0000 0000 0110

Page 8: บทที่ 11 แอลซีทรีโพรเซสเซอร์pioneer.netserv.chula.ac.th/~achatcha/2301274/MyBook_11...บทท 11 แอลซ ทร โพรเซสเซอร

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 126

5. จงหาขอผดพลาด (error) ของโปรแกรมตอไปน ขอผดพลาดน จะถกตรวจพบเม อ ก. เวลาคอมไพล

(assembly time) หรอ ข. เวลารนบนแอลซทรโพรเซสเซอร (run time)

ADD R3, R3, #30

ST R3, A

HALT

A .FILL #0

6. จงตอบสนๆ วาโปรแกรมตอไปนท าอะไร .ORIG x3000

AND R5, R5, #0

AND R3, R3, #0

ADD R3, R3, #8

LDI R1, A

ADD R2, R1, #0

AG ADD R2, R2, R2

ADD R3, R3, #-1

BRnp AG

LD R4, B

AND R1, R1, R4

NOT R1, R1

ADD R1, R1, #1

ADD R2, R2, R1

BRnp NO

ADD R5, R5, #1

NO HALT

B .FILL xFF00

A .FILL x4000

.END

7. โปรแกรมตอไปนบวกคาในหนวยความจ าทต าแหนง A, B, C แลวเขยนผลลพธลงไปในหนวยความจ า จงหา

ขอผดพลาด (error) 2 ท และจะพบขอผดพลาดน จะถกตรวจพบเมอ ก. เวลาคอมไพล (assembly time)

หรอ ข. เวลารนบนแอลซทรโพรเซสเซอร (run time)

.ORIG x3000

ONE LD R0, A

ADD R1, R1, R0

TWO LD R0, B

ADD R1, R1, R0

THREE LD R0, C

ADD R1, R1, R0

ST R1, SUM

TRAP x25

A .FILL x0001

B .FILL x0002

C .FILL x0003

D .FILL x0004

.END

8. โปรแกรมตอไปน เปรยบเทยบขอความ 2 ขอความทมความยาวเทากน ขอความแรกเรมตนทหนวยความจ า

x4000 ขอความทสองเรมท x4100 ถาขอความทงสองเหมอนกน โปรแกรมจะท าให R5 = 1 ถาไม R5 = 0

จงเตมโปรแกรมใหสมบรณ โดยเพม 3 instructions ท (a) (b) และ (c)

.ORIG x3000

LD R1, FIRST

LD R2, SECOND

AND R0, R0, #0

LOOP ........................ (a) LDR R4, R2, #0

BRz NEXT

ADD R1, R1, #1

ADD R2, R2, #1

........................ (b) ........................ (c)

ADD R3, R3, R4

BRz LOOP

AND R5, R5, #0

BRnzp DONE

Page 9: บทที่ 11 แอลซีทรีโพรเซสเซอร์pioneer.netserv.chula.ac.th/~achatcha/2301274/MyBook_11...บทท 11 แอลซ ทร โพรเซสเซอร

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 127

NEXT AND R5, R5, #0

ADD R5, R5, #1

DONE TRAP x25

FIRST .FILL x4000

SECOND .FILL x4100

.END

9. โปรแกรมตอไปนตรวจสอบวาขอความท x4000 เปนพาลนโดรม (palindrome) หรอไม ถาเปนจะให R5 =

1 ถาไม R5 = 0 จงเตมโปรแกรมใหสมบรณ โดยเพม 5 ค าสง ท (a) - (e)

.ORIG x3000 LD R0, PTR

ADD R1, R0, #0

AGAIN LDR R2, R1, #0

BRz CONT

ADD R1, R1, #1

BRnzp AGAIN

CONT ...................... (a)

LOOP LDR R3, R0, #0

...................... (b)

NOT R4, R4

ADD R4, R4, #1

ADD R3, R3, R4

BRnp NO

...................... (c)

...................... (d)

NOT R2, R0

ADD R2, R2, #1

ADD R2, R1, R2

BRnz YES

...................... (e)

YES AND R5, R5, #0

ADD R5, R5, #1

BRnzp DONE

NO AND R5, R5, #0

DONE HALT

PTR .FILL x4000

.END

10. โปรแกรมตอไปน เลอน (shift) R3 ไปทางซาย 4 บต (R3 = R3 << 4) จงหาขอผดพลาดและแกไขให

โปรแกรมถกตอง

.ORIG x3000 AND R2, R2, #0

ADD R2, R2, #4 LOOP BRz DONE

ADD R2, R2, #-1

ADD R3, R3, R3

BR LOOP

DONE HALT

.END

11. จงตอบสนๆ วาโปรแกรมตอไปนท าอะไร หรอเตมโปรแกรมใหสมบรณ

.ORIG x3000

LD R1, A

LD R2, B

ST R1, B

ST R2, A

HALT

A .BLKW 1

B .BLKW 1

.END

.ORIG x3000

AND R0, R0, #0

LEA R1, INPUT

LOOP LDR R2, R1, #0

BRz END

ADD R0, R0, #1

ADD R1, R1, #1

BRnzp LOOP

END ST R0, OUTPUT

HALT

INPUT .STRINGZ "ComputerSystems"

OUTPUT .BLKW 1

.END

Page 10: บทที่ 11 แอลซีทรีโพรเซสเซอร์pioneer.netserv.chula.ac.th/~achatcha/2301274/MyBook_11...บทท 11 แอลซ ทร โพรเซสเซอร

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 128

.ORIG x3000

AND R1, R1, #0

LD R2, N

LEA R3, LIST

LD R4, MAX

LOOP LDR R5, R3, #0

NOT R6, R5

ADD R6, R6, #1

ADD R7, R4, R6

BRnz NEXT

ADD R4, R5, #0

NEXT ADD R3, R3, #1

ADD R1, R1, #1

NOT R7, R1

ADD R7, R7, #1

ADD R7, R7, R2

BRnp LOOP

END ST R4, OUTPUT

HALT

MAX .FILL 0x7FFF

N .FILL 0x0005

LIST .FILL 0x0046

.FILL 0x0028

.FILL 0x0013

.FILL 0x0007

.FILL 0x0009

OUTPUT .BLKW 1

.END

.ORIG x3000

LD R2, Q

LOOP1 LDI R1, KBSR

BRzp LOOP1

LDI R0, KBDR

NOT R3, R0

ADD R3, R3, #1

ADD R4, R2, R3

BRz END

LOOP2 LDI R1, DSR

BRzp LOOP2

STI R0, DDR

BRnzp LOOP1

END HALT

KBSR .FILL xFE00

KBDR .FILL xFE02

DSR .FILL xFE04

DDR .FILL xFE06

Q .FILL x0071

.END

โปรแกรมหา parity bit: ถาจ านวนบตทเปน 1 ใน INPUT

เปนเลขค parity bit คอ 1 ถาจ านวนบตทเปน 1 ใน INPUT

เปนเลขค parity bit คอ 0 เมอโปรแกรมนท างานเสรจ

OUTPUT มคาเปน 1

.ORIG x3000

LD R0, INPUT

AND R1, R1, #0

LD R2, CONST

LD R3, MASK

AND R7, R7, #0

LOOP ADD R0, R0, #0

BRzp NEXT

.........................

AND R7, R7, R3

NEXT ADD R0, R0, R0

ADD R1, R1, #1

NOT R4, R1

ADD R4, R4, #1

ADD R5, R2, R4

BRp LOOP

ST R7, OUTPUT

HALT

MASK .FILL 0x0001

CONST .FILL 0x0010

INPUT .FILL 0x1234

OUTPUT .BLKW 1

.END

โปรแกรมหาผลรวมในแถวล าดบ (array) A[0] + A[1] +

A[2] + … + A[n – 1] เมอโปรแกรมนท างานเสรจ OUTPUT

มคาเปน 15

.ORIG x3000

AND R0, R0, #0

AND R1, R1, #0

LD R2, N

LEA R3, INPUT

LOOP ADD R4, R3, R1

LDR R5, R4, #0

ADD R0, R0, R5

ADD R1, R1, #1

NOT R6, R1

ADD R6, R6, #1

ADD R7, R2, R6

.........................

ST R0, OUTPUT

HALT

N .FILL 5

INPUT .FILL 0x0001

.FILL 0x0002

.FILL 0x0003

.FILL 0x0004

.FILL 0x0005

OUTPUT .BLKW 1

.END

Page 11: บทที่ 11 แอลซีทรีโพรเซสเซอร์pioneer.netserv.chula.ac.th/~achatcha/2301274/MyBook_11...บทท 11 แอลซ ทร โพรเซสเซอร

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 129

โปรแกรมหา M ÷ N ก าหนดให M และ N เปนจ านวนเตม

บวกเทานน ปดเศษทง เชน 23 ÷ 5 = 4

.ORIG x3000

AND R0, R0, #0

LD R1, M

LD R2, N

.........................

.........................

LOOP ADD R1, R1, R2

BRn END

ADD R0, R0, #1

BRnzp LOOP

END ST R0, OUTPUT

HALT

M .FILL 100

N .FILL 7

OUTPUT .BLKW 1

.END

โปรแกรมพมพเลขฐาน 16 INPUT มคาอยระหวาง 0 ถง 15

ให OUTPUT ออกมาเปนรหส ASCII

.ORIG x3000

LEA R1, HEX

LD R2, INPUT

.........................

.........................

ST R4, OUTPUT

HALT

INPUT .FILL #12

OUTPUT .BLKW 1

HEX .STRINGZ "01234567890ABCDE"

.END

เมอโปรแกรมนท างานเสรจ OUTPUT จะมคาเปน 0x0043

หรออกขระ C ในรหส ASCII

12. จงเขยนโปรแกรมตรวจสอบ palindrome แบบเรยกซ า (recursive call) เรยกฟงกชน f(a,b) เมอ a เปน

address ของอกขระตวแรก และ b เปน address ของอกขระตวสดทาย ครงตอไปกเรยกฟงกชน f(a + 1, b

– 1) และ f(a + 2, b – 2) ไปเรอยๆ ก าหนดใหมอกขระเปนจ านวนค ดงนนจะหยดเรยกซ ากตอเมอ a

เทากบ b

13. จงตอบสนๆ วาโปรแกรมตอไปนท าอะไร .ORIG x3000 LD R1, OPER1 LD R2, OPER2 NOT R3, R2 ADD R3, R3, #1 ADD R0, R1, R3 BRn NEXT ST R1, RESULT HALT NEXT ST R2, RESULT HALT OPER1 .BLKW 1 OPER2 .BLKW 1 RESULT .BLKW 1 .END

.ORIG x3000 LEA R1, HELLO LEA R2, TEMP ADD R2, R2, #-2 BEGIN LDR R3, R1, #0 LDR R4, R2, #0 STR R4, R1, #0 STR R3, R2, #0 ADD R1, R1, #1 ADD R2, R2, #-1 NOT R5, R2 ADD R5, R5, #1 ADD R0, R1, R5 BRn BEGIN END HALT HELLO .STRINGZ "abcdefg" TEMP .BLKW 1 .END

Page 12: บทที่ 11 แอลซีทรีโพรเซสเซอร์pioneer.netserv.chula.ac.th/~achatcha/2301274/MyBook_11...บทท 11 แอลซ ทร โพรเซสเซอร

เอกสารค าสอนรายวชา 2301274 ระบบคอมพวเตอร คณะวทยาศาสตร จฬาลงกรณมหาวทยาลย | 130

14. จงตอบสนๆ วาโปรแกรมตอไปนท าอะไร .ORIG x3000

AND R3, R3, #0

LD R1, XXX

LD R2, YYY

LOOP BRnz END

ADD R3, R3, R1

ADD R2, R2, #–1

BRnzp LOOP

END ST R3, ZZZ

HALT

XXX .BLKW 1 ; X (X ≥ 0 เสมอ) YYY .BLKW 1 ; Y (Y ≥ 0 เสมอ) ZZZ .BLKW 1 ; Z

.END

.ORIG x3000

LEA R1, SSS

LEA R2, SSS

LOOP1 ADD R2, R2, #1

LDR R3, R2, #0

BRnp LOOP1

LOOP2 LDR R3, R1, #0

LDR R4, R2, #-1

STR R3, R2, #-1

STR R4, R1, #0

ADD R1, R1, #1

ADD R2, R2, #-1

NOT R5, R1

ADD R5, R5, #1

ADD R0, R2, R5

BRp LOOP2

HALT

SSS .STRINGZ "hello world!"

.END

.ORIG x3000

AND R0, R0, #0

LEA R1, AAA

LEA R4, RESULT

LOOP LDR R2, R1, #0

ADD R0, R0, R2

ADD R1, R1, #1

NOT R2, R1

ADD R2, R2, #1

ADD R2, R4, R2

BRp LOOP

STR R0, R4, #0

HALT

AAA .BLKW 10

RESULT .BLKW 1

.END

.ORIG x3000

AND R5, R5, #0

AND R3, R3, #0

ADD R3, R3, #8

LD R1, NUMBER

ADD R2, R1, #0

LOOP ADD R2, R2, R2

ADD R3, R3, #-1

BRnp LOOP

LD R4, MASK

AND R1, R1, R4

NOT R1, R1

ADD R1, R1, #1

ADD R2, R2, R1

BRnp NEXT

ADD R5, R5, #1

NEXT ST R5, RESULT

HALT

MASK .FILL xFF00

NUMBER .BLKW 1

RESULT .BLKW 1

.END

รายการอางอง

[1] Yale N. Patt and Sanjay J. Patel, Introduction to Computing Systems: From bits & gates to C &

beyond, McGraw-Hill, 2003.