西安交通大學匯編語言實驗報告_第1頁
西安交通大學匯編語言實驗報告_第2頁
西安交通大學匯編語言實驗報告_第3頁
西安交通大學匯編語言實驗報告_第4頁
西安交通大學匯編語言實驗報告_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上80X86匯編語言程序設計課內(nèi)實驗報告班級:電信碩41班姓名: 周翔宇 學號: 班級電信碩41實驗時間ü 2016-4-1ü 206-4-23姓名周翔宇學號一、實驗內(nèi)容概述實驗一 熟悉匯編語言實驗環(huán)境(masm、link、debug/td)實驗二 循環(huán)程序設計及分支程序設計實驗三 子程序及 DOS/BIOS 調用程序設計實驗四 高級匯編語言技術實驗五 輸入輸出程序設計實驗六 BIOS 和 DOS 中二、實驗步驟實驗一、masm, link, debug 的過程Debug調試命令:a, d, t, g, r, u, q等。 A (Assemble):

2、 匯編語句 Aaddress C (Compare): 比較內(nèi)存 C range address D (Display): 顯示內(nèi)存 Daddress或 Drange E (Enter): 改變內(nèi)存 E addresslist F (Fill): 填充內(nèi)存 F range list G (Go): 執(zhí)行程序 G=addressaddressaddress. H: 十六進制運算命令 Haddressdrive|sector|sector I (Input): 輸入 I port address L (Load): 裝入內(nèi)存 Laddressdrive|sector|sector M (Move)

3、: 傳送內(nèi)存 M range address N (Name): 定義文件和參數(shù) N d:pathfilename.ext O (Output): 輸出字節(jié) O port address byte P (Proceed): 在下條指令前停止 P =addressvalue Q (Quit): 結束 DEBUG程序 Q R (Register): 顯示寄存器/標志位 R register name S (Search): 撿索字符 S range list T (Trace): 執(zhí)行并顯示(跟蹤) T =addressvalue U (Unassemble): 反匯編指令 U address或

4、Urange W (Write): 把文件或數(shù)據(jù)寫盤 W addressdrive|sector|sector STEP1首先進入cmd命令運行界面STEP2進入masm5文件夾 cd d:masm5 STEP3Masm 輸入程序代碼文件 xxx 然后回車STEP4Link 輸入程序代碼文件 xxx 然后回車STEP5Debug xxx.exe 進入了Debug界面實驗二、循環(huán)程序設計及分支程序設計(1) 循環(huán)程序設計 數(shù)據(jù)段中已定義了一個有 n 個字數(shù)據(jù)的數(shù)組 M, 試編寫一程序求出M 中絕對值最大的數(shù),把它放在數(shù)據(jù)段的 M+2n 單元中,并將該數(shù)的偏移地址存放在M+2(n+1)單元中。程序

5、思路:STEP1取第一個數(shù),記錄此數(shù);STEP2此數(shù)是正數(shù)嗎?是轉到STEP3,否轉到STEP4;STEP3是正數(shù),即為絕對值,轉去判斷下一個數(shù);STEP4不是正數(shù),變?yōu)槠浣^對值;STEP5判斷絕對值大??;STEP6(AX)<(BX),使(AX)中為絕對值最大的數(shù);STEP7記下絕對值最大的數(shù)的地址,記下此數(shù);STEP8數(shù)判斷完了嗎?是結束,否繼續(xù);STEP9轉到STEP1;程序源代碼:見附件1(2) 分支程序設計 設計一程序,接收從鍵盤輸入的數(shù)字(15),并對每個數(shù)字的輸入次數(shù)進行計數(shù),計數(shù)結果存放在以 COUNT 為首地址的數(shù)組中。(最好能將計數(shù)結果打印出來)。程序思路:STEP 1

6、 設置一個五路分支,輸入數(shù)為X則跳轉到X步;STEP X COUNTX+1程序源代碼:見附件2實驗三、子程序及 DOS/BIOS 調用程序設計 設有 10 個學生的成績分別是 76,69,84,90,73,88,99,63,100 和 80 分。 試編制一個子程序統(tǒng)計 6069 分,7079 分,8089 分,9099 分和 100 分的人數(shù)并分別存放到 S6, S7, S8, S9 和 S10 單元中。程序思路:將成績除以10然后減6作為偏移地址,然后將此地址加1則表示人數(shù)加1程序代碼:見附件3實驗四、 高級匯編語言技術 試編寫一段程序,完成以下功能:若給定名為 X 的字符串長度大于 5 時

