微機原理及匯編指導書(2012)_第1頁
微機原理及匯編指導書(2012)_第2頁
微機原理及匯編指導書(2012)_第3頁
微機原理及匯編指導書(2012)_第4頁
微機原理及匯編指導書(2012)_第5頁
已閱讀5頁,還剩17頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言程序設計實驗指導書微機原理及匯編語言程序設計實驗指導書 苗暹 胡寧亞計算機實驗中心目 錄實驗一 DEBUG的使用142實驗二 數制轉換程序146實驗三 數組排序程序147實驗四 數據的輸入與輸出程序149實驗五 子程序設計150實驗六 宏調用程序設計151實驗一 DEBUG的使用【實驗目的】1學習使用DEBUG調試程序的各種命令。2掌握8088/8086指令系統-數據傳送指令、算術指令。3掌握用DEBUG調試程序的方法。4掌握8088/8086 CPU寄存器的用途和存儲器組織及它們之間的關系。5掌握內存操作數及尋址方法。6掌握匯編語言偽操作:BYTE PTR,WORD PTR。7熟悉在

2、PC機上建立、匯編、連接、調試和運行匯編語言程序的過程。8掌握數據傳送、算術運算、BCD碼調整和循環指令的用法,掌握字符顯示的方法。【實驗性質】驗證性實驗(學時數:2H)【實驗內容】一、DEBUG 命令的使用1.敲 DEBUG 進入 DEBUG 環境,顯示提示符 '_ '。2.用命令 D100 10F 觀察內存中的16進制碼及屏幕右邊的ASCII字符。3.用命令 E100 30 31 32 3F 將30H3FH寫入地址為100H開始的內存單元中,再用D命令觀察結果,看鍵入的16進制數是什么字符的ASCII碼?4.用命令 F100 L0F 'A' 將'A&

3、#39;的ASCII碼填入內存,用D命令查看結果。5.用命令 F110 11F 41 將41H 填入內存,用D命令觀察結果并比較。6.用R 命令檢查各寄存器內容,特別注意AX,BX,CX,DX,IP及標志位中ZF,CF和AF的內容。7.用R命令將AX,BX內容改寫為1234H及5678H。8.用H命令檢查下列各組16進制數加減結果并和你的手算結果比較:(1)34H,22H (2)56H,78H (3)A5,79H(4)1284H,5678H(5)A758,347FH二、8088/8086常用指令練習1.傳送指令1)用A命令在內存100H處鍵入下列內容:MOVAX,1234MOVBX,5678X

4、CHGAX,BXMOVAH,34MOVAL,56MOVCX,75ABXCHGAX,CX2)用U命令檢查鍵入的程序,特別注意左邊的機器碼。3)用T命令逐條運行這些指令,每運行一行檢查并記錄有關寄存器及IP的變化情況。并注意標志位有無變化。2.加減法指令:1)用A命令在內存200H處鍵入下列內容:MOVAH,34MOVAL,2EADDAL,AHSUBAL,78MOVCX,1234MOVDX,5678ADDCX,DXSUBCX,AXSUBCX,CX2)用U命令檢查鍵入的程序及對應的機器碼。3)用T命令逐條運行這些指令,檢查并記錄有關寄存器及ZF情況。思考題: 這次運行還是打入T,行不行?如何單步運行

5、上述小程序?用R命令檢查一下IP的內容。注意T命令與IP的關系。3.帶進位加減法:1)用A命令在內存300H處鍵入下列內容,并用U命令檢查:MOVAH,12MOVAL,89MOVCH,56MOVCL,98ADDAL,CLADCAH,CHMOVDH,A7MOVDL,58SUBDL,7FSBBDH,342)用T命令逐條運行這些指令,檢查并記錄有關寄存器及CF內容。3)上面這段程序若改用16位操作指令達到同樣結果,怎么改?試修改并運行之。4.BCD碼加減法1)內容:MOVAL,58ADDAL,25DAA2)要求:用A 命令鍵入,U命令檢查,T命令逐條運行并記錄有關寄存器及AF內容。三、內存操作數及各

