lc3計(jì)算機(jī)匯編程序報(bào)告_第1頁
lc3計(jì)算機(jī)匯編程序報(bào)告_第2頁
lc3計(jì)算機(jī)匯編程序報(bào)告_第3頁
lc3計(jì)算機(jī)匯編程序報(bào)告_第4頁
lc3計(jì)算機(jī)匯編程序報(bào)告_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 計(jì)算機(jī)學(xué)院軟件工程專業(yè) 計(jì)算機(jī)組織與結(jié)構(gòu)實(shí)驗(yàn)報(bào)告1 學(xué)生姓名: 李 榮 學(xué)生班級(jí): 軟件工程班 學(xué)生學(xué)號(hào): 9 2014年 5月 27日一、實(shí)驗(yàn)?zāi)康?1. 掌握LC-3 指令集結(jié)構(gòu)(ISA)。2. 學(xué)會(huì)使用LC-3Edit、Simulator軟件工具。3. 熟悉LC-3機(jī)器語言調(diào)試和運(yùn)行的方法。二、實(shí)驗(yàn)內(nèi)容1. 實(shí)驗(yàn)環(huán)境 Windows 7 x86、軟件(LC-3 Edit、Simulator) 2. 問題描述1)沒有乘法指令的乘法。編寫一個(gè)程序使得R4跟R5中包含的兩個(gè)正整數(shù)相乘,并且將其結(jié)果存到R2中。 2)一列數(shù)的求和。編寫一個(gè)程序?qū)⒋鎯?chǔ)在從x3100開始的10個(gè)內(nèi)存單元的數(shù)值加在一起

2、,并將結(jié)果存放在R1中。 3)查看內(nèi)存區(qū)域是否包含數(shù)字5。編寫一個(gè)程序來檢查從x3100開始的10個(gè)內(nèi)存單元中是否包含有數(shù)值5,如果有則設(shè)置R0 = 1,如果沒有則設(shè)置R0 = 0。 4)查找字中的第一個(gè)1。編寫一個(gè)程序來檢查一個(gè)內(nèi)存單元的內(nèi)容(即某個(gè)地址中存放的一個(gè)字),逐個(gè)bit的檢查(從左至右)第一個(gè)出現(xiàn)“1”的bit位置,并將該bit在該字(word)中的位置保存在R1中。3、 分析與實(shí)現(xiàn) 1.分析 1)、沒有乘法指令的乘法 該程序是先通過AND指令將R2清零,再通過ADD指令將R2與R5相加的和存到R2中,此時(shí)R5減1(ADD指令),通過分支指令來判斷R5是否大于0,如果是就跳轉(zhuǎn)到x

3、3201執(zhí)行程序,以此循環(huán)執(zhí)行,直到不滿足條件執(zhí)行下條指令 ,即停機(jī)指令。 2)、一列數(shù)的求和 a.初始化。先通過AND指令將累計(jì)和變量R1清零,再通過AND、ADD指令將R4初始化為10(相當(dāng)于一個(gè)計(jì)數(shù)器),再通過LD指令將R2初始化為數(shù)據(jù)列的起始地址x3100。 b.循環(huán)體。從x3004開始,每循環(huán)一次,就有一個(gè)數(shù)值被裝入R3(通過LDR指令);隨后通過ADD指令將R2增量(x3005),R3的內(nèi)容被加入R1(x3006),R1即為運(yùn)行和存放處,計(jì)數(shù)器R4減1;接著通過分支指令來判斷R4是否為正,若為正就跳到x3004執(zhí)行,開始下一輪循環(huán)。 c.停機(jī)。10次之后,R4的內(nèi)容變?yōu)?,P位也相

4、應(yīng)為0,跳轉(zhuǎn)不再 發(fā)生,程序結(jié)束。 3)、查看內(nèi)存區(qū)域是否包含數(shù)字5。 a.初始化。x3000-x3005這六條指令,通過AND、ADD指令將R0、 R1、R3分別初始化為1、-5、10。 b.位于x3006的指令初始化R4的內(nèi)容為測(cè)試內(nèi)存的起始地址x3100;位于x3007的指令將x3100的內(nèi)容裝入R2。 c.判斷(x3008-x3009)。判斷R2的內(nèi)容是否是5的方法,是價(jià)格 R2和-5相加,如果結(jié)果為0就跳轉(zhuǎn)到x300F,意味著發(fā)現(xiàn)了5的存在,此時(shí)R0的初始值為1。 d.準(zhǔn)備下一輪測(cè)試。位于x300A的指令增量R4,準(zhǔn)備裝入下一個(gè) 被測(cè)試內(nèi)容;x300B將R3減1,即還有多少數(shù)值未被測(cè)

5、試;x300C借助R4做指針,真正裝入下一個(gè)數(shù)值至R2;x300D則根據(jù)R3的內(nèi)容是否為0,決定是否跳回x3008重新此過程。若R3 = 0,則測(cè)試結(jié)束,所以同時(shí)還要設(shè)置R0 = 0(x300E),隨后程序結(jié)束(x300F)。 4)、查找字中的第一個(gè)1。 a.初始化。前兩條指令將R1初始化,先AND(清零)后ADD,完成對(duì)R1賦值。在此R1被初始化為15。x3002通過LDI指令向R2裝入x3100內(nèi)存的內(nèi)容。 b.第一次測(cè)試。x3003測(cè)試的是該數(shù)值的最高位是否為1(等同于判斷該數(shù)是否為負(fù)),如果是1則跳轉(zhuǎn)至x3008,而此時(shí)R1 = 15,若是0則不跳轉(zhuǎn),R1減1,指向下一個(gè)被測(cè)試的bit