7、,下列指令將匯編 10 次。 ADD AX, AX (要求:使用條件匯編,編譯過程中生成 LST 文件,查看宏展開情況)程序思路:用($-X)代表字符串長度,然后使用條件匯編指令IF程序代碼:見附件4實驗五、輸入輸出程序設計 編寫程序,使類型 1CH 的中斷向量指向中斷處理程序 COUNT,COUNT 統(tǒng)計 1CH 中斷次數(shù)并存入單元 M 中。 程序思路:STEP1取中斷類型號STEP2取中斷向量STEP3偏移地址送IP,段地址送CS(上述步驟為保存原中斷向量)STEP4設置新的中斷向量STEP5轉入中斷處理程序,并且中斷一次M累加1STEP6中斷返回程序代碼:見附件5實驗六、.BIOS 和

8、DOS 中斷 編寫一個程序,接收從鍵盤輸入的 10 個十進制數(shù)字,輸入回車符則停止輸入,然后將這些數(shù)字加密后(用 XLAT 指令變換)存入內(nèi)存緩沖區(qū) BUFFER。加密表為: 輸入數(shù)字: 0,1,2,3,4,5,6,7,8,9 密碼數(shù)字: 7,5,9,1,3,6,8,0,2,4程序思路:將密碼存入數(shù)據(jù)段,利用XLAT指令,設置AL表示數(shù)字值,將對應表中數(shù)據(jù)送入程序代碼:見附件六 三、實驗中遇到的問題及其解決方法1、問題1問題描述:絕對值如何得到問題是在實驗一中遇到,解決思路是:利用反碼的思想解決問題的步驟是:是負數(shù)則對負數(shù)取反碼2、問題2n問題描述:進入Debug界面后,更改輸入,然后輸入與要

9、求不符n問題是在實驗X中遇到,解決的思路是:理清調試步驟n解決問題的步驟是:Debug界面進入后修改了輸入然后必須退出Debug界面然后修改后再次重新進入Debug界面3、問題3問題描述:如何調用中斷,鍵盤輸入,并且屏幕顯示問題是在實驗二遇到的,解決的思路是:調用DOS功能解決問題的步驟驟是:調用DOS功能(INT 21H)并選取AL=2從鍵盤輸入;選取AL=30在屏幕上顯示,然后選取AL=4CH返回4、問題4問題描述:如何設置中斷向量問題是在實驗五遇到的,解決思路是,保存原有中斷向量,設置新的中斷向量,恢復原有的中斷向量解決問題的步驟是:首先保存原有的中斷向量,然后設置新的中斷向量,進入中斷

10、程序,最后恢復原有中斷向量四、實驗結果實驗二(1)輸出結果:實驗二(2)輸入:輸出實驗三、輸出結果:數(shù)據(jù)段:實驗四、反匯編:顯示內(nèi)存:查看LST文件:文件內(nèi)容截圖:實驗五、內(nèi)存結果:實驗六、輸入:輸出: 五、附件 附件1:data segment M dw 1,4,3,2,-1,-5,-8,-9,'$'m1 dw 10 dup(?)disa db 'the location of M+2n is : $'disb db 'the location of M+2(n+1)is : $'disc db 0dh,0ah,24hdata endsstac

11、k segment stackdw 100 dup(?)top label wordstack endscode segmentmain proc farassume ss:stack,cs:code,ds:datastart:mov ax,stackmov ss,axlea sp,topmov ax,datamov ds,axxor si,si;用來放絕對值最大數(shù)的輸出lea bx,Mmov si,bx;記錄第一個數(shù)的地址mov cx,0;記錄第一個數(shù)值假設是0L1:mov ax,bxcmp ax,24hje L4rol ax,1and ax,1hcmp ax,1;是負數(shù)的話就求原碼je L

12、2mov ax,bx;正數(shù)的話就直接比較mov di,0cmp cx,axjbe L3add bx,2jmp L1L2:mov di,1mov ax,bx;對負數(shù)進行求原碼運算sub ax,1not axcmp cx,axjbe L3;記錄絕對值比較大的數(shù)還有符號add bx,2jmp L1L3:mov cx,ax;改變cx的值mov si,bx;改變si的地址值mov dx,diadd bx,2jmp L1L4:lea bx,m1mov bx-2,cx;M+2n存放絕對值最大的數(shù)mov bx,si;M+2(n+1)存放他的地址mov bx+2,dx;存放他的符號L5:lea dx,disc;

