中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

林州網(wǎng)站建設(shè)拉新十大推廣app平臺

林州網(wǎng)站建設(shè),拉新十大推廣app平臺,html5怎么做二手網(wǎng)站,寧夏網(wǎng)站制作實驗?zāi)繕?biāo) a) 了解WinMIPS64的基本功能和作用; b) 熟悉MIPS指令、初步建立指令流水執(zhí)行的感性認(rèn)識; c) 掌握該工具的基本命令和操作,為流水線實驗作準(zhǔn)備。 實驗內(nèi)容 按照下面的實驗步驟及說明,完成相關(guān)操作記錄實驗過程的截圖&a…

實驗?zāi)繕?biāo)

a) 了解WinMIPS64的基本功能和作用;
b) 熟悉MIPS指令、初步建立指令流水執(zhí)行的感性認(rèn)識;
c) 掌握該工具的基本命令和操作,為流水線實驗作準(zhǔn)備。

實驗內(nèi)容

按照下面的實驗步驟及說明,完成相關(guān)操作記錄實驗過程的截圖:
1)下載WinMIPS64;運行樣例代碼并觀察軟件各個觀察窗口的內(nèi)容和作用,掌握軟件的使用方法。(80分)
2)學(xué)會正確使用WinMIPS64的IO方法;(10分)
3)編寫完整的排序程序;(10分)

實驗環(huán)境

硬件:桌面PC
軟件:Windows,WinMIPS64仿真器

實驗步驟及說明

WinMIPS64是一款指令集模擬器,它是基于WinDLX設(shè)計的,如果你對于WinDLX這款軟件十分熟悉的話,那么對于WinMIPS64也會十分的容易上手。DLX 處理器 (發(fā)音為 “DeLuXe”)是Hennessy 和Patterson合著一書《Computer Architecture - A Quantitative Approach》中流水線處理器的例子。WinDLX是一個基于Windows的模擬器。
本教程通過一個實例介紹WinMIPS64的使用方法。WinMIPS64模擬器能夠演示MIPS64流水線是如何工作的。
本教程使用的例子非常簡單,它并沒有囊括WinMIPS64的各個方面,僅僅作為使用WinMIPS64的入門級介紹。如果你想自己了解更多的資料,在給出的winmips64.zip中,有WinMIPS64?—?Documentation Summary.html和winmipstut.docx兩個文件可以供你隨時參考,其中涵蓋了WinMIPS64的指令集和模擬器的組成與使用方法。
雖然我們將詳細(xì)討論例子中的各個階段,但你應(yīng)具備基本的使用Windows的知識?,F(xiàn)假定你知道如何啟動 Windows,使用滾動條滾動,雙擊執(zhí)行以及激活窗口。

(一)、安 裝
在Windows下安裝WinMIPS64?:
解壓給出的winmips64.zip壓縮文件到我的電腦上D盤的D:\software\winmips64?
在這里插入圖片描述
(二)、一個完整的例子

1.開始和配置WinMIPS64
在winmips64這個子目錄下,雙擊winmips64.exe文件,即打開了WinMIPS64模擬器,其外觀如下圖:
在這里插入圖片描述
為了初始化模擬器, 點擊File 菜單中的 Reset all(Ctrl+R) 菜單項即可。
WinMIPS64可以在多種配置下工作。你可以改變流水線的結(jié)構(gòu)和時間要求、存儲器大小和其他幾個控制模擬的參數(shù)。點擊 Configuration / Floating Point Stages(點擊Configuration打開菜單,然后點擊Architecture菜單項),選擇如下標(biāo)準(zhǔn)配置:
在這里插入圖片描述
如果需要,可以通過點擊相應(yīng)區(qū)域來改變設(shè)置。然后,點擊OK 返回主窗口。
在 Configuration 菜單中的其他四個配置也可以設(shè)置,它們是:Multi-Step, Enable Forwarding, Enable Branch Target Buffer 和 Enable Delay Slot。 點擊相應(yīng)菜單項后, 在它的旁邊將顯示一個小鉤。如下圖所示(下圖僅做功能示范,實驗時并沒有勾選“Enable Forwarding”):
在這里插入圖片描述
本次實驗要求不要勾選“Enable Forwarding”。
2. 裝載測試程序
用標(biāo)準(zhǔn)的text編輯器來新建一個名為sum.s的文件,這個文件的功能是,計算兩個整數(shù)A、B之和,然后將結(jié)果傳給C。程序如下:

.data
A:	.word 10
B:	.word 8
C:	.word 0.text
main:
ld r4,A(r0)
ld r5,B(r0)
dadd r3,r4,r5
sd r3,C(r0)
halt

在將該程序裝載進(jìn)WinMIPS64之前,我們必須用asm.exe來檢驗該輸入程序的語法正確性。asm.exe程序文件在所給的winmips壓縮包里有,用命令行使用它。具體操作為,打開終端,利用cd命令進(jìn)到D:\software\WinMIPS64目錄中,然后直接使用asm.exe sum.s命令,檢查輸出結(jié)果是否無誤。輸出結(jié)果如下,可知代碼無誤。
在這里插入圖片描述
在開始模擬之前,至少應(yīng)裝入一個程序到主存。為此,選擇File / OPEN,窗口中會列出當(dāng)前目錄中所有匯編程序,包括sum.s。
按如下步驟操作,可將這個文件裝入主存。

  • 點擊 sum.s
  • 點擊 open 按鈕
    在這里插入圖片描述
    現(xiàn)在,文件就已被裝入到存儲器中了,現(xiàn)在可以開始模擬工作了。
    你可以在CODE窗口觀察代碼內(nèi)容,可以在DATA窗口觀察程序數(shù)據(jù)了。
    CODE窗口如下:
    在這里插入圖片描述
    DATA窗口如下:
    在這里插入圖片描述
    3.模 擬
    在主窗口中,我們可以看見七個子窗口,和一條在底部的狀態(tài)欄。這七個子窗口分別是Pipeline, Code, Data, Registers, Statistics, Cycles和Terminal。在模擬過程中將介紹每一個窗口的特性和用法。
    (1) Pipeline 窗口
    在Pipeline窗口中,展示了MIPS64處理器的內(nèi)部結(jié)構(gòu),其中包括了MIPS64的五級流水線和浮點操作(加法/減法,乘法和除法)的單元。展示了處于不同流水段的指令。
    在這里插入圖片描述
    (2) Code 窗口
    我們來看一下 Code 窗口。你將看到代表存儲器內(nèi)容的三欄信息,從左到右依次為:地址 (符號或數(shù)字)、命令的十六進(jìn)制機(jī)器代碼和匯編命令。
    我們可以看到,初始時,第一行為黃色,表示該行指令處于“取指”階段。
    現(xiàn)在,點擊主窗口中的 Execution開始模擬。在出現(xiàn)的下拉式菜單中,點擊Single Cycle或按 F7鍵。
    這時,第一行變成了了藍(lán)色,第二行變成了黃色,這表示第一行指令處于“譯碼”階段,而第二行指令處于“取指”階段。這些不同的顏色代表指令分別處于不同的流水線階段。黃色代表“取指”,藍(lán)色代表“譯碼”,紅色代表“執(zhí)行”,綠色代表“內(nèi)存數(shù)據(jù)讀或?qū)憽?#xff0c;紫色代表“寫回”。
    接著按F7,直到第五個時鐘周期的時候,有趣的事情發(fā)生了,“dadd r3,r4,r5”指令沒有從“譯碼”跳到其下一個流水階段“執(zhí)行”,并且“sd r3,C(r0)”指令,仍然停留在“取指”階段,同時在terminal窗口顯示一行信息“RAW Stall in ID (RS)”,思考一下這是為什么?
    在這里插入圖片描述
    (3) Cycls窗口
    我們將注意力放到Cycls窗口上。它顯示流水線的時空圖。
    在這里插入圖片描述
    在窗口中,你將看到模擬正在第五時鐘周期,第一條指令正在WB段,第二條命令在MeM段,第四條命令在處于暫停狀態(tài)(installed),第五條指令也因此停滯不前。這是因為發(fā)生了數(shù)據(jù)相關(guān)(第四條指令的dadd命令需要用到寄存器r5的值,但是r5的值并不可用)。
    接著點擊F7,到第五個時鐘周期時,再次發(fā)生相關(guān),造成停滯。接著點擊F7,直至第十三個時鐘周期全部指令執(zhí)行結(jié)束。
    值得一提的是,Cycls窗口是分為兩個子窗口的,左邊的子窗口是一系列的指令,右邊的窗口是圖示的指令執(zhí)行過程。其中,左邊子窗口的命令是動態(tài)出現(xiàn)的,當(dāng)一條指令在進(jìn)行“取指”時,該指令才出現(xiàn),而且,當(dāng)出現(xiàn)了數(shù)據(jù)相關(guān)的時候,所涉及到的指令會變色,暫停的指令會變成藍(lán)色,而被其影響的后續(xù)指令會變成灰色。
    (4) Data 窗口
    在Data中,我們可以觀察到內(nèi)存中的數(shù)據(jù),包括數(shù)據(jù)內(nèi)容和地址兩個方面,其中地址使用64位表示。
    如果想改變一個整型的數(shù)據(jù)的值,左鍵雙擊該值所在的行,如果是想改變一個浮點類型的數(shù)據(jù)的值,那么請右鍵雙擊該值所在的行。
    在這里插入圖片描述
    上圖即為第十三個時鐘周期的data窗口的圖示,其中,左邊一行即為用64位表示的內(nèi)存地址,中間行為數(shù)據(jù)的內(nèi)容,右邊的一行為相關(guān)的代碼??梢钥闯?#xff0c;在這個時鐘周期,A與B的值分別為0xa和0x8,C的值為0x12,表明A與B的值之和已經(jīng)相加并保存到了C中。
    (5) Registers 窗口
    這個窗口顯示存儲在寄存器中的值。
    如果該寄存器為灰色,那么它正處于被一條指令寫入的過程,如果它用一種顏色表示,那么就代表,該顏色所代表的的流水線階段的值可以用來進(jìn)行前遞(forwarding)。同時,這個窗口允許你交互式的該變寄存器的值,但是前提是該寄存器不能處于被寫入或者前遞的階段。如果想改變一個整型的數(shù)據(jù)的值,左鍵雙擊該值所在的行,如果是想改變一個浮點類型的數(shù)據(jù)的值,那么請右鍵雙擊該值所在的行,然后按OK來進(jìn)行確定。
    在這里插入圖片描述
    上圖即為第十三個時鐘周期的Registers窗口的圖示,很顯然,其中可以很清楚的看出每個寄存器的值是什么。
    (6) Statistics 窗口
    最后我們來看一下Statistics 窗口。
    這個窗口是用來記錄一些模擬周期的統(tǒng)計數(shù)據(jù)。其中包括Execution,Stalls,和Code Size三個大項。其中,Execution用來顯示模擬周期中指令數(shù),執(zhí)行周期數(shù)和CPI(沒條指令所用周期數(shù)),Stalls用來表示暫停的周期數(shù),并且分門別類的進(jìn)行了統(tǒng)計,其中包括RAW Stalls,WAW Stalls,WAR Stalls, Structural Stalls, Branch Taken Stalls和Branch misprediction Stalls。Code Size表示了代碼的大小,用byte表示。
    在這里插入圖片描述
    上圖即為Statistics窗口的圖示,其中表示了該程序有13個時鐘周期,5條指令,CPI
    為2.600,有4個RAW Stalls,代碼大小為20個Bytes。
    (三)、更多操作
    首先,點擊File/Reset MIPS64(ctrl + R)進(jìn)行重置。如果你點擊File/Full Reset,你將刪除內(nèi)存中的數(shù)據(jù),這樣你就不得不重新裝載文件,所以點擊File/Reload(F10)是一個很方便的重置的方法。
    你可以一次推進(jìn)多個時鐘周期,方法是點擊Execute/Multi cycle(F8),而多個時鐘周期數(shù)是在Configure/Multi-step中設(shè)置的。
    你也可以通過按F4一次完成整個程序的模擬。同時,你可以設(shè)置斷點,方法是,在Code窗口中左鍵雙擊想要設(shè)置斷點的指令,該指令會變成藍(lán)色,然后點擊F4,程序就會停在這條指令執(zhí)行“ 取指”的階段,如果想要清除斷點,再次左鍵雙擊改行指令。
    (四)、終端I/O的簡單實例
    通過上面對WinMIPS64的了解,我們可以開始簡單的使用該工具了。
    這里,需要我們編寫一個簡單的終端輸出“Hello World!!”的小程序,運行并且截圖。所以,我們需要了解如何將數(shù)據(jù)在終端中輸出輸入。
    下圖是I/O區(qū)域的內(nèi)存映射,一個是控制字,一個是數(shù)據(jù)字:
    在這里插入圖片描述
    所以我們需要先將CONTROL和DATA地址讀取到寄存器,然后分別在這兩個區(qū)域內(nèi)存儲相應(yīng)的序列號(如上圖所示)和要顯示在Terminal窗口的數(shù)據(jù),同時,設(shè)置CONTROL為9,我們能對其進(jìn)行讀取數(shù)據(jù)。
    請編寫完整程序,輸出“Hello World!”字符串。helloworld.s文件如下:
    在這里插入圖片描述
    然后通過asm.exe來檢驗該程序的語法正確性
    在這里插入圖片描述
    然后在WinMIPS64中的File欄中open打開文件。最后一步步按F7,同時觀察各個窗口。最終還要截取Terminal窗口,圖如下:
    在這里插入圖片描述
    證明你的程序結(jié)果輸出了“Hello World!”。
    (五)、編寫排序算法
    在這一部分,我們要求編寫一個排序算法,對一組int型數(shù)據(jù)進(jìn)行排序。該算法使用冒泡排序法,并且在其中嵌入一個swap函數(shù)過程(該算法在課本上有完整的程序,但是其中的數(shù)據(jù)初始化、寄存器映射、命令的映射以及I/O部分還需要自己手動編寫)。編寫完成后,在asm.exe中進(jìn)行檢測,然后運行。
    初始數(shù)據(jù)要求為:“array: .word 8,6,3,7,1,0,9,4,5,2”
    該程序需要對0到10,十個數(shù)進(jìn)行了排序,其中使用了sort和swap兩個函數(shù)過程,并且swap是嵌套在sort中的,在編寫程序的時候一定要注意使用棧來保留寄存器的值,嵌套時還額外需要保存$ra的值。代碼如下:
    首先是數(shù)據(jù)字段和主函數(shù),主函數(shù)里頭,打印排序前的數(shù)組,然后調(diào)用冒泡排序,然后打印排序后的數(shù)組。
    在這里插入圖片描述
    在這里插入圖片描述
    以下代碼為冒泡函數(shù),用于排序一個數(shù)組,參數(shù)為數(shù)組和數(shù)組長度。
    在這里插入圖片描述
    在這里插入圖片描述
    以下是swap函數(shù),用于交換兩個數(shù)。
    在這里插入圖片描述
    然后通過asm.exe來檢驗該程序的語法正確性:
    在這里插入圖片描述
    在這里插入圖片描述
    (六)、結(jié)束語
    本實驗通過一個例子介紹了WinMIPS64的重要特性,使你對流水線和MIPS64的操作類型有了一定的了解。當(dāng)然,你還必須學(xué)習(xí)更多的知識,才能更深入地了解WinMIPS64。請參閱在winmips.zip壓縮文件中的相關(guān)資料。

