日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MIPS Spim

發布時間:2024/4/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MIPS Spim 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MIPS指令學習
  • MIPS指令知識的學習:
    • 書本:《計算機組成原理》
    • 網絡:
      • http://gicl.cs.drexel.edu/people/sevy/architecture/MIPSRef(SPIM).html
      • http://courses.missouristate.edu/KenVollmar/MARS/Help/SyscallHelp.html
  • 環境配置
    • 從fpt://ftp.cs.wisc.edu目錄PUB/SPIM中下載SPIM
    • 運行pcspim.exe解壓縮文件
    • 在解壓縮后的文件夾中運行SETUP.EXE安裝
    • 轉到安裝目錄下運行pcspim.exe
    • 模擬器界面:
    • 按照MIPS指令規則編寫匯編代碼,(后綴名使用asm,s)用PCSpim打開運行。
  • 程序結構學習(從hello world開始)
    • 源代碼(hello.asm)
1: # author : See-See 2: # text segment 3: .text 4: .globl main 5: main: # execution starts here 6: la $a0,str # put string address into a0 7: li $v0,4 # system call to print 8: syscall # out a string 9: li $v0,10 10: syscall # exit 11: #data segment 12: .data 13: str: .asciiz "hello world\n"
    • 效果圖
  • 程序設計實例
    • 輸出實例
      • 源代碼
1: # author : lijian 2: # date: 2012-01-04 21:00:30 3: # function: use mips output 4: ? 5: .data 6: # variable declarations here 7: msg: .asciiz "\nthis is a message to show!\n" #declared for string 8: inter: .word 168 #declared a interger 9: char: .byte 'a' #declared a character 10: ? 11: ? 12: .text 13: main: # indicates start of code 14: ? 15: # show interger 16: li $v0, 1 # $v0 <= 1 17: lw $a0, inter # $a0 <= inter 18: syscall 19: # show string 20: li $v0, 4 # $v0 <= 4 21: la $a0, msg # $a0 <= msg 22: syscall 23: ? 24: li $v0, 10 #system call code for exit = 10 25: syscall #call operating system to exit
      • 效果圖
    • 輸入實例
      • 源代碼
1: # author : lijian 2: # date: 2012-01-04 21:35:31 3: # function: use mips input 4: ? 5: .data 6: # variable declarations here 7: msg: .space 40 #allocate 40 consecutive bytes, 8: msg1: .asciiz "\ninput a integer: " # declared for string 9: msg2: .asciiz "\ninput a string: " # declared for string 10: msg3: .asciiz "\nyou input: " # declared for string 11: .text 12: main: # indicates start of code 13: ? 14: # input integer 15: li $v0, 4 16: la $a0, msg1 17: syscall 18: li $v0, 5 #read integer 19: syscall 20: move $a1, $v0 21: li $v0, 4 22: la $a0, msg3 23: syscall 24: li $v0, 1 25: move $a0, $a1 26: syscall 27: 28: li $v0, 4 29: la $a0, msg2 30: syscall 31: li $v0, 8 32: la $a0, msg 33: li $a1, 40 34: syscall 35: 36: li $v0, 4 37: la $a0, msg 38: syscall 39: 40: li $v0, 10 #system call code for exit = 10 41: syscall #call operating system to exit
    • 效果圖

    • 代數式運算
      • 源代碼