13、輸出換行mov ah,9int 21hlea dx,disa;輸出提示語mov ah,9int 21hlea bx,m1mov dx,bx+2cmp dx,0je L51mov dl,'-'mov ah,2int 21hL51:xor si,silea bx,m1;把結果地址傳給bxmov si,bx-2;把結果傳給simov cx,4L6:push cxmov cl,4rol si,clmov dx,siand dl,0fhcmp dl,9jbe L7add dl,7hL7:add dl,30hmov ah,2hint 21hpop cxloop L6L8:lea dx,di

14、sc;輸出換行mov ah,9int 21hlea dx,disb;輸出提示語mov ah,9int 21hxor si,silea bx,m1mov si,bxmov cx,4L9:push cxmov cl,4rol si,clmov dx,siand dl,0fhcmp dl,9jbe L10add dl,7hL10:add dl,30hmov ah,2hint 21hpop cxloop L9 mov ah,4chint 21hmain endpcode endsend start附件2:DATAS SEGMENTCOUNT db 5 dup (0)DATAS ENDSCODES SE

15、GMENT ASSUME CS:CODES,DS:DATASSTART: push ds sub ax,ax push ax MOV AX,DATAS MOV DS,AXnext: mov ah,01h int 21h cmp al,'1' jz C1 ;jz當zf=1跳轉 cmp al,'2' jz C2 cmp al,'3' jz C3 cmp al,'4' jz C4 cmp al,'5' jz C5 jmp exitC1: mov cl,COUNT add cl,1 mov COUNT0,cl jmp ne

16、xtC2: mov bx,1 mov cl,COUNTbx add cl,1 mov COUNTbx,cl jmp nextC3: mov bx,2 mov cl,COUNTbx add cl,1 mov COUNTbx,cl jmp nextC4: mov bx,3 mov cl,COUNTbx add cl,1 mov COUNTbx,cl jmp nextC5: mov bx,4 mov cl,COUNTbx add cl,1 mov COUNTbx,cl jmp next exit: mov dl,COUNT0 add dl,30h mov ah,02 int 21h mov dl,C

17、OUNT1 add dl,30h mov ah,02 int 21h mov dl,COUNT2 add dl,30h mov ah,02 int 21h mov dl,COUNT3 add dl,30h mov ah,02 int 21h mov dl,COUNT4 add dl,30h mov ah,02 int 21h mov ah,4ch int 21hCODES ENDSEND START附件3:DSEGSEGMENTSDW 76,69,84,90,73,88,99,63,100,80S6DW 0S7DW 0S8DW 0S9DW 0S10DW 0DSEGENDSCSEGSEGMENT

18、MAINPROCFARASSUME CS:CSEG,DS:DSEGstart:PUSHDS;設置返回DOSSUBAX,AXPUSHAXMOVAX,DSEGMOVDS,AXBEGIN:MOVCX,10CALLCOUNTRETMAINENDPCOUNTPROCNEAR;成績統(tǒng)計子程序MOVSI,0NEXT:MOVAX,SSIMOVBX,10; DIVBL;計算公式為:(成績)/10-6)*2送(BX)MOVBL,AL; SUBBX,6;應為只統(tǒng)計60分以上成績SALBX,1;(BX)*2INCS6BX;S6是S6,S7,S8,S9和S10單元的首地址ADDSI,2LOOPNEXTRETCOUNTE

19、NDP;COUNT子程序結束CSEGENDS;以上定義代碼段ENDstart附件4:DSEG SEGMENT DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEGMAIN PROC FAR EXE MACRO A IF ($-EXE) GT 5 REPT 10 ADD AX,AX ENDM ENDIFENDMMOV AX,DSEGMOV DS,AXEXE 'ABCDEF'MOV AH,1INT 21HMOV AX,4C00HINT 21HMAIN ENDPCSEG ENDSEND MAIN附件5:DATAS SEGMENTM DB 0DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART:MOV AX,DATASMOV DS,AXMOV AL,1CHMOV AH,35HIN

溫馨提示

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

評論

0/150

提交評論