匯編語(yǔ)言實(shí)驗(yàn)報(bào)告_第1頁(yè)
匯編語(yǔ)言實(shí)驗(yàn)報(bào)告_第2頁(yè)
匯編語(yǔ)言實(shí)驗(yàn)報(bào)告_第3頁(yè)
匯編語(yǔ)言實(shí)驗(yàn)報(bào)告_第4頁(yè)
匯編語(yǔ)言實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算機(jī)專(zhuān)業(yè)類(lèi)課程實(shí)驗(yàn)報(bào)告課程名稱(chēng):匯編程序語(yǔ)言設(shè)計(jì)學(xué)院:計(jì)算機(jī)科學(xué)與工程專(zhuān)業(yè):計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生姓名:林怡學(xué)號(hào):指導(dǎo)教師:胡建日期:2014年12月15日電 子 科 技 大 學(xué)實(shí) 驗(yàn) 報(bào) 告實(shí)驗(yàn)一1、 實(shí)驗(yàn)名稱(chēng):匯編源程序的上機(jī)調(diào)試操作基礎(chǔ)訓(xùn)練2、 實(shí)驗(yàn)學(xué)時(shí):43、 實(shí)驗(yàn)內(nèi)容和目的:實(shí)驗(yàn)內(nèi)容:1. DEBUG命令的使用 2. 程序的調(diào)試與運(yùn)行 3.編寫(xiě)程序計(jì)算以下表達(dá)式: Z=(5X+2Y-7)/2設(shè)X、Y的值放在字節(jié)變量VARX、VARY中,結(jié)果存放在字節(jié)單元VARZ中。實(shí)驗(yàn)?zāi)康模?. 掌握DEBUG 的基本命令及其功能2. 學(xué)習(xí)數(shù)據(jù)傳送和算術(shù)運(yùn)算指令的用法3. 熟悉在PC機(jī)上編輯、匯編、

2、連接、調(diào)試和運(yùn)行匯編語(yǔ)言程序的過(guò)程。4、 實(shí)驗(yàn)原理:1編輯源程序,建立一個(gè)以后綴為 .ASM的文件.2匯編源程序,檢查程序有否錯(cuò)誤,有錯(cuò)時(shí)回到編輯狀態(tài),修改程序中錯(cuò)誤行。無(wú)錯(cuò)時(shí)繼續(xù)第3步。3連接目標(biāo)程序,產(chǎn)生可執(zhí)行程序。4用DEBUG程序調(diào)試可執(zhí)行程序,記錄數(shù)據(jù)段的內(nèi)容。 5、 實(shí)驗(yàn)器材(設(shè)備、元器件)pc、window7平臺(tái)、masm5 開(kāi)發(fā)環(huán)境6、 實(shí)驗(yàn)步驟:1、 在數(shù)據(jù)段中分別用兩個(gè)單元varx和vary存放變量x和y;另一個(gè)單元varz用來(lái)存放運(yùn)算結(jié)果Z;2、 由于是字節(jié)變量,所以用al存放變量x的值,然后將al左移兩位得到4*x,再把a(bǔ)l加上x(chóng),進(jìn)而得到5*x;3、 再用bl存放變量

3、y的值,用add命令得到2*y,之后把a(bǔ)l與bl相加,再用sub命令減去7,得到(5*x+2*y-7)的值,并保存到al中;4、 最后將al右移一位,得到最后的z=(5*x+2*y-7)/2,并把a(bǔ)l的值送入varz單元;5、 運(yùn)行程序,使用-d命令查看內(nèi)存單元的信息;7、 實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析:實(shí)驗(yàn)代碼如下:實(shí)驗(yàn)結(jié)果如下圖:1、 編譯連接后執(zhí)行程序:2、 查看內(nèi)存單元變量的值varx =05h,vary=07h, (5x+2y-7)/2=(25d+14d-7d)/2d=16d=10h可以看到上圖中內(nèi)存單元的值與手工計(jì)算的結(jié)果相符,說(shuō)明程序是正確的。8、 實(shí)驗(yàn)結(jié)論、心得體會(huì)和改進(jìn)建議:1、 本次