6、種尋址方式使用: 1)用A命令在內存400H處鍵入下列內容,并用U命令檢查:MOVAX,1234 MOV1000,AXMOVBX,1002MOVBYTE PTRBX,20MOVDL,39INCBXMOVBX,DLDECDLMOVSI,3MOVBX+SI,DLMOVBX+SI+1,DLMOVWORD PTRBX+SI+2,28462)用T命令逐條運行這些指令,每運行一條有關內存操作數的指令,要用D命令檢查并記錄有關內存單元的內容并注明是什么尋址方式。注意:D命令顯示結果中右邊的ASCII字符及雙字節數存放法。思考題: 有關指令中BYTE PTR及WORD PTR偽操作不加行不行?試一試。 四、D

7、EBUG環境下匯編運行程序方法用A命令匯編程序,編程完成將DS:1000開始的10個字節的內存單元的內容相加,并把相加結果存放在DS:100A 內存單元中,用DEBUG調試運行該程序,并察看運行結果。內容: MOV CX,0AH MOV AL,0 MOV BX,1000LL: ADD AL,BX INC BX DEC CX JNZ LL MOV BX,AL INT 3步驟:1)用A命令將程序鍵入到100H開始的內存中,在鍵入時記下標號LL的實際地址,在鍵入JNZ指令時LL用實際地址值代替。2)用U命令檢查鍵入的程序及對應的機器碼。3)用E1000 01 02 03 04 05 06 07 08

8、 09 0A將1000H開始的前10個內存單元的內容修改為01,02,03,04,050A,用D命令查看修改結果。4)用T命令逐條運行上述小程序指令,檢查并記錄有關寄存器、存儲單元內容及ZF情況。5)用F2000 L0A 02 03 04 05 0B 將1000H開始的10 個內存單元的內容修改為02,03,04,050B。用D命令查看修改結果。6)用G=100 全速運行上述小程序,用D1000 100F 查看運行結果。思考題: 可否隨意在DEBUG提示符“-”后不帶參數發出命令G?什么情況下使用命令G時,可不用“=”給出執行的首地址?五、兩個多位十進制數相加要求:將下面程序在匯編平臺下,完整

9、地進行匯編、連接、運行,然后用DEBUG軟件調入可執行文件到內存,用反匯編命令查看實際程序及數據區內容,用t命令逐條執行,以觀察各寄存器及數據區內存的數據變化情況,然后使用p命令和g命令執行,以觀察執行過程有何特點。將兩個5位十進制數相加,要求被加數(本題選47193)和加數(本題選28056)均以ASCII碼形式各自順序存放在以DATAl和DATA2為首的5個內存單元中(低位在前),結果送回以DATA3為首的5個內存單元中(低位在前),并顯示相加的結果。實驗程序和結果如下:DATASEGMENTDATA1DB 33H,39H,31H,37H,34H ;存放被加數47193,ASCII碼形式,

10、低位在前DATA2DB 36H,35H,30H,38H,32H ;存放加數28056,ASCII碼形式,低位在前DATA3 DB 5 DUP(?) ;留出5個存放結果的單元DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AXMOV CX,5 ;循環次數置5,5個位要相加5次MOV SI,0 ;SI放地址位移量,每個數的第一字節地址位移量為0CLC ;CF清0,防止第1個字節相加時ADC指令多加CF中可能的1NEXT:MOV AL,DATA1SI ;取被加數一個字節送AL,DATA1偏移地址SI為有效地址ADC

11、AL,DATA2SI ;AL加數對應字節CF(低位相加時可能的進位)結果送ALAAA ;AL中兩字節相加的和調整成非壓縮的BCD碼,進位在CF中MOV DATA3SI,AL ;結果送入DATA3對應字節單元中INC SI ;地址位移量加1指向高一位字節單元 LOOP NEXT ;5次未到,繼續循環MOV SI,5 ;顯示5個位,SI中的數既是循環次數又作地址位移量DISP:ADD DATA3SI-1,30H ;將結果從高位單元開始把非壓縮的BCD碼變成ASCII碼 MOV DL,DATA3SI-1 ;將ASCII碼送DL以滿足2號功能調用的規定要求 MOV AH,2 ;功能號送AH INT 2

