Matakuliah Tahun Versi : T0324 / Arsitektur dan Organisasi Komputer : 2005 :1 Pertemuan 6 Bahasa Rakitan: II 1 Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu : • Mendemonstrasikan penggunaan bahasa rakitan dalam instruksi mesin ( C3 ) ( No TIK : 3 ) 2 Chapter 2. Assembly Language: II 3 Calling program Move Move Call Move .. . N,R1 #NUM1,R2 LISTADD R0,SUM R1 servesas a counter. R2 pointsto thelist. Call subroutine. Save result. Clear Add Decrement Branch>0 Return R0 (R2)+,R0 R1 LOOP Initialize sumto 0. Add entry from list. Subroutine LISTADD LOOP Return to calling program. Figure 2.25. Program of Figure 2.16 written as a subroutine; parameters passed through registers. 4 Assume top of stac k is at lev el 1 belo w. Mo v e Mo v e Call #NUM1, – (SP) N, – (SP) LIST ADD Mo v e Add 4(SP),SUM #8,SP .. . LIST ADD LOOP Mo v eMultiple R0 – R2, – (SP) Mo v e Mo v e Clear Add Decremen t Branc h > 0 Mo v e Mo v eMultiple Return 16(SP),R1 20(SP),R2 R0 (R2)+,R0 R1 LOOP R0,20(SP) (SP)+,R0 – R2 Push parameters on to stac k. Call subroutine (top of stac k at lev el 2). Sav e result. Restore top of stac k (top of stac k at lev el 1). Sav e registers (top of stac k at lev el 3). Initialize coun ter to n . Initialize p oin ter to the list. Initialize sum to 0. Add en try from list. Put result on the stac k. Restore registers. Return to calling program. (a) Calling program and subroutine Lev el 3 Lev el 2 Lev el 1 [R2] [R1] [R0] Return address n NUM1 (b) Top of stack at various times Figure 2.26. Program of Figure 2.16 written as a subroutine; parameters passed on the stack. 5 SP (stack pointer) saved [R1] saved [R0] localvar3 localvar2 localvar1 FP (frame pointer) saved [FP] Return address Stack frame for called subroutine param1 param2 param3 param4 Old TOS (top-of-stack) Figure 2.27. A subroutine stack frame example. 6 Memory lo cation Main Instructions program 2000 2004 2008 2012 2016 2020 First 2100 2104 2108 2112 3000 P ARAM2, – (SP) P ARAM1, – (SP) SUB1 (SP),RESUL T #8,SP Place parameters FP ,– (SP) SP ,FP R0 – R3, – (SP) 8(FP),R0 12(FP),R1 Sav e frame poin ter register. Load the frame poin ter. Sav e registers. Get first parameter. Get second parameter. Store result. Restore stack on stack. lev el. subroutine SUB1 2160 2164 Second .. . Mo v e Mo v e Call Mo v e Add next instruction .. . Commen ts Mo v e Mo v e Mo v eMultiple Mo v e Mo v e .. . Mo v e Call Mo v e .. . Mo v e Mo v eMultiple Mo v e Return P ARAM3, SUB2 (SP)+,R2 R3,8(FP) (SP)+,R0 (SP)+,FP – (SP) – R3 Place a parameter on stack. Pop SUB2 in to R2. result Place answ er on stack. Restore registers. Restore frame p oin ter register. Return to Main program. subroutine SUB2 Mo v e Mo v e Mo v eMultiple Mo v e .. . Mo v e Mo v eMultiple Mo v e Return FP ,– (SP) SP ,FP R0 – R1, – (SP) 8(FP),R0 Sav e frame p oin ter register. Load the frame p oin ter. Sav e registers R0 and R1. Get the parameter. R1,8(FP) (SP)+,R0 (SP)+,FP Place SUB2 result on stack. Restore registers R0 and R1. Restore frame p oin ter register. Return to Subroutine 1. – R1 Figure 2.28. Nested subroutines. 7 FP [R1] from SUB1 [R0] from SUB1 [FP] from SUB1 2164 param3 [R3] from Main FP [R2] from Main [R1] from Main [R0] from Main [FP] from Main 2012 Stack frame for second subroutine Stack frame for first subroutine param1 param2 Old TOS Figure 2.29. Stack frames for Figure 2.28. 8 C R0 0 before: 0 0 1 1 1 0 . . . 0 1 1 after: 1 1 1 0 . . . 0 1 1 0 0 (a) Logical shift left LShiftL 0 #2,R0 R0 C before: 0 1 1 1 0 . . . 0 1 1 0 after: 0 0 0 1 1 1 0 . . . 0 1 (b) Logical shift r ight LShiftR #2,R0 R0 C before: 1 0 0 1 1 . . . 0 1 0 0 after: 1 1 1 0 0 1 1 . . . 0 1 (c) Ar ithmetic shift r ight AShiftR #2,R0 Figure 2.30. Logical and arithmetic shift instructions. 9 Move MoveByte LShiftL MoveByte And Or MoveByte #LOC,R0 (R0)+,R1 #4,R1 (R0),R2 #$F,R2 R1,R2 R2,PACKED R0 points to data. Load first byte into R1. Shift left by 4 bit positions. Load secondbyte into R2. Eliminate high-order bits. ConcatenatetheBCD digits. Store the result. Figure 2.31. A routine that packs two BCD digits. 10 C R0 before: 0 0 1 1 1 0 . . . 0 1 1 after: 1 1 1 0 . . . 0 1 1 0 1 (a) Rotate left without carr y RotateL C #2,R0 R0 before: 0 0 1 1 1 0 . . . 0 1 1 after: 1 1 1 0 . . . 0 1 1 0 0 (b) Rotate left with carr y RotateLC #2,R0 R0 C before: 0 1 1 1 0 . . . 0 1 1 0 after: 1 1 0 1 1 1 0 . . . 0 1 (c) Rotate r ight without carr y RotateR #2,R0 R0 C before: 0 1 1 1 0 . . . 0 1 1 0 after: 1 0 0 1 1 1 0 . . . 0 1 ight with carr y (d) Rotate r RotateRC #2,R0 Figure 2.32. Rotate instructions. 11
© Copyright 2026 Paperzz