4、實(shí)驗(yàn)讓我掌握debug調(diào)試軟件的一些基本命令,也學(xué)會(huì)了如何查看寄存器變量和內(nèi)存單元;2、 這個(gè)程序雖然短小,卻是五臟俱全,讓我對(duì)于一個(gè)完整匯編程序的框架有了一個(gè)基本的了解,為后面的更為復(fù)雜的實(shí)驗(yàn)奠定了基礎(chǔ);電 子 科 技 大 學(xué)實(shí) 驗(yàn) 報(bào) 告實(shí)驗(yàn)二1、 實(shí)驗(yàn)名稱(chēng):分支程序與循環(huán)程序設(shè)計(jì)2、 實(shí)驗(yàn)學(xué)時(shí):43、 實(shí)驗(yàn)內(nèi)容和目的:實(shí)驗(yàn)內(nèi)容:根據(jù)輸入的字母進(jìn)行大小寫(xiě)轉(zhuǎn)換(若是輸入小寫(xiě)字母則轉(zhuǎn)換成為大寫(xiě)字母,反之),若輸入的不是字母則提示出錯(cuò)并重新輸入。實(shí)驗(yàn)?zāi)康模?1.掌握分支程序的結(jié)構(gòu)。 2.掌握分支程序的設(shè)計(jì)與調(diào)試方法。 3.掌握循環(huán)程序設(shè)計(jì)與調(diào)試方法 4.掌握正確分配與使用寄存器。4、 實(shí)驗(yàn)原理:

5、1、 利用軟中斷指令,進(jìn)行人機(jī)交互,輸入字母并顯示轉(zhuǎn)換后的字母;2、 由ascii碼表可知,小寫(xiě)字母與其對(duì)應(yīng)的大寫(xiě)字母之間剛好相差20h,即若輸入的是大寫(xiě)字母,將其加上20h就可以得到對(duì)應(yīng)的小寫(xiě)字母,反之小寫(xiě)字母減去20h可以得到其大寫(xiě)字母;3、 利用CMP比較指令對(duì)輸入的字母判定大小寫(xiě),在根據(jù)標(biāo)志寄存器的狀態(tài)執(zhí)行條件轉(zhuǎn)移指令找到對(duì)應(yīng)的程序段入口;5、 實(shí)驗(yàn)器材(設(shè)備、元器件)pc、window7平臺(tái)、masm5 開(kāi)發(fā)環(huán)境6、 實(shí)驗(yàn)步驟:1、根據(jù)程序流程圖編寫(xiě)源程序文件;2、匯編,若發(fā)現(xiàn)語(yǔ)法錯(cuò)誤或者格式錯(cuò)誤則修改; 開(kāi)始3、鏈接,形成可執(zhí)行文件;4、運(yùn)行程序,單步執(zhí)行查看寄存器標(biāo)量及內(nèi)存單元;