1: # author : lijian 2: # date: 2012-01-04 22:09:55 3: # fuction: use mips to count 4: ? 5: .data 6: newline: .asciiz "\n" 7: line: .asciiz "****************************\n" 8: head: .asciiz " count numbers \n" 9: author: .asciiz " author : lijian \n" 10: version: .asciiz " version: 0.1 \n" 11: first: .asciiz "input the first num: " 12: second: .asciiz "input the second num: " 13: addString: .asciiz " + " 14: subString: .asciiz " - " 15: mulString: .asciiz " * " 16: divString: .asciiz " / " 17: equalString: .asciiz " = " 18: ? 19: .text 20: main: 21: # show menu 22: li $v0, 4 23: la $a0, line 24: syscall 25: li $v0, 4 26: la $a0, head 27: syscall 28: li $v0, 4 29: la $a0, newline 30: syscall 31: li $v0, 4 32: la $a0, author 33: syscall 34: li $v0, 4 35: la $a0, version 36: syscall 37: li $v0, 4 38: la $a0, line 39: # input first num 40: syscall 41: li $v0, 4 42: la $a0, first 43: syscall 44: li $v0, 5 45: syscall 46: move $s0, $v0 47: # input second num 48: li $v0, 4 49: la $a0, second 50: syscall 51: li $v0, 5 52: syscall 53: move $s1, $v0 54: # show add result 55: li $v0, 1 56: move $a0, $s0 57: syscall 58: li $v0, 4 59: la $a0, addString 60: syscall 61: li $v0, 1 62: move $a0, $s1 63: syscall 64: li $v0, 4 65: la $a0, equalString 66: syscall 67: 68: add $a0, $s0, $s1 69: li $v0, 1 70: syscall 71: li $v0, 4 72: la $a0, newline 73: syscall 74: 75: # show sub result 76: li $v0, 1 77: move $a0, $s0 78: syscall 79: li $v0, 4 80: la $a0, subString 81: syscall 82: li $v0, 1 83: move $a0, $s1 84: syscall 85: li $v0, 4 86: la $a0, equalString 87: syscall 88: 89: sub $a0, $s0, $s1 90: li $v0, 1 91: syscall 92: li $v0, 4 93: la $a0, newline 94: syscall 95: 96: # show mul result 97: li $v0, 1 98: move $a0, $s0 99: syscall 100: li $v0, 4 101: la $a0, mulString 102: syscall 103: li $v0, 1 104: move $a0, $s1 105: syscall 106: li $v0, 4 107: la $a0, equalString 108: syscall 109: 110: mul $a0, $s0, $s1 111: li $v0, 1 112: syscall 113: li $v0, 4 114: la $a0, newline 115: syscall 116: ? 117: # show div result 118: li $v0, 1 119: move $a0, $s0 120: syscall 121: li $v0, 4 122: la $a0, divString 123: syscall 124: li $v0, 1 125: move $a0, $s1 126: syscall 127: li $v0, 4 128: la $a0, equalString 129: syscall 130: 131: div $a0, $s0, $s1 132: li $v0, 1 133: syscall 134: li $v0, 4 135: la $a0, newline 136: syscall 137: 138: li $v0, 10 #system call code for exit = 10 139: syscall #call operating system to exit
    • 效果圖

    • 求最大數,和
      • 源代碼
1: # author : lijian 2: # data: 2012-01-04 22:38:01 3: # function: find the max num and count the total 4: ? 5: .data 6: array: .space 12 #allocate 12 consecutive bytes 7: msg1: .asciiz "input the 3 integers(each num end of [enter]): \n" 8: msg2: .asciiz "the max num is: " 9: msg3: .asciiz "the tatal is: " 10: newline: .asciiz "\n" 11: ? 12: .text 13: main: 14: ? 15: la $t0, array 16: li $v0, 4 17: la $a0, msg1 18: syscall 19: li $v0, 5 20: syscall 21: sw $v0,($t0) # store the first num 22: li $v0, 5 23: syscall 24: sw $v0,4($t0) # stroe the second num 25: li $v0, 5 26: syscall 27: sw $v0,8($t0) # store the third num 28: ? 29: lw $s0, ($t0) # get the first num 30: lw $s1, 4($t0) # get the second num 31: lw $s2, 8($t0) # get the third num 32: 33: add $s3, $s0, $s1 34: add $s4, $s2, $s3 # total stored in $s4 35: li $v0, 4 36: la $a0, msg3 37: syscall 38: li $v0, 1 39: move $a0, $s4 40: syscall 41: li $v0, 4 42: la $a0, newline 43: syscall 44: 45: blt $s0, $s1,num2 46: move $s3, $s0 47: j num3 48: num2: 49: move $s3, $s1 50: num3: 51: bge $s3, $s2, num4 52: move $s3, $s2 53: num4: 54: li $v0, 4 55: la $a0, msg2 56: syscall 57: li $v0, 1 58: move $a0, $s3 59: syscall 60: li $v0, 4 61: la $a0, newline 62: syscall 63: 64: li $v0, 10 #system call code for exit = 10 65: syscall #call operating system to exit
    • 效果圖

****************************************************************************************************

在進行嵌入式MIPS軟件開發過程中,常常需要使用匯編語言。SPIM是一個很小,簡單的模擬器。有助于你快速學習MIPS匯編語言。

安裝SPIM

從http://www.cs.wisc.edu/~larus/SPIM/pcspim.zip下載安裝包,解壓完成后執行setup.exe即可。

使用

1.?首先當然是匯編語言文件了。由于spim沒有提供編輯器,所以你可以任選你喜歡的editor編輯文件。例子文件如下:

#welcome.asm

??????? .data 0x10000000

msg:?? .asciiz "Welcome to MIPS world!"?

??????? .text

main:? addu $s0, $ra, $0

??????? li? $v0, 4

??????? la $a0, msg

??????? syscall

??????? addu $ra, $0, $s0

??????? jr $ra

2.?啟動spim

3. File->Open -> welcome.asm

4. F10?單步執行

?

?

總結

以上是生活随笔為你收集整理的MIPS Spim的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。