8086匯編語言子程序程序設計_第1頁
8086匯編語言子程序程序設計_第2頁
8086匯編語言子程序程序設計_第3頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言程序設計實驗報告學院:計算機科學與技術專業(yè):計算機科學與技術班級:計科131姓名學號實驗組實驗時間指導教師肖敏成績實驗項目名稱實驗五:8086匯編語言子程序程序設計熟悉子程序的設計方法對匯編源程序進行匯編、鏈接,在Debug環(huán)境下完成調試與運行。1、熟悉子程序的結構及注意事項2、掌握子程序的設計、調試方法1、硬件:微型計算機1臺2、 軟件:MASM軟件實驗一、使用子程序設計編程實現(xiàn)求數(shù)組ARY元素之與:編輯下面的源程序到文件Iab5、asm中:CODE SEGMENTORG 100HASSUME CS:CODE,DS:CODE,SS:CODEMAIN PROC FARMOV AX,CO

2、DEMOV DS,AXMOV TABLE ,OFFSET ARYMOV TABLE+2,OFFSET COUNTMOV TABLE+4,OFFSET SUMMOV BX,OFFSET TABLECALL PROADDMOV AX,4C00HINT 21HMAIN ENDPPROADD PROC NEARPUSH AXPUSH CXPUSH SIPUSH DIMOV SI,BXMOV DI,BX+2MOV CX,DIMOV DI,BX+4XOR AX,AXNEXT:ADD AX,SIADD SI,2LOOP NEXTMOV DI,AXPOP DIPOP SIPOP CXPOP AXRETPROA

3、DD ENDPARY DW 1,2,3,4,5,6,7,8,9,10COUNT DW 10SUM DW ?TABLE DW 3 DUP(?)CODE ENDSEND MAIN使用相應的文本編輯器建立文件LAB5 asm,內容如上所示。二、生成可執(zhí)行文件:1、匯編:C:masm masm Iab5;2、連接:C:masm link Iab5;EH卷埒庁,矣令操于將tMlaeio Asss-eniblei*iorh 5 _ RdCCZ Mllei*osof Chjei*lav/ Llnkox*U gi*ie: dh 3 - 60Ro口斗AzLmht: Mlicrosofifc Coimo 19UJ

4、Al丄J. r.srht;3 rcaeruedL.Run F11hLict File HUL.MAPI:IpIJFhai Iqg L L B J *LINK warn直n? L4021 = no 3tach scfrrvGiit三、請寫出此程序中的變量 ary,cou nt,sum的EA,并判斷此程序的功能:四、用debug調試此程序時,第一條指令的段內EA就是多少?此程序數(shù)據(jù)段內偏移地址 為0的字單元數(shù)據(jù)為多少?其對應的機器指令就是什么?L ;加載程序文件Iab5、exeR ;查瞧IP與CS寄存器的內容D DS:0 ;查瞧當前數(shù)據(jù)段內偏移地址為0的字單元數(shù)據(jù)U;查瞧機器指令D: nasbll

5、debuU02;eBlBU02:eO291402:00001CK-015E DK=0e0O SP=O0OOSS-1412 US 1412 IP 0100BP=O0O0 SI=GM0 DI=0OOONV UP fcJ PL NZ NH PO MLCD20II9f00?n0FE IDrod69050E8A1)3肪H17orF400-01ni冊fl?FFFFFFFFFi卜卜卜卜PFHFFFFF汗FFFFnFBIS05et118000214 FFFFFFFr00刖00閃HHllfi伽finUH的pm加朋uhwnOHHR刖CD21CBeg00oe000e-ee00ee00202026刖:4I汕2076-