12、1H ;調用2號功能,顯示一位數字 DEC SI ;次數減1 JNZ DISP ;5次未到,繼續循環 MOV AH,4CH ;功能號送AH INT 21H ;調用4CH號功能,返回DOSCODEENDS END START運行結果:75249思考題:1.上述程序只顯示了相加的結果,沒有顯示被加數和加數,如果在上述程序的基礎上將顯示格式改為471932805675249,則程序如何修改?2.上述程序沒有考慮運算結果最高位有進位的情況,如果考慮可能產生的進位,則要顯示完整的結果,程序如何修改?(提示:INC和LOOP指令均不影響CF)【報告要求】1.列出8086常用指令練習部分的逐條運行記錄。2.

13、列出DEBUG下調試運行小程序的運行步驟和運行結果。3.回答思考題。附:DEBUG 命令1.打 DEBUG 進入 DEBUG,顯示提示苻 '_ '。2.退出DEBUG命令:Q3.顯示內存命令:D 起始地址 結束地址4.修改內存命令:E 起始地址,連續修改打空格鍵。打回車鍵退出E命令。5.檢查寄存器命令:R標志位顯示10CFCYNCZFZRNZSFNGPLAFACNAOFOVNVPFPEPODFDNUPIFEIDI6.修改寄存器命令:R 寄存器名7.小匯編命令:A 起始地址,不輸入指令打回車鍵退出A命令。8.反匯編命令:U 起始地址 結束地址9.文件命名命令:N 盤號:文件名10

14、.讀文件命令:L 內存地址11.寫文件命令:W 內存地址10.讀扇區命令:L 內存地址 盤號(0-A:,1-B:) 扇區號 扇區數11.寫扇區命令:W 內存地址 盤號 扇區號 扇區數12.運行命令:G=起始地址 結束(斷點)地址13.單步命令:T=起始地址 運行指令數,進入子程序內部。14.單步命令:P=起始地址 運行指令數,不進入子程序內部。15.內存搬家命令:M 起始地址 結束地址 目的地址實驗二 數制轉換程序【實驗目的】1掌握匯編語言程序結構。2掌握建立、匯編、鏈接、調試和運行匯編程序的過程。 3掌握DOS功能調用 INT 21H 02號功能字符顯示輸出方法。4掌握INT 21H 4C號

15、功能返回系統的方法。【實驗性質】驗證性實驗(學時數:2H)【實驗內容】一、 完成一個十六位二進制數到十六進制數的轉換操作程序設計。參考程序:;將二進制數一邊轉換成十六進制數一邊顯示(用2號功能調用)DATASEGMENTBUFADW1111001000110100B;F234HDATAENDSCODESEGMENTASSUME CS:CODE,DS:DATABEG:MOV AX,DATAMOV DS,AXMOV DX,BUFAMOV CH,4;循環控制十六進制數顯示位數MOV CL,4ROTATE: ROL DX,CL;循環左移4位,將高位十六進制數移到低位 MOV BX,DX;保護移動后的數

16、AND DX,0FH;屏蔽掉高位保留該低位數CMP DL,9JG LADD DL,30H;轉換成ASCII碼MOV AH,2;送顯示INT 21HJMP NEXTL:ADD DL,37HMOV AH,2INT 21HNEXT: MOV DX,BXDEC CHJNZ ROTATEMOV AH,4CHINT 21HCODE ENDSEND START二、把上題改造成COM文件的編程格式,匯編、鏈接和運行調試該程序。參考程序:CODESEGMENTASSUME CS:CODEORG 100H BEG:JMP STARTBUFADW0001001000110100B;1234H(用戶程序數據區)STA

