1 / 19

MIPS Programing Model 및 프로그램 Hoon Oh

MIPS Programing Model 및 프로그램 Hoon Oh. MIPS Memory Layout. Memory organization Memory consists of a number of cells, each of which holds one byte. Memory cells are numbered sequentially from zero up to the maximum allowable size. Address space Text segment holds instructions for a program

slone
Download Presentation

MIPS Programing Model 및 프로그램 Hoon Oh

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MIPS Programing Model 및 프로그램 Hoon Oh

  2. MIPS Memory Layout • Memory organization • Memory consists of a number of cells, each of which holds one byte. • Memory cells are numbered sequentially from zero up to the maximum allowable size. • Address space • Text segment • holds instructions for a program • Data segment • Static data • Dynamic data • Grows upward after static data. • Stack • Resides in the top of the address space and grows downward.

  3. MIPS Memory Layout ($sp) 0x7fffffff Stack segment 0x00 0x00000000 0x00000001 0xA0 0x3E 0x00000002 0x00000003 0x10 Dynamic data 0x90 0xFFFFFFFC ($gp) 0x00008000 0x6F 0xFFFFFFFD Data segment (data that instructions operate on) 0xFFFFFFFE 0xA1 0x10000000 0xFFFFFFFF 0x00 Text segment (Instructions) Memory Organization ($pc) 0x00400000 reserved MIPS Memory Layout

  4. MIPS registers • MIPS processor contains 32 general purpose registers (numbered 0 – 31). • Register n is designated by $n or Rn. • $zero (0) is always set to 0. • $at (1), $k0 (26) and $k1 (27) are reserved for use by the assembler and OS. • $v0 and $v1 (2, 3) are used for return values. • $t0 - $t9 (8-15, 24, 25) are used for temporary values. • $s0 - $s7(16-23) are used for long-lived values. • $gp, $sp, $fp, $ra are used for special purposes, as shown in the table of the next page.

  5. MIPS Registers Register name Number Usage zero 0 constant 0 at 1 reserved for assembler v0, v1 2 ~ 3 expression evaluation and results of a function a0 ~ a3 4 ~ 7 arguments 1 - 4 t0 ~ t7 8 ~ 15 temporary (not preserved across call) s0 ~ s7 16 ~ 23 saved (preserved across call) t8, t9 24, 25 temporary (not preserved across call) k0, k1 26, 27 reserved for OS kernel gp 28 pointer for global area sp 29 stack pointer fp 30 frame pointer ra 31 return address (used by function call)

  6. SPIM Simulator • SPIM • Simulator that runs programs written for MIPS R2000/R3000 processors • Advantages to using a machine simulator • MIPS workstation are not generally available. • Provides better environment for low-level programming than an actual machine: • detect more errors • provide more features • give convenient edit-assemble-load development cycle, compared to using a circuit board. • easy to identify and fix the bugs. • Disadvantages • The programs run slower than on a real machine.

  7. Application programs Kernel Hardware OS system calls • An application program asks the kernel to do I/O by making system calls. • The kernel implements these system calls by talking directly to the hardware. Programs make system calls asking kernel to do I/O Kernel controls I/O devices directly

  8. SPIM’s system calls • SPIM provides a small set of 10 OS-like system services through the system call (syscall) instruction. $v0 : system call code $a0...$a3 : arguments ($f12 <- floating point values) syscall (initiate system service) $v0 :results ($f0: for the floating point)

  9. Code Format • Source code format [label:] operation [operand], [operand], [operand] [#comment] • Brackets ([ ]) indicates an optional field. • Constants • Hex numbers: prefix with 0x • String: “hello world\n” • Special characters: \n (newline), \t (tab), \” (quote). • SPIM directives for character strings .ascii “abcd” : do not null-terminate them. .asciiz “abcd”: null-terminate them.

  10. Code Format: hello.a • ## hello.a – prints out “hello world” • ## a0 – points to the string • ################################################################### • # text segment # • ################################################################### • .text • .globl __start • __start: # execution starts here • la $a0, str # put string address into a0 • li $v0, 4 # system call to print • syscall # out a string • li $v0, 10 • syscall # au revoir ... • ################################################################### • # data segment # • ################################################################### • .data • str: .asciiz “hello world\n” • ## • ## end of file hello.a

  11. PC-SPIM for Windows • Registers window • Text segment • Data Segment • Messages window

  12. Inside text & data segments [0x00400000] 0x3c011001 lui $1, 4097 [str] ;9: la $a0, #str put string .. [0x00400004] 0x34200000 ori $4, $1, 0 [str] [0x00400008] 0x34020004 ori $2, $0, 4 ;10: li $v0, #system call to .. [0x0040000c] 0x0000000c syscall ;11; syscall [0x00400010] 0x3402000a ori $s2, $0, 10 ;13; li $v0, 10 [0x00400014] 0x0000000c syscall ;14; syscall text segment DATA [0x10000000] ... [0x000fffx] 0x00000000 [0x1000fffc] 0x00000000 [0x10010000] 0x6c6c6568 0x6f77206f 0x0a646c72 0x00000000 [0x10010010] ... [0x10020000] 0x00000000 STACK [0x7fffaffc] 0x00000000 data segment

  13. MIPS 산술연산 예

  14. Programming Example: temp.a • ## temp.a ask user for temperature in Celsius. • ## convert to Fahrenheit, print the result. (F = 9C/5 + 32) • ## v0 – reads in Celsius • ## t0 – holds Fahrenheit result • ## a0 – points to output strings • ############################################################ • # text segment # • ############################################################ • .text • .global __start • __start: • la $a0, prompt # print prompt on terminal • li $v0,4 • syscall • li $v0,5 # syscall 5 reads an integer • syscall • mul $t0,$v0,9 # to convert,multiply by 9, • div $t0,$t0,5 # divide by 5, then • add $t0,$t0,32 # add 32

  15. temp.a (cont...) • la $a0,ans1 # print string before result • li $v0,4 • syscall • mov $a0,$t0 # print result • li $v0,4 • syscall • move $a0,endl # system call to print • li $v0,4 # out a newline • syscall • li $v0,10 • syscall # au revoir ... • ############################################################## • # data segment # • ############################################################## • .data • prompt: .asciiz “Enter temperature (Celsius): “ • ans1: .asciiz “The temperature in Fahrenheit is “ • end1: .asciiz “\n“ • ## end of file temp.a

  16. math1.a • ## Question: calculate A * X^2 + B * X + C • ## Output format: "answer =180" • ############################################################## • # text segment # • ############################################################## • .text • .globl __start • __start: # execution starts here • # Any changes outside of two dashed lines will be discarded • # by mipsmark. put your answer between dashed lines. • # ------------------ start cut -------------------------- • (해답) • # ------------------ end cut ---------------------------- • ############################################################## • # data segment # • ############################################################## • .data • X: .word 7 • A: .word 3 • B: .word 4 • C: .word 5 • ans: .asciiz “answer = “ • endl: .anciiz “\n” • ## End of file math1.a

  17. Solution: math1.a • # ------------------ start cut -------------------------- • # This solution has a bug. Perform source level debugging to • # single step through the code and locate the error. • lw $t0, X • lw $t1, A • lw $t2, B • lw $t3, C • mul $t4, $t0, $t0 # t4 = X^2 • mul $t4, $t4, $t1 # t4 = A * X^2 • mul $t5, $2, $t0 # t5 = B * X • add $t4, $t4, $t5 # t4 = A * X^2 + B * X • add $t4, $t4, $t3 # t4 = A * X^2 + B * X + C • la $a0, ans # system call to print • li $v0, 4 # out string • syscall • move $a0, $t4 # print result on terminal • li $v0, 1 • syscall • move $a0, endl # system call to print • li $v0, 4 # out a newline • syscall • li $v0, 10 • syscall # au revoir ... • # ------------------ end cut ----------------------------

  18. 실습1 • 프로그램 math1.a의 해답에서 버그가 하나 존재한다. Step button을 사용하여 해답의 5번째 라인 (lw $t1, A)이 수행된 후에 다음 레지스터의 내용을 체크하시오. • PC, t0, t1, gp, sp • 10번째 라인 (mul $t5, $2, $t0)이 수행되기 전 후에 다음 레지스터들의 내용을 체크하시오. • PC • t4, t5 • 실행 후에 t5의 내용이 B*X=4 x 7 = 28 (0x1C)인가? • 에러를 수정한 후에 값이 180이 나오는 지를 체크 하시오. • 다음을 계산하는 프로그램을 작성하고 실행하여 다음시간까지 제출하시오. 5 * X^2 – 3 X값은 7로 하시오. 계산 결과는 242입니다.

  19. 과제1 • Machine 언어와 Asembly언어의 관계는 무엇인가? • 일반 C프로그래밍에 비해 Assembly프로그램의 장.단점은 무엇인가? • 컴퓨터가 5에서 3을 뺄 때 거치는 과정을 보이시오? • RISC 프로세서의 기본적인 아이디어는 무엇인가? • Program counter의 목적은 무엇인가? • SPIM에서 Identifier (식별자) 를 만드는 룰은 무엇인가? • Syntax error와 logical error의 차이점은 무엇인가? • Single stepping의 목적은 무엇인가? • Breakpoint는 무엇인가? • hi 와 lo 레지스터는 무슨 목적으로 사용되는가? • Assembly programming에서 comments와 indentation이 왜 그렇게 중요한가? • la, lb, li, 그리고 lw 사이의 차이점은 무엇인가? • 산술적/논리적인 명령의 Operand는 어떤 순서로 놓여져야 하는가?

More Related