6、efl則2H20202020JU盹HOVAKJ1;121412:6169 U12 01O3 1412 0M15U12;01OS 1412:0m 1412:0H7 5412;eilft 1412:6110B812 毎MDVHX.14128ED8MOVDS.flHMUVWORD P1R4山劉1制070650015461MOVJORD PTH(ei5Al:0154C/06C01S&eiMOVWORD PTR015CL0156BB58A1MOVBX.eiSBE80500CRLL0122B8B0&CHOVAM,4COO1402:0050實驗二:編寫一個子程序,實現(xiàn)在屏幕的指定位置,用指定顏色,顯示一個用

7、0結尾的字 符串源程序如下data segme ntstr db display stri ng,0 data endscode segme ntassume cs:code,ds:data sta比mov ax,datamov ds,ax mov dh,8 mov dl,21 mov cl,3mov si,offset str call show_str mov ax,4c00h int 21hshow_str proc n ear push ax push cx push dx push es push sipush dimov ax,0b800hmov es,axdec dhmov al

8、,160mul dhadd dl,dlmov dh,0 ;計算顯示在屏幕位置add ax,dx mov di,ax mov ah,cl x: mov cl,ds:si mov ch,0 jcxz f mov al,cl mov es:di,ax inc si inc di inc di jmp x f: pop di pop si pop es pop dx pop cx pop ax ret show_str endp code ends end start實驗三:編寫一個子程序,實現(xiàn)將word型數(shù)據(jù)以十進制形式顯示出來 源程序如下:assume cs:codedata segme ntdb

9、 10 dup(0)data endsstack segme ntdb 16 dup(0)stack endscode segme ntsta比mov ax, datamov ds, axmov ax, stackmov ss, axmov sp, 16mov dx, 0c1hmov ax, 76f3hmov si, 0call dwtocmov dh, 8mov dl, 3mov cl, 2call show_strmov ah, 01hint 21hmov ax, 4cOOhint 21h; 子程序:dwtoc;功能:將dword型數(shù)據(jù)轉變成表示十進制的字符串,字符串以0結尾;參數(shù):(ax

10、) = dword型數(shù)據(jù)的低16位;(dx) = dword型數(shù)據(jù)的高16位;ds:si指向字符串首地址;返回:無dwtoc:mov cx, 0push cxs_dwtoc:mov cx, 10;除數(shù)call divdw;余數(shù)在cx中add cx, 30hpush cx ;保存余數(shù)的ASCII形式;判斷就是否商為0,如果高低16位都為0,則返回mov cx, dxjcxz ok_dxz;高位不為0,則直接跳回,繼續(xù)執(zhí)行運算jmp short s_dwtoc;商的高位為0ok_dxz:mov cx, axjcxz ok_axzjmp short s_dwtoc;商的低位為0ok_axz:;賦值到

11、ds:simov dx, si ;保存si,si為字符串的首地址loop_dtoc:pop cxmov ds:si, cljcxz en d_dwtoc inc sijmp short loop_dtocmov si, dxen d_dwtoc:mov si, dxretdtoc:;先把一個0放進堆棧,在后面s2從堆棧中取出的時候,可以根據(jù)cx為0跳轉mov cx, 0push cxs1_dtoc:mov dx, 0mov cx, 10div cxmov cx, dx ; dx 余數(shù)add cx, 30hpush cx;保存在堆棧就可以跳出循環(huán)mov cx, ax ; ax為商,當商為0的時候

12、,各位的值就已經得到了jcxz ok1_dtocjmp short s1_dtocok1_dtoc:mov ch, 0s2_dtoc:從堆棧中取出pop cxjcxz ok2_dtoc mov ds:si, cl inc sijmp short s2_dtoc ok2_dtoc:retshow_str:push axpush bxpush cxpush dxpush espush si;計算好字串開始顯示的地址Y = 160*(行數(shù)-1) + 列數(shù)*2-2, B800;循環(huán)將參數(shù)里的字串寫進顯卡內存,并檢測到0就返回;bx = 160*(行數(shù)-1)mov bh, dhsub bh, 1mov

13、al, 160 mul bhmov si, ax ; si為根據(jù)行數(shù)算出來的偏移值;ax =列數(shù) *2-2mov bl, dlmov al, 2mul blsub ax, 2;根據(jù)列數(shù)算出來的偏移值add si, ax ;行數(shù)與列數(shù)的與存在 SI中了 mov ax, 0b800hmov es, axmov bx, si ;將si的值保存在bx中,bx為顯存顯示偏移值 mov si, 0;題目要求。mov dl, cl ;保存字體顏色屬性mov ch, 0s:mov cl, ds:si mov es:bx, cljcxz okmov es:bx+1, dlinc siadd bx, 2jmp s

14、hort sok:pop sipop espop dxpop cxpop bxpop axret;子程序:divdw;要求:進行不會除法溢出的除法運算,被除數(shù)為dword,除數(shù)為word,結果為dword;參數(shù):(ax)= 被除數(shù)dword型的低16位; (dx)= 被除數(shù)dword型的高16位;(cx)=除數(shù);返回:(dx)=結果的高16位;(ax)=結果的低16位;(cx)=余數(shù)divdw:mov bx, ax ;緩存ax被除數(shù)的低16位mov ax, dx ; ax = H,被除數(shù)的高16位mov dx, 0div cx ; ax 為商,dx 為余數(shù) =rem(H/N) * 65536p

15、ush ax ;結果的商,也就就是最后要放在dx中的mov ax, bx ; dx為rem(H/N) * 65536, 為高16位,ax為低16位,再進行一次除法運算 div cx ; ax為商最后結果的低16位,dx為余數(shù)為最后結果,應賦給cxmov cx, dxpop dxretcode endsend start實驗一:變量 ary,count,sum的 EA分別就是 00140,00154,00156此程序的功能就是數(shù)列求與丿| ttit-V-h實驗MAINCODE丄 on-1P AKFRO ADDCCibE.QQ1Z2-1NEARHEX!00132-1LABEL結ARYUWE;2VAR果j COTJNTCUDE001 542VARCODESUM2VARCODETAPJ ,FCODEOOl 582VAR實驗砒 errultftor screen (HOk25 cbiar;)display 審tr* 1 ng實驗三:實 驗 總 結這次實驗,感覺難度

溫馨提示

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

評論

0/150

提交評論