實驗總結(jié)與體會

  1. 通過本次實驗,我學(xué)會了WinMIPS64的基本操作,例如如何載入程序、運行程序等。
  2. 通過本次實驗,我還對流水線有了基本的認(rèn)識,每個指令就像傳送帶的貨物一樣,五個節(jié)拍就像是處理貨物的機(jī)器一般,每個貨物在傳送帶一直往前,指令不斷地進(jìn)行每個節(jié)拍,如果有一個節(jié)拍暫時無法進(jìn)行,那么將會等待直到可以執(zhí)行為止,此時后面的指令都會被阻塞。
  3. 通過本次實驗,我也認(rèn)識到了流水線的優(yōu)點:
    ①允許同時執(zhí)行多條指令的不同階段,從而提高了處理器的吞吐量和效率
    ②多條指令可以同時處于不同階段,整體的指令執(zhí)行時間會縮短。
  4. 通過編寫冒泡排序程序,我有效地應(yīng)用了所學(xué)到的MIPS指令集知識,鞏固了我的編程能力。

實驗代碼

.data
arr: .word 61, 11, 65, 47, 9, 74, 79, 70, 91, 91, 97, 10, 65, 10, 3, 6, 20, 75, 29, 12, 95, 71, 85, 24, 42, 59, 55, 50, 23, 81, 64, 14, 9, 56, 15, 78, 96, 35, 57, 6
before: .asciiz "before sort the array is:\n"
after: .asciiz "after sort the array is:\n"
CONTROL: .word 0x10000
DATA: .word 0x10008
SP: .word 0x300  # 堆棧指針.text
main:ld r16, CONTROL(r0)  ld r17, DATA(r0) # 打印提示信息 "Before sort the array is:\n"daddi r8, r0, 4  daddi r9, r0, before  sd r9, (r17)  sd r8, (r16)  # 打印數(shù)組daddi r8, r0, 2  daddi r2, r0, 40  daddi r1, r0, 0  
print1:# 打印 arr[i]dsll r3, r1, 3  ld r9, arr(r3) sd r9, (r17) sd r8, (r16)  daddi r1, r1, 1     # i++bne r1, r2, print1  # 循環(huán)未結(jié)束,繼續(xù)打印# 調(diào)用冒泡排序ld r29, SP(r0)     # r29 <- M[SP], 用于維護(hù)堆棧指針daddi r4, r0, arr  # 參數(shù)1: a[]daddi r5, r0, 40   # 參數(shù)2: njal bubbleSort     # 跳轉(zhuǎn)到bubbleSort函數(shù)# 打印提示信息 "After sort the array is:\n"daddi r8, r0, 4  daddi r9, r0, after  sd r9, (r17)  sd r8, (r16)  # 打印數(shù)組daddi r8, r0, 2  daddi r2, r0, 40  daddi r1, r0, 0  
print2:# 打印 arr[i]dsll r3, r1, 3  ld r9, arr(r3)  sd r9, (r17)  sd r8, (r16)daddi r1, r1, 1     # i++bne r1, r2, print2  # 循環(huán)未結(jié)束,繼續(xù)打印halt# 冒泡排序
bubbleSort:# 分配棧幀,保存返回地址和寄存器數(shù)據(jù)daddi r29, r29, -24  sd $ra, 16(r29)  sd r16, 8(r29)  sd r17, 0(r29)  dadd r22, r4, r0  # r22 = a[]daddi r23, r5, 0  # r23 = ndaddi r18, r0, 0  # r18 = i = 0
loop1:# for (int i = 0; i < n - 1; i++)daddi r10, r23, -1  # r10 = n - 1slt r11, r18, r10   # 當(dāng)r18 < r10,r11 = 1beq r11, r0, end1   # 如果i >= n - 1,跳轉(zhuǎn)到 end1daddi r19, r0, 0    # r19 = j = 0daddi r20, r23, -1  # r20 = n - 1dsub r20, r20, r18  # r20 = n - 1 - i
loop2:# for (int j = 0; j < n - 1 - i; j++)slt r11, r19, r20  # 當(dāng)r19 < r20,r11 = 1 beq r11, r0, end2  # 如果j >= n - 1 - i,跳轉(zhuǎn)到 end2dsll r12, r19, 3    # r12 = j * 8dadd r13, r22, r12  # r13 = a + j * 8ld r14, 0(r13)      # r14 = M[r13] = a[j]ld r15, 8(r13)      # r15 = M[r13 + 8] = a[j + 1]# if (a[j] > a[j + 1]) swap(a[j], a[j + 1]);slt r11, r15, r14     # 當(dāng)r15 < r14,r11 = 1beq r11, r0, no_swap  # 如果不交換,跳轉(zhuǎn)到 no_swap# 交換 a[j] 和 a[j + 1]dadd r4, r0, r13  # 參數(shù)1: a + j * 8        a[j]daddi r5, r13, 8  # 參數(shù)2: a + (j + 1) * 8  a[j + 1]jal swap         no_swap:daddi r19, r19, 1  # j++ j loop2            # 循環(huán)到 loop2end2:daddi r18, r18, 1  # i++j loop1            # 循環(huán)到 loop1end1:# 恢復(fù)寄存器數(shù)據(jù)和堆棧幀ld r17, 0(r29)  ld r16, 8(r29)ld $ra, 16(r29) daddi r29, r29, 24  jr $ra swap:  # 交換 a[i] 和 a[j]ld r9, 0(r4)   # r9 = a[i]ld r10, 0(r5)  # r10 = a[j]sd r10, 0(r4)  # a[i] = r10sd r9, 0(r5)   # a[j] = r9jr $ra         # 返回到M[PC]
http://www.risenshineclean.com/news/5559.html