6、5、驗(yàn)證程序的正確性;從鍵盤(pán)輸入字符并存入al只程序流程圖如右圖: YESal<41h打印錯(cuò)誤信息NONOal>5ahYESYESal<61hNOYESal加上20h把小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母NOal>71hal減去20h把大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母輸出轉(zhuǎn)換后的字母結(jié)束七、 實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析:實(shí)驗(yàn)代碼如下:實(shí)驗(yàn)結(jié)果如圖:1、 編譯連接以及調(diào)試:2、 輸入小寫(xiě)p3、 輸出大寫(xiě)P4、 輸入小寫(xiě)t5、 輸出大寫(xiě)T6、 輸入非字母的字符7、 輸出警告信息并重新輸入一個(gè)字符(大寫(xiě)的Q)八、實(shí)驗(yàn)結(jié)論、心得體會(huì)和改進(jìn)建議:本實(shí)驗(yàn)也有其他的做法,由觀察可知,小寫(xiě)字母的8位二進(jìn)制數(shù)的第5位(

7、從第0位開(kāi)始數(shù))上的值一定為1,而大寫(xiě)字母的第五位一定為0,所以也可以對(duì)將小寫(xiě)字母與11011111B做and運(yùn)算,把第五位上的1置0從而轉(zhuǎn)換為大寫(xiě)字母,而大寫(xiě)字母與0010000B做or運(yùn)算,把第五位上的0置為1變?yōu)樾?xiě)字母。電 子 科 技 大 學(xué)實(shí) 驗(yàn) 報(bào) 告實(shí)驗(yàn)三一、 實(shí)驗(yàn)名稱(chēng):數(shù)制、碼制和子程序的編程與調(diào)試二、 實(shí)驗(yàn)學(xué)時(shí):4三、 實(shí)驗(yàn)內(nèi)容和目的:實(shí)驗(yàn)內(nèi)容:從鍵盤(pán)輸入兩個(gè)2位十六進(jìn)制數(shù),相加,結(jié)果以十進(jìn)制形式顯示在屏幕上。 (要求結(jié)果顯示完整的算式)實(shí)驗(yàn)?zāi)康模?.、熟練掌握編寫(xiě)匯編語(yǔ)言原程序的基本方法和基本框架。2、熟練使用DEBUG調(diào)試程序。3.、掌握十六進(jìn)制數(shù)與ASCII碼之間,AS

8、CII碼與BCD碼之間的轉(zhuǎn)換。4.、掌握用DOS功能調(diào)用,實(shí)現(xiàn)字符的輸入和顯示。5.、掌握子程序的編程與調(diào)試方法。四、 實(shí)驗(yàn)原理:1、 調(diào)用0ah號(hào)功能,從鍵盤(pán)輸入兩個(gè)2位十六進(jìn)制數(shù),并存入指定緩沖區(qū);2、 根據(jù)ascii碼表的規(guī)律將十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),其中對(duì)于數(shù)字型ascii碼取其低四位,而字母型的ascii碼先減去07h后,再取低四位;3、 而把二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)可以采用除基取余法,但要注意取出的余數(shù)是從低位往高位排列的。五、 實(shí)驗(yàn)器材(設(shè)備、元器件)pc、window7平臺(tái)、masm5 開(kāi)發(fā)環(huán)境六、 實(shí)驗(yàn)步驟:asc2bin1、 根據(jù)程序流程圖編寫(xiě)實(shí)驗(yàn)代碼;2、匯編,若發(fā)現(xiàn)語(yǔ)法

9、錯(cuò)誤或者格式錯(cuò)誤則修改;將使用到的寄存器壓棧3、鏈接,形成可執(zhí)行文件;將ch賦值為24、運(yùn)行程序,單步執(zhí)行查看寄存器標(biāo)量及內(nèi)存單元; 5、驗(yàn)證程序的正確性 流程圖如下: 開(kāi)始YES按順序取一個(gè)ascii碼到bl中bin2decccNObl<0將使用到的寄存器壓棧輸出提示信息并輸入第一個(gè)16進(jìn)制數(shù)存入ascbuf1單元輸出錯(cuò)誤信息YESbl<=9將兩數(shù)之和存放到al中,基數(shù)10放入bl輸出提示信息并輸入第二個(gè)16進(jìn)制數(shù)存入ascbuf2單元NO將ax高8位清零,保留其低8位的值調(diào)用子程序asc2bin把第一個(gè)數(shù)轉(zhuǎn)換為8位二進(jìn)制數(shù)YES將bl高四位清零ax除以bl的值,把余數(shù)存入equ