17、RT:MOV DX,BUFAMOV CH,4;循環控制十六進制數顯示位數MOV CL,4ROTATE: ROL DX,CL;循環左移4位,將高位十六進制數移到低位 MOV BX,DX;保護移動后的數AND DX,0FH;屏蔽掉高位保留該低位數CMP DL,9JG LADD DL,30H;轉換成ASCII碼MOV AH,2;送顯示INT 21HJMP NEXTL:ADD DL,37HMOV AH,2INT 21HNEXT: DEC CHMOV DX,BXJNZ ROTATEMOV AH,4CHINT 21HCODE ENDSEND BEG三、參照上述程序完成一個十六位二進制數到十進制數的轉換操作

18、程序設計。四、加分題:完成從鍵盤輸入一個任意十六位二進制數到十六進制數的轉換操作程序設計。提示:在數據區定義19個字節的字符串區,用INT 21H 的10#功能,進行字符串輸入,判斷實際輸入的字節數是否為16個,每個字節的內容是否為30H或31H,不是,則提示重新輸入或退出,是,則把該區域的16個ASCII碼30H、31H的字符從低位到高位(或相反順序)轉換成1010110101110111的形式,用上述程序進行轉換輸出。思考題:1)若在源程序中把INT 21H的'H'省去,會產生什么現象?2)把 INT 21H 4CH號功能改為 INT 20H,行不行?3)從鍵盤輸入的二進制

19、ASCII字符串,在轉換成十六進制數據時,有哪幾大步驟?【實驗要求】1.列出自編程序的程序清單,并加適當注釋。2.寫出匯編,連接及調試程序時產生的錯誤,其原因及解決辦法。3.總結EXE文件和COM文件的編程格式。4.回答思考題。實驗三 數組排序程序【實驗目的】1. 循環控制條件的設計。 2. 存儲器操作數的尋址方式。3. 對內存的數據處理方法。【實驗性質】驗證性實驗(學時數:3H)【實驗內容】 1、在內存緩沖區存放10個無序整數,按照從小到大的順序進行排序,用debug查看排序結果。參考程序:DATASEGMENTST_ADDW 23,78,45,99,128,64,32,200,1,0DAT

20、A ENDSPROGRAMSEGMENTMAIN PROC FARASSUME CS:PROGRAM,DS:DATASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV CX,10DEC CXLOOP1: MOV DI,CXMOV BX,0LOOP2:MOV AX,ST_ADBXCMP AX,ST_ADBX+2JGE COTINUEXCHG AX,ST_ADBX+2MOV ST_ADBX,AXCOTINUE:ADD BX,2LOOP LOOP2MOV CX,DILOOP LOOP1RETMAINENDPPROGRAM ENDSEND STAR

21、T2、加分題:從鍵盤輸入10個無序10進制整數,對這10個數進行排序,將排序后的結果送屏幕顯示。3、加分題:從鍵盤輸入一個10進制整數,插入前面已整序的10個數中,要求插入后的11個數也是整序好的,將插入后的結果送屏幕顯示。【報告要求】1. 給出該程序的流程圖。2. 給出調試通過的自編程序清單和調試記錄3. 寫出實驗體會。實驗四 從鍵盤輸入數據并顯示實驗【實驗目的】1掌握鍵盤輸入字符的方法和十六進制數字字符的ASCII碼轉換為二進制數的原理。2掌握子程序定義和調用的方法。3掌握循環移位指令的用法和無符號數比較大小的方法。【實驗性質】驗證性實驗(學時數:2H)【實驗內容】從鍵盤上輸入4位十六進制

22、數,將其轉換為16位二進制數并在顯示器上顯示出來。要求輸入的數字字符串以回車鍵結束。如果輸入的數字超過4個,則以最后輸入的4個為準。若按下的鍵不是十六進制數字字符,則顯示出錯信息。參考程序:【實驗提示】從鍵盤上輸入的十六進制數字字符進入計算機后并不是相應的十六進制數或二進制數,而是與字符對應的ASCII碼,現要找出ASCII碼與該數字對應的二進制數之間的關系。關系如下:十六進制數字字符字符對應的ASCII碼數字對應的二進制數0 930H 39HASCII碼 - 30HA F41H 46HASCII碼 - 37Ha f61H 66HASCII碼 - 57H【報告要求】1給出該問題的程序設計流程圖

