微機原理:順序、分支、循環、子程序設計_第1頁
微機原理:順序、分支、循環、子程序設計_第2頁
微機原理:順序、分支、循環、子程序設計_第3頁
微機原理:順序、分支、循環、子程序設計_第4頁
微機原理:順序、分支、循環、子程序設計_第5頁
已閱讀5頁,還剩14頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、精選優質文檔-傾情為你奉上公司名稱實驗二 順序、分支、循環、子程序設計微機原理上機實驗作者姓名日期預習報告零、相關知識1,LEA指令和MOV指令的區別一、順序結構計算m*n-w,最終結果保存在AX其中m=12, n=12, w=4最終結果為AX=008CH=140Dname "sequence strcture"org 100hMOV AX, 1000HMOV DS, AXMOV SI, 1000H MOV SI, 12MOV SI+1, 12MOV SI+2, 4MOV AL, SIMOV BL, SI+1MUL BLMOV BX, 0MOV BL, SI+2SUB AX

2、, BX HLT二、分支結構在DS數據段偏移地址為DATA開始的順序80個單元中,存放著某班80個同學的微機原理考試成績。現欲編程序統計>=90、8970、6960和<60分的人數,并將統計的結果存放在當前數據段偏移地址為BUFFER的順序單元中name “branch structure”START:MOV DX, 0000HMOV BX, 0000HMOV CX, 80LEA SI, DATALEA DI, BUFFERGOON:MOV AL, SICMP AL, 90JC NEXT3INC DHJMP STORNEXT3:CMP AL, 70JC NEXT5INC DLJMP

3、 STORNEXT5:CMP AL, 60JC NEXT7INC BHJMP STORNEXT7:INC BLSTOR:INC SILOOP GOONMOV DI, DHMOV DI+1, DLMOV DI+2, BHMOV DI+3, BLHLT三、循環結構在DS所決定的數據段,從偏移地址BUFFER開始順序存放100個無符號16位數。現欲編程序將這100個數按大小順序排序(以下程序使用的是快速排序算法,也可以使用冒泡排序,嵌套兩層循環)name “circle structure”LEA DI, BUFFERMOV BL, 99NEXT0:MOV SI, DIMOV CL, BLNEXT3

4、:MOV AX, SIADD, SI, 2CMP AX, SIJNC NEXT 5MOV DX, SIMOV SI-2, DXMOV SI, AXNEXT5:DEC CLJNZ NEXT3DEC BLJNZ NEXT0HLT四、子程序編寫程序,完成將一組BCD數轉換成16位二進制數。(BCD數轉換成16位二進制數用子程序實現)下面提供三種方案,分別用寄存器、儲存器和堆棧傳遞參數使用寄存器傳遞參數name "text subprogram using register"STACK SEGMENT STACK DB 256 DUP(?)STACK ENDSDATA SEGMEN

5、T BCD1 DB 07H, 06H, 07H, 02H, 03H LENG1 DB 5 RESULT DW ?DATA ENDSCODEM SEGMENT ASSUME CS:CODEM, DS:DATA, SS:STACK START: MOV AX, DATA MOV DS, AX LEA SI, BCD1 MOV CX, LENG1 CALL FAR PTR BCD-16B MOV RESULT, DX MOV AH, 4CH INT 21HCODEM ENDSCODES SEGMENT ASSUME CS:CODES ;the part of subprogram BCD-16B P

6、ROC FAR PUSH BX PUSH AX ADD SI, CX MOV DX, 0 BCDL: DEC SI PUSH CX MOV AL, SI AND AL, 0FH CBW MOV BX, AX MOV AX, DX MOV CX, 10 MUL CX MOV DX, AX ADD DX, BX POP CX LOOP BCDL POP AX POP BX RET BCD-16B ENDPCODES ENDSEND START使用儲存器傳遞參數name "text subprogram using store"STACK SEGMENT STACK DB 256

