Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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 เปนตน
เอกสารค าสอนรายวชา 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]
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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 กได
เอกสารค าสอนรายวชา 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.
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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
เอกสารค าสอนรายวชา 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.