6、位。 c.左移和第二次測(cè)試。X3005讓R2和自己相加,結(jié)果存回R2,等價(jià)于R2乘2,又等價(jià)于將R2的內(nèi)容左移一位,這樣bit14的內(nèi)容也就被左移到了bit15,使得條件跳轉(zhuǎn)指令可以通過判斷該數(shù)是否為負(fù),來判斷該位的內(nèi)容。然后,由x3006執(zhí)行對(duì)bit14的內(nèi)容判斷。而如果該位是1,則跳轉(zhuǎn)至程序結(jié)束且R1 = 14,。如果該位是0 ,則繼續(xù)x3007的執(zhí)行,x3007無條件的跳轉(zhuǎn)至x3004,重復(fù)測(cè)試過程。 d.下一次測(cè)試。循環(huán)體的工作就是每次完成一個(gè)bit的測(cè)試,即R1減1,指向下一個(gè)被測(cè)試位,R2內(nèi)容左移1位(x3005),然后測(cè)試新的bit15內(nèi)容。 2.程序流程圖 圖1.1 沒有乘法指

7、令的乘法流程圖 圖1.2一列數(shù)的和 圖1.3 查看內(nèi)存區(qū)域是否包含數(shù)字5程序流程圖圖1.4查找字中的第一個(gè)1程序流程圖3.運(yùn)行步驟 對(duì)于這四個(gè)程序,要先在LC-3 Edit上輸入機(jī)器指令,然后再按按鈕進(jìn)行調(diào)試,以.bin格式來存儲(chǔ)此程序,調(diào)試成功相應(yīng)的會(huì)生成一個(gè).obj格式的文件,接著再在LC-3 Simulator中打開.obj格式的文件,設(shè)置斷點(diǎn),通過“set value”給相應(yīng)的寄存器或地址賦值,按按鈕運(yùn)行此程序。 4、 實(shí)驗(yàn)結(jié)果 1. 運(yùn)行結(jié)果截圖圖4.1沒有乘法指令的乘法圖4.2一列數(shù)的求和圖4.3.1 查看內(nèi)存區(qū)域是否包含數(shù)字5(有5的情況)圖4.3.2 查看內(nèi)存區(qū)域是否包含數(shù)字5

8、(沒有5的情況)圖4.4查找字中的第一個(gè)15、 心得體會(huì) 通過再一次的重復(fù)該實(shí)驗(yàn),我又一次熟悉了LC-3的運(yùn)行環(huán)境,對(duì)于LC-3的操作也更加熟練了。這次實(shí)驗(yàn)我最大的收獲就是能夠自己獨(dú)立的來完成這四個(gè)小程序的調(diào)試,比起去年第一次做時(shí)更順利。不足的是,很多指令都還得翻書來查看它所要完成的操作,對(duì)于所學(xué)知識(shí)或者沒有掌握扎實(shí)或者就是已經(jīng)遺忘了,而求對(duì)課本還不夠熟悉,所以通過這次實(shí)驗(yàn)我認(rèn)識(shí)到課本是最重要的,要隨時(shí)復(fù)習(xí)才能掌握的更好。六、參考資料 1. Guide to Using the Windows Version of the LC-3 Simulator and LC-3 Edit。 2.計(jì)算機(jī)

9、系統(tǒng)概論英文版第二版。7、 附錄1.沒有乘法指令的乘法00000 /起始地址為x3200 00000 /AND指令,將R2清零 00100 /ADD指令,R2 - R2 + R4 11111 /ADD指令,R5 - R5 - 1 11101 /分支指令,判斷R5是否是正,若為正跳 到x3201執(zhí)行下一輪循環(huán)00101 /TRAP指令,HALT2.一列數(shù)的求和 00000 /起始地址為x300000000 /AND指令,將R1清零00000 /AND指令,將R4清零01010 /ADD指令,R4 - R4 + 1011100 /LEA指令,R2 - x310000000 /LDR指令,將R2的內(nèi)

10、容裝入R3中00001 /ADD指令,R2 - R2 + 100011 /ADD指令,R1 - R1 + R311111 /ADD指令,R4 - R4 -111011 /分支指令,判斷R4是否為正,若為正跳 到x3004執(zhí)行下一輪循環(huán)00101 /TRAP指令,HALT3.查看內(nèi)存區(qū)域是否包含數(shù)字5 00000 /起始地址x300000000 /AND指令,將R0清零00001 /ADD指令,R0 - R0 + 100000 /AND指令,將R1清零11011 /ADD指令,R1 - R1 - 500000 /AND指令,將R3清零01010 /ADD指令,R3 - R3 + 1001000

11、/LD指令,R4 - mx300F00000 /LDR指令,R2 - mR4 + 000001 /ADD指令,R2 - R2 + R100100 /分支指令,判斷R2是否為0,若為0跳 到x300E執(zhí)行執(zhí)行下一輪循環(huán)00001 /ADD指令,R4 - R4 + 111111 /ADD指令,R3 - R3 - 111010 /分支指令,判斷R3是否為正,若為正跳 到x3007執(zhí)行下一輪循環(huán)00000 /AND指令,將R0清零00101 /TRAP指令,HALT00000 /x31004.查找字中的第一個(gè)1 00000 /起始地址為x3000 00000 /AND指令,將R1清零 01111 /ADD指令,R1 - R1 + 15 00111 /LDI指令,R2 - mmx300A 00101 /分支指令,判斷R2是否為負(fù),若為負(fù)跳 到x3009執(zhí)行下一輪循環(huán) 11111

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論