7、 DUP(?)STACK ENDSDATA SEGMENT BCD1 DB 07H, 06H, 07H, 02H, 03H ADSEG DW ? ADOFST DW ? LENG1 DW ? RESULT DW ?DATA ENDSCODEM SEGMENT ASSUME CS:CODEM, DS:DATA, SS:STACK START: MOV AX, DATA MOV DS, AX ;entrance parameter MOV AX, SEG BCD1 MOV ADSEG, AX MOV AX, OFFSET BCD1 MOV ADOFST, AX MOV LENG1, 5 CALL

8、FAR PTR BCD-16B MOV AH, 4CH INT 21HCODEM ENDSCODES SEGMENT ASSUME CS:CODES ;the part of subprogram BCD-16B PROC FAR PUSH BX PUSH AX PUSH SI PUSH DS MOV DS, ADSEG MOV SI, ADOFST MOV CX, LENG1 XOR DX, DX ADD SI, CX BCDL: DEC SI PUSH CX MOV AL, SI AND AL, 0FH CBW MOV BX, AX MOV AX, DX MOV CX, 10 MUL CX

9、 MOV DX, AX ADD DX, BX POP CX LOOP BCDL POP AX POP BX POP DS POP SI RET BCD-16B ENDPCODES ENDSEND START使用堆棧傳遞參數name "text subprogram using stack"STACK SEGMENT STACK DB 256 DUP(?)STACK ENDSDATA SEGMENT BCD1 DB 07H, 06H, 07H, 02H, 03H LENG1 DW ? RESULT DW ?DATA ENDSCODEM SEGMENT ASSUME CS:CO

10、DEM, DS:DATA, SS:STACK START: MOV AX, DATA MOV DS, AX ;push PUSH DS LEA SI, BCD1 PUSH SI MOV CX, LENG1 PUSH CX CALL FAR PTR BCD-16B POP DX MOV RESULT, DX MOV AH, 4CH INT 21HCODEM ENDSCODES SEGMENT ASSUME CS:CODES ;the part of subprogram BCD-16B PROC FAR PUSH BP MOV BP, SP PUSH DS PUSH SI PUSH CX PUS

11、H BX PUSH AX MOV CX, BP+6 MOV SI, BP+8 MOV DS, BP+10 ADD SI, CX MOV DX, 0 BCDL: DEC SI PUSH CX MOV AL, SI AND AL, 0FH CBW MOV BX, AX MOV AX, DX MOV CX, 10 MUL CX MOV DX, AX ADD DX, BX POP CX LOOP BCDL POP AX POP BX POP CX POP DS POP SI POP BP RET A BCD-16B ENDPCODES ENDSEND START正式實驗報告一、實驗要求1教材P74例1

12、。m=6,n=4,w=7。結果Q也放在內存中。2教材P75例3。3從鍵盤上輸入1個數,判斷其奇偶性,如果是奇數,屏幕上顯示”It is odd”,否則顯示”It is even”。4從鍵盤上輸入N個字符(N<16),求這N個字符中A的個數,并將A的個數顯示在屏幕上。5. 已知BUF1中有N1個按從小到大的順序排列的互不相等的無符號數,BUF2中有N2個從小到大的順序排列的互不相等的無符號數。編寫程序將BUF1和BUF2中的數合并到BUF3中,使在BUF3中存放的數互不相等且按從小到大的順序排列。6. 需要預習報告。二、實驗目的學習順序、分支、循環結構以及子程序的編程設計。三、實驗過程(調

13、試分析)3.1 textbook page74-1最后的計算結果應該為AX=6*4-7=17D=11Horg 100hMOV AX, 1000HMOV DS, AXMOV SI, 1000H MOV SI, 6MOV SI+1, 4MOV SI+2, 7MOV AL, SIMOV BL, SI+1MUL BL; 6*4->ALMOV BX, 0MOV BL, SI+2SUB AX, BX HLT3.2 textbook page75-3用"0","1","C","D","E","

14、O","P","Q","R","S","$"的ASCII值代表10位學生的分數,分別為48/49/67/68/69/79/80/81/82/83分name "textbook page75-3"data segment SCORES DB "0","1","C","D","E","O","P","Q",&qu