23、。2給出該程序的全部代碼,并加上注釋。3總結實驗體會。實驗五 子程序設計【實驗目的】 掌握一般子程序的調用和返回方法,掌握定義過程的偽指令的用法。【實驗性質】設計性實驗(學時數:3H)【實驗內容】1、完成兩個四位十進制數相加的程序設計,形式為:2345+7869=10214(1)要求所有中斷調用全部采用子程序的形式完成。(2)要求考慮進位位。完善程序并調試通過。(3)仿照下述程序,完成八位十進制數相加的程序設計。要求考慮進位位。完善程序并調試通過。參考程序:DISPMACRO VARMOV AH,2MOV DL,VARINT 21HENDMDATASEGMENTSTR1DB 'PLEA

24、SE INPUT A NUMBER (EXP:2345)$'STR2DB 'PLEASE INPUT ANOTHER NUMBER(EXP:7868)$'STR3DB 0DH,0AH,'$'BUF1DB 10,?,11 DUP(?)BUF2DB 10,?,11 DUP(?)BUF3DB 4 DUP(?),'$'DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATABEGIN:MOV AX,DATAMOV DS,AXMOV DI,OFFSET STR1CALL DISPL ;SHOW 'PLEASE IN

25、PUT NUMBER1:'MOV DI,OFFSET BUF1CALL GETNUM ;GET NUMBER1 FROM KEYBOARDMOV DI,OFFSET STR3CALL DISPL ;CRLFMOV DI,OFFSET STR2CALL DISPL ;SHOW 'PLEASE INPUT NUMBER2:'MOV DI,OFFSET BUF2CALL GETNUM ;GET NUMBER2 FROM KEYBOARDMOV DI,OFFSET STR3CALL DISPL ;CRLFXOR BX,BXMOV BL,BUF1+1MOV BUF1+2BX,&#

26、39;$' ;BEHIND NUMBER1 ADD '$'MOV DI,OFFSET BUF1+2CALL DISPL ;SHOW NUMBER1DISP '+' ;SHOW '+'XOR BX,BXMOV BL,BUF2+1MOV BUF2+2BX,'$' ;BEHIND NUMBER2 ADD '$'MOV DI,OFFSET BUF2+2CALL DISPL ;SHOW NUMBER2DISP '=' ;SHOW '=' LEA SI, BUF1+2LEA DI, BU

27、F2+2CALL DAAD ;ADD NUMBERSMOV DI,OFFSET BUF3CALL DISPL ;SHOW RESULT MOV AH,4CH ;RETURN DOSINT 21HDAADPROC NEAR ;SUBPROCESS OF ADDMOV BX,4 N1:MOV AL,SI+BX-1ADC AL,DI+BX-1AAAADD AL,30HMOV BUF3BX-1,ALDEC BX JNZ N1RETDAADENDPDISPLPROC NEAR ;SUBPROCESS OF DISPLAYMOV AH,9MOV DX,DIINT 21HRETDISPLENDPGETNUM

28、 PROC NEAR ;SUBPROCESS OF GETNUMMOV AH,0AHMOV DX,DIINT 21HRETGETNUMENDPCODE ENDSEND BEGIN2、加分題:根據輸入的運算符來實現+、-、*、/ 四則運算,并考慮進位。做除運算時,應考慮除數為0。【實驗要求】1.設計一個子程序,完成將緩沖區中的兩個四位十進制數據送屏幕顯示功能。2.設計一個子程序,完成從鍵盤輸入兩個四位十進制數的加法操作程序設計。3.設計一個子程序,完成兩個八位十進制數作的加法運算操作程序設計。4.設計一個子程序,完成兩個四位十進制數作四則運算操作。運算要求從鍵盤輸入。【報告要求】1.給出該程序設計的方案步驟。2.列出自編程序清單并加注釋。3.寫出心得體會。實驗六 宏調

溫馨提示

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

評論

0/150

提交評論