10、al單元對(duì)應(yīng)位置調(diào)用子程序asc2bin把第二個(gè)數(shù)轉(zhuǎn)換為8位二進(jìn)制數(shù)兩個(gè)8位二進(jìn)制數(shù)相加并將結(jié)果暫存入sum緩沖單元調(diào)用bin2dec子程序把二進(jìn)制數(shù)的和轉(zhuǎn)換成十進(jìn)制數(shù)把a(bǔ)scbuf1和ascbuf2 中的數(shù)存入equa1單元對(duì)應(yīng)位置把十進(jìn)制數(shù)轉(zhuǎn)換為ascii碼再存入equa1單元對(duì)應(yīng)位置al左移四位 bl<ANO商al=0?ch減1or al,blbl<=F把寄存器出棧YES NOch=0?NOYES返回YESbl減去07hYESbl<amov binbuf,alNObl<=f返回寄存器出棧結(jié)束輸出完整算式七、 實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析:實(shí)驗(yàn)代碼如下:程序運(yùn)行結(jié)果圖如下:由

11、上圖可以看出,63H=99D,2CH=44D,99D+44D=143D,可見(jiàn)結(jié)果是正確的。單步執(zhí)行結(jié)果如下圖:1、 輸入第一個(gè)十六進(jìn)制數(shù):2、 輸入第二個(gè)十六進(jìn)制數(shù):3、 調(diào)用子程序acs2bin:(由于篇幅有限,只截部分圖示意)4、將兩數(shù)之和轉(zhuǎn)換為十進(jìn)制數(shù),調(diào)用bin2dec子程序(程序中筆誤寫(xiě)成了bin2hex)5、將十進(jìn)制數(shù)轉(zhuǎn)換為ascii碼,顯示完整算式6、執(zhí)行程序過(guò)程中發(fā)現(xiàn),當(dāng)輸入的字符不在0-9A-Za-z區(qū)間時(shí),程序并沒(méi)有如想象中的打印出錯(cuò)誤信息,而是直接回到了dos操作界面,這一點(diǎn)我十分不明白,如下圖所示:八、 實(shí)驗(yàn)結(jié)論、心得體會(huì)和改進(jìn)建議:1、 如上面提到的,執(zhí)行程序過(guò)程中發(fā)

12、現(xiàn)錯(cuò)誤提示信息打印不了,在網(wǎng)上也是沒(méi)有找到答案,后來(lái)我想了想是不是在子程序中就不能再進(jìn)行軟中斷了呢?子程序調(diào)用和軟中斷都會(huì)對(duì)現(xiàn)場(chǎng)進(jìn)行壓棧保護(hù),可能兩者之間有所沖突。2、 實(shí)驗(yàn)過(guò)程中,在把二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)時(shí),一開(kāi)始我是把每次除以10求得的余數(shù)按正序存放的,這樣得到的十進(jìn)制數(shù)就正好是倒序的,后來(lái)發(fā)現(xiàn)了錯(cuò)誤,及時(shí)改正了。電 子 科 技 大 學(xué)實(shí) 驗(yàn) 報(bào) 告實(shí)驗(yàn)四一、 實(shí)驗(yàn)名稱(chēng):串操作指令及其應(yīng)用程序的設(shè)計(jì)與調(diào)試運(yùn)行二、 實(shí)驗(yàn)學(xué)時(shí):4三、 實(shí)驗(yàn)內(nèi)容和目的:實(shí)驗(yàn)內(nèi)容: 從鍵盤(pán)輸入兩個(gè)相同長(zhǎng)度的字符串,分別放到數(shù)據(jù)段和附加段,利用串比較指令比較數(shù)據(jù)段和附加段中兩個(gè)字符串,如果兩串一樣,輸出Y,否則輸

