



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、IO 匯編實驗部分實驗一一)實驗?zāi)康膶W(xué)會安裝“ 16 位匯編程序開發(fā)軟件”的安裝,完成將匯編語言源程序錄入進計算機、利用 ml.exe 進行匯編, LINK 進行鏈接,并用 DEBUG 調(diào)試 16 位程序的全部過程。本實驗大家不必了解程序細節(jié),只是為了熟悉開發(fā)環(huán)境和上機過程。二)實驗內(nèi)容3. 寫 16 位匯編程序,從鍵盤輸入一個字符串,然后換行后將該字符串輸出到屏幕。1)源程序data segmentbuffDB 255DB ?DB 255 dup (?)crlf db 0ah, 0dh, $; 回車換行data endscode segmentassume ds:data, cs:codes
2、tart:mov ax, datamovds, axlea dx, buffmov ah, 0ahint 21hlea dx, crlfmov ah, 9hint 21hlea si, buff + 2hmov cl, buff + 1hnext:cmp cl, 0hjefinishmov dl, byte ptr simov ah, 2hint 21h1/16dec clinc sijmp nextfinish:mov ah, 4chint 21hcode endsend start2)運行結(jié)果貼圖3)編程與調(diào)試心得(遇到的問題和解決的辦法,以及獲得的收獲)一開始寫 buff byte 25
3、5顯示 error ,換成 buffdb 255 可以運行Crlf db 0ah, 0dh, $; 回車換行關(guān)鍵在于獲取字符串的長度,會存儲在buff+1h中也可在末尾加$表示結(jié)尾。實驗二一)實驗?zāi)康耐ㄟ^這一部分的實驗, 進一步熟悉匯編過程和 DEBUG 調(diào)試過程; 掌握用匯編語言編寫順序程序。二)實驗內(nèi)容2. 寫完整程序16 位程序,在內(nèi)存中從Table 開始的 10 個單元中連續(xù)存放0 到 9 的平方值,任給一個0 到 9 的數(shù) X ,該數(shù)存放在內(nèi)存單元XX 中,用 XLAT 指令查表求X 的平方值,并將結(jié)果存于內(nèi)存YY 單元中。編寫程序,并在DEBUG 中進行調(diào)試和驗證結(jié)果。(X ,XX
4、 , YY 都是內(nèi)存中的變量)1)源程序.8086.MODEL SMALL.STACK.DATATABLE db 0,1,4,9,16,25,36,49,64,81RESULT DB ?crlf db 0ah, 0dh, $; 回車換行.CODESTART:MOV AX,DATA2/16MOV DS,AXMOV BX,offset TABLEMOV AH,01HINT 21HSUB AL,30HXLATMOV RESULT,ALleadx, crlf; 輸出回車換行mov ah, 9hint 21hMOV DL,RESULTMOV AH,02HINT 21HEXIT:MOV AH,4CHINT
5、 21Hend start2)運行結(jié)果貼圖運行 debug,-u 反匯編 -g 至 001E ,輸入值6,查表應(yīng)為36,即 24H( 00100100)查 ASCII 為 $,圖 0076A:0030 位置即為result值(通過對比一開始的存儲單元得出)3/163)編程與調(diào)試心得(遇到的問題和解決的辦法,以及獲得的收獲)一開始沒有注意到輸入的AL 是 ASCII 碼,應(yīng)當(dāng)減去30H數(shù)據(jù)存儲在 result 中可以用 -d 查詢,學(xué)會了使用反匯編和查詢存儲單元通過輸出是 ASCII 碼,如 9 對應(yīng) result 的 81,即 51H,查表恰為 Q 說明存儲正確(可用除 10 或循環(huán)移位的方法
6、,單個數(shù)轉(zhuǎn)為十進制數(shù)輸出)實驗三一)實驗?zāi)康耐ㄟ^本實驗,熟練使用字符串的輸入、讀取與判斷,通過實驗,可以掌握循環(huán)結(jié)構(gòu)的各種實現(xiàn)方法, 進一步了解循環(huán)結(jié)構(gòu)中初始化部分、 循環(huán)體部分、 循環(huán)控制部分的功能以及他們彼此之間的關(guān)系。尤其是多重循環(huán)中外層循環(huán)和內(nèi)層循環(huán)之間的關(guān)系。二)實驗內(nèi)容所謂回文字符串是指一個字符串正讀和倒讀都是一樣的,例如字符串ABCDEFFEDCBA 就是一個回文字符串,而字符串ABCFDDCAB 就不是回文字符串。現(xiàn)在編寫完整的16位匯編程序,輸入一個字符串,判斷該字符串是否為回文字符串,并用“It is a palindrome ”或“ It is NOT a palindr
7、ome ”作為輸出。1)源程序data segmentbuff db 255db ?db 255 dup (?)crlf db 0ah, 0dh, $; 回車換行Y DB It is a palindrome$N DB It is NOT a palindrome$data endscode segmentassume ds:data, cs:codestart:mov ax, datamov ds, ax4/16lea dx, buffmov ah, 0ahint 21hlea dx, crlfmov ah, 9hint 21hmovbl, buff + 1hmov bh,0hmov di,
8、2hadd di,bxmov si, 1hdec blnext:dec bldec diinc sicmp bl, 0hjefinishmov dl,buffsimov ah, 2hint 21hmov dl,buffdimov ah, 2hint 21hmov dl, mov ah, 2hint 21hmov al,buffsimov cl,buffdicmp cl,aljne nojmp nextno:lea dx, crlfmov ah, 9hint 21h5/16mov dx,offset Nmov ah,09hINT 21Hmovah, 4chint 21hfinish: leadx
9、, crlfmov ah, 9hint 21hmov dx,offset Ymov ah,09hINT 21Hmov ah, 4chint 21hcode endsend start2)運行結(jié)果貼圖3)編程與調(diào)試心得(遇到的問題和解決的辦法,以及獲得的收獲)本程序存在 bug,如上圖當(dāng)輸入 abvcba 時可以將 abvcab 與 abcvba 逐個字對比,發(fā)現(xiàn)第三個字符不同轉(zhuǎn)入 no 段提示“ It is NOT a palindrome ,”而當(dāng)輸入確實為回文時首字母錯誤,原因?qū)嵲谑遣椴怀鰜?。實驗四實驗?zāi)康氖煜と绾卧跀?shù)組中進行查找, 并返回是否成功的信息, 通過實驗, 可以掌握循環(huán)結(jié)構(gòu)的各
10、種實現(xiàn)方法, 進一步了解循環(huán)結(jié)構(gòu)中初始化部分、 循環(huán)體部分、 循環(huán)控制部分的功能以及他們彼此之間的關(guān)系。尤其是多重循環(huán)中外層循環(huán)和內(nèi)層循環(huán)之間的關(guān)系。實驗內(nèi)容6/162請編寫 16 位完整匯編程序,在一個升序字節(jié)數(shù)組BUFF 中查找數(shù)N ,找到后將此數(shù)從數(shù)組中刪除,并使得CF=0 ;沒找到返回CF 1。1)源程序.8086.model small.databuff db abcdefghijklmn,$N db n.codestart:mov dx,datamov ds,dxmov al,Nmov,ah,$lea di,buffdec difinding:inc dicmp al,dijz y
11、escmp ah,di;檢測是否讀完buffjz nojmp findingyes:add ah,0mov si,diinc sisetarray: cmp ah,di;檢測是否讀完buffjz exitmov cl,simov di,clinc diinc sijmp setarrayno:mov ah,0cmp ah,1;設(shè)置 cfexit:mov ah,4chint 21hend start2)運行結(jié)果貼圖7/16NC 說明 CF=0,查找到數(shù)N,查看存儲單元由abcdefghijklmn,$, n變?yōu)?abcdefghijklm , $, n 已將數(shù)組中的數(shù)n 刪去3)編程與調(diào)試心得(
12、遇到的問題和解決的辦法,以及獲得的收獲)運用反匯編 -u 得到每個指令的地址,利用-g斷點地址快速讓程序運行到特定指令位置,可以方便快捷地排查錯誤進位標(biāo)志CF(Carry flag) CY(1) NC(0)實驗五實驗?zāi)康耐ㄟ^本實驗,掌握子程序的定義和調(diào)用方法。通過程序調(diào)試,進一步理解CALL指令和 RET 指令的功能,掌握子程序調(diào)用時參數(shù)傳遞的方法。實驗內(nèi)容請編寫完整16 位匯編程序從鍵盤讀取字符,如果是十進制的0 9則在屏幕上輸出該數(shù)的 8 位二進制碼, 并將數(shù)字依次存放到BUF 開頭的數(shù)組中, 如果讀入的字符是Q或者q,則程序退出,其他情況在屏幕上打印“You must input 09,
13、 orq”or。(如Q輸入的字符是 9,則輸出“ 00001001”) .提示:輸出一個數(shù)的2 進制形式應(yīng)該從最高位開始輸出。要求打印一個數(shù)的 2 進制形式和輸出回車換行分別定義成一個子程序可以將此段程序定義成一個過程。1)源程序.8086.model small.stack.dataSTR db you must input 09 or q,Q,$.codeLFCR PROCPUSH AX8/16MOV AH,02MOV DL,0AHINT 21HPOP AXRETLFCR ENDPPRINT PROCSUB AL,30HJL TCMP AL,9JG TMOV AH,02HMOV CX,8L
14、P:MOV DL,0SHL AL,1ADC DL,30HPUSH AXINT 21HPOP AXLOOP LPJMP RT:LEA DX,STRMOV AH,09HINT 21HR: RET PRINT ENDPstart:mov dx,datamov ds,dxMOV CX,-1L:MOV AH,01HINT 21HCMP AL,QJZ exitCMP AL,qJZ exitCALL LFCRCALL PRINT9/16CALL LFCRPOP CXDEC CXPUSH CXJNZ Lexit:mov ah,4chint 21hend start2)運行結(jié)果貼圖3)編程與調(diào)試心得(遇到的問題
15、和解決的辦法,以及獲得的收獲)輸入的 AH是 ASCII 碼 SUB AL,30H 使的轉(zhuǎn)換為數(shù)字運用子程序調(diào)用可以使主程序看起來更加簡潔明了,且易于調(diào)試,維護LFCR回車換行需注意將 ax 壓棧,以便調(diào)用 int 21h 的輸出功能Crlf db 0ah, 0dh, $; 即為回車換行實驗六實驗?zāi)康氖煜と绾卧跀?shù)組中進行查找, 并返回是否成功的信息, 通過實驗, 可以掌握循環(huán)結(jié)構(gòu)的各種實現(xiàn)方法, 進一步了解循環(huán)結(jié)構(gòu)中初始化部分、 循環(huán)體部分、 循環(huán)控制部分的功能以及他們彼此之間的關(guān)系。尤其是多重循環(huán)中外層循環(huán)和內(nèi)層循環(huán)之間的關(guān)系。實驗內(nèi)容Programming a sub routine to
16、 calculate N!. Specific requirements :Read a number N(16) from keyboard,programming a sub routine named DAC to calcute N! , then print the result to screen in decimal form.1)源程序.8086.model small.stack.dataNUMBER DB ?,$STR db 0AH,0DH,you must input 16,$10/16OUTPUT DB 20H,4 DUP(20H),$.codePRINT PROCMO
17、V BX,10MOV SI,4L: IDIV BX ADD DX,30HMOV OUTPUTSI,DL MOV DX,0DEC SI CMP SI,0JG LCHECK0: INC SICMP OUTPUTSI,30HJNZ RIGHTMOV OUTPUTSI, CMP SI,4JL CHECK0RIGHT:LEA DX,OUTPUTMOV AH,9INT 21HMOV AH,4CHINT 21HRETPRINT ENDPstart:mov dx,datamov ds,dxLEA DX,NUMBERMOV AH,01HINT 21HSUB AL,30HJBE exitCMP AL,07HJAE
18、 EXITMOV CL,ALMOV CH,0HMOV AX,1MOV DX,011/16LP:IMUL CXLOOPNZ LPCALL PRINTexit:LEA DX,STRMOV AH,09HINT 21Hmov ah,4chint 21hend start2)運行結(jié)果貼圖3)編程與調(diào)試心得(遇到的問題和解決的辦法,以及獲得的收獲)一開始輸出的十進制數(shù)帶 0,如 0720,0002 等,后檢測為 0 即賦值 20H(空格 ) ,發(fā)現(xiàn) 6!=72,不僅去掉了開頭的 0,也去掉了末尾的 0,將 NUMBER由 +1 至 +4 檢查,遇到非 0 的數(shù)就退出檢測可以解決。實驗七實驗?zāi)康氖煜と绾卧跀?shù)
19、組中進行查找, 并返回是否成功的信息, 通過實驗, 可以掌握循環(huán)結(jié)構(gòu)的各種實現(xiàn)方法, 進一步了解循環(huán)結(jié)構(gòu)中初始化部分、 循環(huán)體部分、 循環(huán)控制部分的功能以及他們彼此之間的關(guān)系。尤其是多重循環(huán)中外層循環(huán)和內(nèi)層循環(huán)之間的關(guān)系。實驗內(nèi)容在附加段中有一個從小到大排序的無符號數(shù)字數(shù)組,其首地址在DI 中,數(shù)組的第一個單元存放數(shù)組長度。要求用折半查找法在數(shù)組中查找數(shù)N,假設(shè)該數(shù)已在AX 中,如找到, CF=0 ,并在 SI 中給出該元素在數(shù)組中的偏移地址;如未找到,CF=1 。1)源程序12/16.8086.MODEL SMALL.STACK.DATATABLE db 1,4,7,9,16,31,36,4
20、9n DB 1r db 7l db 0crlf db 0ah, 0dh, $; 回車換行.CODESTART:MOV AX,DATAMOV DS,AXMOV di,offset TABLEmov bl,nmov cl,2check:MOV al,rcmp al,ljz noadd al,lmov ah,0div clmov ah,0mov si,diadd si,axcmp si,bljz yesjl rightmov r,aljmp checkright:mov l,aljmp checkno:mov ah,0sub ah,1jmp exityes:add si,axcmp ax,0EXIT
21、:MOV AH,4CHINT 21Hend start13/162)運行結(jié)果貼圖查找數(shù)字n=1( BX),得數(shù)組中序號0,即 Table0 (AX)=1 滿足搜索條件, 使 CF=0(NC),并 用 mov si,di add si,ax使得 si 獲得 Table0 ( AX) 的偏移地址。3)編程與調(diào)試心得(遇到的問題和解決的辦法,以及獲得的收獲)一開始 div cl時忘記將AH設(shè)置成 0,結(jié)果一直循環(huán)DIV C;? ,SI+BI,IRETMOV AH,0后恢復(fù)正常實驗八實驗?zāi)康氖煜と绾卧跀?shù)組中進行查找, 并返回是否成功的信息, 通過實驗, 可以掌握循環(huán)結(jié)構(gòu)的各種實現(xiàn)方法, 進一步了解循環(huán)結(jié)構(gòu)中初始化部分、 循環(huán)體部分、 循環(huán)控制部分的功能以及他們彼此之間的關(guān)系。尤其是多重循環(huán)中外層循環(huán)和內(nèi)層循環(huán)之間的關(guān)系。實驗內(nèi)容在內(nèi)存中有一個數(shù)組,里面是放著10個學(xué)生的某科的成績,分別是:85,73,92,66,91,98,52,87,83,68 , 請用冒泡排序法將這 10
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 碼頭貨物運輸合同
- 工程熱力學(xué)模擬試答題
- 企業(yè)內(nèi)部年度財務(wù)分析報告
- 寓言故事烏鴉喝水的啟示讀后感
- 企業(yè)知識產(chǎn)權(quán)保護及維權(quán)服務(wù)協(xié)議
- 年度目標(biāo)達成報告
- 大數(shù)據(jù)挖掘在輿情監(jiān)控中的應(yīng)用實踐指南
- 如何正確使用辦公軟件提高效率
- 太陽能光伏發(fā)電系統(tǒng)安裝合同
- 人與自然紀錄片評析和諧共生的啟示
- 湖北省華中師大一附中2020-2021高一物理期中檢測試卷【含答案】
- 從生產(chǎn)工藝角度詳解磷酸鐵鋰
- 全套橋梁施工技術(shù)交底記錄
- 《教師職業(yè)道德》全書word版
- 城市定制型商業(yè)醫(yī)療保險(惠民保)知識圖譜
- GB∕T 3836.31-2021 爆炸性環(huán)境 第31部分:由防粉塵點燃外殼“t”保護的設(shè)備
- AMDAR資料的分析和應(yīng)用
- 橋梁缺陷與預(yù)防
- 新蘇教版小學(xué)科學(xué)三年級下冊全冊教案(2022年春修訂)
- 弗洛姆異化理論
- AQL抽樣標(biāo)準(zhǔn)表xls2
評論
0/150
提交評論