相關(guān)文章:

  • php網(wǎng)站優(yōu)點廈門seo培訓(xùn)
  • 做家教去哪個網(wǎng)站武漢seo價格
  • 企業(yè)網(wǎng)站建設(shè)與優(yōu)化深圳做推廣哪家比較好
  • 找大學(xué)生做家教去哪個網(wǎng)站找好關(guān)鍵詞seo深圳
  • 做網(wǎng)站搭建環(huán)境游戲推廣員一個月能賺多少
  • 網(wǎng)站登錄 效果代碼seo綜合查詢怎么用的
  • 濟(jì)南網(wǎng)站建設(shè)公網(wǎng)絡(luò)服務(wù)
  • 做網(wǎng)站推廣什么好友情鏈接網(wǎng)站源碼
  • 做公眾號的網(wǎng)站有哪些功能如何網(wǎng)站關(guān)鍵詞優(yōu)化
  • 做畢業(yè)論文的網(wǎng)站怎樣創(chuàng)建自己的網(wǎng)站
  • 網(wǎng)站建站網(wǎng)站的seo是什么意思?
  • 建網(wǎng)站盈利的幾種方式投放廣告
  • 哪些網(wǎng)站可以接設(shè)計的單子做培訓(xùn)管理平臺
  • 新的網(wǎng)站做淘寶客搜外網(wǎng)友情鏈接
  • 如何開始做b2b網(wǎng)站站長查詢工具
  • 江西省的建設(shè)廳官方網(wǎng)站社群營銷方案
  • 可以做引流網(wǎng)站的源碼全球搜怎么樣
  • 網(wǎng)站運營淘寶關(guān)鍵詞挖掘工具
  • 石家莊有哪些公司可以做網(wǎng)站電子商務(wù)營銷方法
  • 怎樣做音視頻宣傳網(wǎng)站正規(guī)網(wǎng)站建設(shè)公司
  • 上海商城網(wǎng)站站內(nèi)免費推廣有哪些
  • java做網(wǎng)站的要求推廣普通話的意義50字
  • 手機(jī)開發(fā)網(wǎng)站教程如何做好一個品牌推廣
  • 尉氏做網(wǎng)站網(wǎng)絡(luò)營銷logo
  • 網(wǎng)站建設(shè)全網(wǎng)推廣網(wǎng)絡(luò)seo優(yōu)化
  • 區(qū)塊鏈開發(fā)書籍推薦搜索引擎優(yōu)化課程
  • 高新區(qū)網(wǎng)站建設(shè)的建議免費網(wǎng)上申請注冊
  • 深圳做小程序的公司排名關(guān)鍵詞seo排名怎么做的
  • 網(wǎng)站維護(hù)與建設(shè)內(nèi)容公司網(wǎng)站設(shè)計圖
  • 高端網(wǎng)站開發(fā)找哪家好企業(yè)官方網(wǎng)站怎么申請