13、出不同的字符。實(shí)驗(yàn)?zāi)康模?1熟悉串操作指令的基本格式和使用方法。 2掌握常用的串操作程序的設(shè)計(jì)方法。 3熟悉串操作程序的調(diào)試運(yùn)行過(guò)程。 四、 實(shí)驗(yàn)原理:1、需要用到9號(hào)DOS功能調(diào)用顯示字符串,以實(shí)現(xiàn)人機(jī)對(duì)話(huà)。比如:在數(shù)據(jù)段中設(shè)置兩個(gè)存放提示信息的字符串,一個(gè)是提示用戶(hù)輸入,另一個(gè)是指示顯示結(jié)果:massage1 DB please input a string:, 0AH, 0DH, $2、需要用到10號(hào)DOS功能調(diào)用輸入連續(xù)的字符串,并為這些字串預(yù)留存儲(chǔ)空間,比如:STRING1 DB 20, 0, 20 DUP( 0), 0AH, 0DH, $3、 利用串比較指令CMPSB比較兩個(gè)字符串

14、的對(duì)應(yīng)字符是否相等,同時(shí)使用REPE重復(fù)執(zhí)行指令再配合JNZ和JMP等轉(zhuǎn)移指令來(lái)控制程序的循環(huán)和跳轉(zhuǎn);五、 實(shí)驗(yàn)器材(設(shè)備、元器件)pc、window7平臺(tái)、masm5 開(kāi)發(fā)環(huán)境六、 實(shí)驗(yàn)步驟:1、根據(jù)程序流程圖編寫(xiě)實(shí)驗(yàn)代碼; 開(kāi)始輸出提示信息并輸入第一個(gè)字符串存入數(shù)據(jù)段str1單元輸出提示信息并輸入第二個(gè)字符串存入擴(kuò)展段str2單元分別使si和di指向兩個(gè)字符串的第一個(gè)字符2、匯編,若發(fā)現(xiàn)語(yǔ)法錯(cuò)誤或者格式錯(cuò)誤則修改;3、鏈接,形成可執(zhí)行文件;4、運(yùn)行程序,單步執(zhí)行查看寄存器標(biāo)量及內(nèi)存單元;5、驗(yàn)證程序的正確性; 程序流程圖如右圖所示:將df標(biāo)志位清零將cx賦值為字符串的長(zhǎng)度YESREPZ C

15、MPSBNOZF=0&&cx0?NOZF0?字符串相等輸出Y輸出不相等的字符YESREPZ CMPSBYESZF0?結(jié)束NO七、 實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析:實(shí)驗(yàn)代碼如下:實(shí)驗(yàn)結(jié)果如下圖:下面是單步執(zhí)行結(jié)果:1、 輸入第一個(gè)字符串str12、 輸入第二個(gè)字符串str23、 串操作指令CMPSB,當(dāng)兩個(gè)字符不等時(shí),跳轉(zhuǎn)4、 打印不同的字母,然后繼續(xù)進(jìn)行串比較對(duì)于這一部分,看圖可以注意到我手動(dòng)的添加了一個(gè)CMP CX,0指令,當(dāng)CX0時(shí)才繼續(xù)執(zhí)行CMPSB指令,這是由于在之前的代碼調(diào)試過(guò)程中,我發(fā)現(xiàn)當(dāng)我不對(duì)cx進(jìn)行手動(dòng)的判0時(shí),REPZ CMPSB指令將會(huì)永遠(yuǎn)執(zhí)行下去,即使此時(shí)CX的值已經(jīng)等于0000了,如下圖所示:5、 繼續(xù)輸出不相同的字符,并且此時(shí)CX=00006、 程序運(yùn)行完畢八、 實(shí)驗(yàn)結(jié)論、心得體會(huì)和改進(jìn)建議:1、 通過(guò)這次試驗(yàn),我熟練的掌握了串比較指令CMPSB以及重復(fù)前綴指令REPZ/REPE的工作原理。通過(guò)單步執(zhí)行并查看寄存器變量的值

溫馨提示

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

評(píng)論

0/150

提交評(píng)論