15、ot;R","S","$" ;48/49/67/68/69/79/80/81/82/83ends code segmentstart: ASSUME DS:DATA, CS:CODE MOV AX, DATA MOV DS, AX MOV CX, 10 MOV SI, OFFSET SCORES;<-> MOV SI, OFFSET SCORES MOV DI, 0000H GOON:MOV AL, SICMP AL, 90JC NEXT3INC DHJMP STORNEXT3:CMP AL, 70JC NEXT5INC DLJMP

16、 STORNEXT5:CMP AL, 60JC NEXT7INC BHJMP STORNEXT7:INC BLSTOR:INC SILOOP GOONMOV DI, DHMOV DI+1, DLMOV DI+2, BHMOV DI+3, BLendsend start由結果可知:DH=0,DL=5,BH=3,BL=2說明90以上0人,8970有5人,6960有3人,小于60有2人3.3 experiment 2-3name "experiment 2-3" data segment HEX1 DB 0AH,0DH,"It is even$" HEX2 D

17、B 0AH,0DH,"It is odd$"0AH,0DH換行+回車 endscode segment start: ASSUME DS:DATA MOV AX, DATA MOV DS, AX ;read from the keyboard MOV CX, 16 DO: MOV AH, 01H INT 21H CMP AL, 13 JZ NEXT0 MOV BL, AL LOOP DO NEXT0: SUB BL, 48 MOV AL, BL MOV BL, 2 DIV BL CMP AH, 1 JNZ NEXT1 JZ NEXT2 NEXT1: LEA DX, HEX1

18、 MOV AH, 09H INT 21H HLT NEXT2: LEA DX, HEX2 MOV AH, 09H INT 21H endsend start若輸入的為偶數若輸入的為奇數3.4 experiment 2-4name "experiment 2-4"data segment HEX DB 16 DUP(0) endscode segmentstart: ASSUME DS:DATA MOV AX, DATA MOV DS, AX MOV CX, 16;read from keyboardread: CMP CX, 1 JZ STOP MOV AH, 01H IN

19、T 21H CMP AL, 65 JZ count CMP AL, 13 JZ STOP LOOP read ;count 'A' characterscount: INC BL LOOP read STOP: MOV AH, 02H MOV DL, 0AH INT 21H; 打印換行 MOV DL, 0DH INT 21H;打印回車 ADD BL, 48 MOV DL, BL INT 21Hendsend start3.5 experiment 2-5冒泡排序,沒有在BUF3中除去重復的字符此題設兩個字符串為BUF1 = ”ACEGIK”BUF2 = ”BDFJLHMN”na

20、me "experiment 2-5"此程序不需要壓入堆棧保護的數據data segment BUF1 DB "ACEGIK$" BUF2 DB "BDFJLHMN$" BUF3 DB 14 DUP(0) ends stack segment DB 256 DUP(0)endscode segmentstart: ASSUME DS:DATA, CS:CODEL, SS:STACK MOV AX, DATA MOV DS, AX LEA BX, BUF1 LEA SI, BUF2 LEA DI, BUF3 CALL remove CA

21、LL reorder;段內轉移,若段間轉移,測試一下格式 ;print on the screen LEA DX, BUF3 MOV AH, 09H INT 21H HLT remove proc near MOV CX, 6 DO1: MOV AX, BX MOV DI, AX INC BX INC DI LOOP DO1 MOV CX, 8 DO2: MOV AX, SI MOV DI, AX INC SI INC DI LOOP DO2 RET remove endp reorder proc near MOV CX, 13;注意是13,思考清楚 JUDGE1: LEA DI, BUF3 PUSH CX MOV CX, 13 JUDGE2: MOV AL, DI MOV BL, DI+1 CMP AL, BL JC NEXT1 MOV DI+1, AL MOV DI, BL NEXT1: INC DI LOOP JUDGE2 POP CX LOOP JUDGE1 RET reorder endpend start采用串的合并的算法,可以除去BUF3中重

溫馨提示

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

評論

0/150

提交評論