華工微機(jī)與接口實(shí)驗(yàn)代碼及調(diào)試過(guò)程.doc_第1頁(yè)
華工微機(jī)與接口實(shí)驗(yàn)代碼及調(diào)試過(guò)程.doc_第2頁(yè)
華工微機(jī)與接口實(shí)驗(yàn)代碼及調(diào)試過(guò)程.doc_第3頁(yè)
華工微機(jī)與接口實(shí)驗(yàn)代碼及調(diào)試過(guò)程.doc_第4頁(yè)
華工微機(jī)與接口實(shí)驗(yàn)代碼及調(diào)試過(guò)程.doc_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)驗(yàn)二 數(shù)碼轉(zhuǎn)碼編程及程序調(diào)試第一題將ASCII碼表示的十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)【代碼如下】;實(shí)驗(yàn)二第一題 將ASCII碼表示的十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)DATA SEGMENT DB 30 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV SI,3500H ;定一源地址 MOV DI,3510H ;定義目標(biāo)地址 MOV BX,0AH ;給BX賦值10便于后面相乘 MOV CX,0004H ;賦給CX要裝換的位數(shù) MOV AH,00H ;將AH 清零 MOV AL,SI SUB AL,0030HLOOP: MUL BX INC SI ADD AL,SI SUB AL,0030H DEC CX JNZ LOOP ;轉(zhuǎn)換結(jié)束跳出循環(huán) MOV DI,AX JMP QUITQUIT: MOV AH,004CH INT 21HCODE ENDS END START 【調(diào)試結(jié)果】輸入30 30 30 31 35時(shí),輸出為0015H輸入30 30 30 30 36時(shí),輸出為0006H調(diào)試結(jié)果證明程序正確2、 將從鍵盤輸入的五位十進(jìn)制數(shù)的ASCII碼已存在3500起始的內(nèi)存單元中。把它轉(zhuǎn)換成BCD碼后,再按位分別存入350A起始的內(nèi)存單元內(nèi)。若輸入的不是十進(jìn)制的ASCII碼,則顯示FF.【代碼如下】;實(shí)驗(yàn)二 第二小題DATA SEGMENT DB 30 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV CX,0005H ;循環(huán)次數(shù)設(shè)置為5 MOV SI,3500H ;源地址設(shè)置為3500H MOV DI,3510H ;目的地址設(shè)置為3510H L1: MOV DL,0FFH;給DL賦值0FFH,便于后面 輸入錯(cuò)誤是賦給DI值FF,但不能直接給DI賦值0FFH,會(huì)溢出 MOV AL,SI CMP AL,0039H ;判斷大于9則賦值FF JG ERROR CMP AL,0030H ;判斷小于0則賦值FF JB ERROR SUB AL,30H ;轉(zhuǎn)換為BCD碼 MOV DI,BYTE PTR ALL2: INC SI INC DI DEC CX JNZ L1 JMP QUITERROR: MOV DI,DL ;賦值FFH JMP L2QUIT: MOV AX,4C00H INT 21HCODE ENDS END START【調(diào)試結(jié)果】輸入為 23 34 38 47 32時(shí)當(dāng)輸入為12 34 38 54 71時(shí)5、BCD碼轉(zhuǎn)換為二進(jìn)制碼【代碼如下】;第二次試驗(yàn)第五題;BCD碼轉(zhuǎn)換為二進(jìn)制碼DATA SEGMENT DB 30 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV CX,08H ;初始化 MOV SI,3500H MOV DI,3510HAGAIN: MOV AL,SI MOV BL,0AH MUL BL INC SI MOV AH,00H MOV DL,SI ADD AL,DL MOV DI,AX INC DI INC SI ;此處記得將SI增加1,否則會(huì)多4個(gè)數(shù)字 ,切記 DEC CX JNZ AGAIN JMP QUIT QUIT: MOV AX,4C00H INT 21HCODE ENDS END START【調(diào)試結(jié)果】3、 將十六位二進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼表示的十進(jìn)制數(shù)。【代碼如下】;第二次試驗(yàn) 第三題;十六位二進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼表示的十進(jìn)制數(shù)DATA SEGMENT DB 30 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV DI,3500H MOV AX,DI ;錯(cuò)誤理解二進(jìn)制 存到AX的意思 MOV SI,3514H INC SI AGAIN: DEC SI MOV DX,0000H MOV BX,000AH DIV BX ;此處被除數(shù)必須為寄存器 ADD DL,30H MOV SI,DL CMP AX,0H ;判斷商是否為0,不是就重復(fù),是就比較SI是不是等于3500,是就退出 JNZ AGAIN CMP SI,3500 JE QUIT AGAIN1: DEC SI MOV DL,30H MOV SI,DL CMP SI,3510H JNZ AGAIN1 QUIT: MOV AX,004CH INT 21HCODE ENDS END START 【調(diào)試結(jié)果】4、 十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼【代碼如下】;第二次實(shí)驗(yàn)第四題; 十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼DATA SEGMENT DB 30 DUP(?)DATA ENDSSTACK SEGMENT STACK STACK DB 30 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV CX,0004H ;初始化過(guò)程 MOV SI,3500H MOV DI,3510H MOV DX,SI AGAIN: MOV AX,DX AND AX,000FH ;小于9則直接裝換為ACSSII碼 CMP AL,09H JL L1 ADD AL,37H ;大于9則加37 JMP L2L1: ADD AL,30HL2: MOV DI,AL ;存儲(chǔ)結(jié)果至DI所在單元 INC DI PUSH CX ;為了后面用到CL作為右移計(jì)數(shù)用,此處先將CX壓棧 MOV CL,04H SHR DX,CL POP CX DEC CX JNZ AGAIN JMP QUIT QUIT: MOV AX,4C00H INT 21H CODE ENDS END START 【調(diào)試結(jié)果】微機(jī)實(shí)驗(yàn)三 分支和循環(huán)程序設(shè)計(jì)實(shí)驗(yàn)實(shí)驗(yàn)1【代碼如下】;實(shí)驗(yàn)三(1)STACK SEGMENT STACK DW 64 DUP(?) STACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV SI,3500H ;給SI附地址 MOV DI,3510H MOV CX,0006H CLD ;DF置0 CMP SI,DI ;比較源數(shù)據(jù)塊和目的塊首地址 JL L1 ;源數(shù)據(jù)塊地址小于目的數(shù)據(jù)塊地址時(shí)跳到L1 JMP L2 ;否則跳到L2 L1: ADD SI,CX ADD DI,CXLOOP1: DEC SI DEC DI MOV AL,SI ;數(shù)據(jù)搬移 MOV DI,AL DEC CX JNZ LOOP1 ;循環(huán)直到搬移字節(jié)數(shù)達(dá)到CX停止 JMP QUIT ;搬移結(jié)束跳到 quit 退出 L2: MOV AL,SI MOV DI,AL INC SI INC DI DEC CX JNZ L2QUIT: MOV AX,4C00H INT 21H CODE ENDS END START 【調(diào)試過(guò)程】此時(shí)源數(shù)據(jù)塊地址為 3500H,目的數(shù)據(jù)塊地址為 3510H,結(jié)果如下,此時(shí)不會(huì)出現(xiàn)重疊覆蓋現(xiàn)象若將源數(shù)據(jù)塊地址改為3510H,目的數(shù)據(jù)塊地址改為3500H同樣能實(shí)現(xiàn)數(shù)據(jù)搬移若將源數(shù)據(jù)塊地址改為 3500H,目的數(shù)據(jù)塊地址改為 3503H,則在3503H開始會(huì)出現(xiàn)覆蓋重疊現(xiàn)象二、循環(huán)程序設(shè)計(jì)實(shí)驗(yàn)【代碼如下】;實(shí)驗(yàn)二、循環(huán)程序設(shè)計(jì)實(shí)驗(yàn)DATA SEGMENT D1 DW 100 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV DX,0001H ;初始化 DX MOV BL,0002H ;初始化 BL MOV SI,3500H ;將SI 指向 3500H L1: MOV AL,BL INC BL MUL BL ADD DX,AX CMP AX,00C8H ;判斷 AX 是否大于 200 JL L1 ;AX小于 200 則繼續(xù)循環(huán) QUIT: ;AX 大于200則退出 MOV SI,DX MOV AX,4C00H INT 21H CODE ENDS END START 【實(shí)驗(yàn)結(jié)果】計(jì)算結(jié)果為 45FH ,計(jì)算正確。三、求某個(gè)數(shù)據(jù)區(qū)內(nèi)負(fù)數(shù)的個(gè)數(shù)【代碼如下】;三、 求某個(gè)數(shù)據(jù)區(qū)內(nèi)負(fù)數(shù)的個(gè)數(shù)DATA SEGMENT DW 100 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV DI,3530H ;將數(shù)據(jù)區(qū)首地址指向3530H MOV AH,1 INT 21H ;從鍵盤輸入存放數(shù)據(jù)個(gè)數(shù),并顯示在屏幕上 SUB AL,0030H ;將輸入值減去30 MOV CL,AL MOV DI,CL INC DI MOV CH,00H ;CH清0 MOV BL,00H ;BL清0 L1: TEST BYTE PTRDI,80H ;用TEST判斷輸入數(shù)據(jù)首位是否為1 JZ NEXT INC BL ;首位為1則跳到 NEXT 并將 BL 加1NEXT: INC DI ;DI 地址加1 DEC CX JNZ L1 ; CX 若不為0,則繼續(xù)跳到 L1 JMP QUIT ; 若 CX 為0,則跳到 QUIT 準(zhǔn)備退出QUIT: MOV DI,BL ;將 BL 中的計(jì)數(shù)值賦值給 DI 所在地址單元并退出 MOV AH,004CH INT 21HENDS CODE END START【調(diào)試結(jié)果】實(shí)驗(yàn)四子程序設(shè)計(jì)【代碼如下】;實(shí)驗(yàn)四子程序設(shè)計(jì);main 函數(shù)DATA SEGMENT STRING DB 200 DB 0 DB 50 DUP(?);定義BUF CR EQU 0DH LF EQU 0AH CRLF DB 0DH,0AH,$ MES DB PLEASE INPUT THE NUMBER 05.,CR,LF MES1 DB 1. Input an string.Then convert the small letter to big letter.,CR,LF MES2 DB 2. Find the character whose ASCII code is biggest.,CR,LF MES3 DB 3. Sort the character by ASCII code by decreasing order.,CR,LF MES4 DB 4. Display the ticking time.,CR,LF MES5 DB 5. End the program.,CR,LF,$ MES6 DB You hace choosen function 1 ,please input a string. ,CR,LF,$ MES7 DB CR,LF,$ MES8 DB Press any key to do again or press ESC to return to main menu.,CR,LF,$ MES9 DB The string after change is:,CR,LF,$ MES10 DB The greast number is:,CR,LF,$ MES21 DB You hace choosen function 4 ,CR,LF MES11 DB Please input the time like xx:xx:xx :,CR,LF,$ MES12 DB Sorry,you are fail to set time,please reset it aggain!,CR,LF,$ MES13 DB Sorry,you have choosen an undefine function,please choose again!,CR,LF,$ MES14 DB You hace choosen function 2 ,please input a string. ,CR,LF,$ MES15 DB You hace choosen function 3 ,please input a string. ,CR,LF,$ MES16 DB You have exit the system,welcome to use it again!,CR,LF,CR,LF MES17 DB make by XXXXXX,CR,LF MES18 DB in class XXXXXX,CR,LF MES19 DB at 2013,06,02,CR,LF,$ MES20 DB The string after sort are show as follows:,CR,LF,$ FLAG DB -1 ;冒泡排序中的判斷標(biāo)志DATA ENDSSTACK SEGMENT STACK STACKSTT DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKMAIN PROC NEARSTART: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES MOV AH,9 INT 21H MOV AH,01H ; 輸入選擇 INT 21H PUSH AX ;保護(hù)現(xiàn)場(chǎng)以便輸出回車換行,使界面友好 LEA DX,CRLF MOV AH,09H INT 21H POP AX ;恢復(fù)現(xiàn)場(chǎng),比較輸入值確定選擇功能 CMP AL,1 JE FUN1 CMP AL,2 JE FUN2 CMP AL,3 JE FUN3 CMP AL,4 JE FUN4 CMP AL,5 JE FUN5 LEA DX,MES13 MOV AH,09H INT 21H JMP STARTFUN1: CALL PROC1 MOV DX,OFFSET MES8 MOV AH,09H INT 21H MOV AH,07H INT 21H CMP AL,27 ;判斷輸入的是否為ESC JNE FUN1 ;如果不是就繼續(xù)執(zhí)行 JMP STARTFUN2: CALL PROC2 MOV DX,OFFSET MES8 MOV AH,09H INT 21H MOV AH,07H INT 21H CMP AL,27 ;判斷輸入的是否為ESC JNE FUN2 ;如果不是就繼續(xù)執(zhí)行 JMP STARTFUN3: CALL PROC3 MOV DX,OFFSET MES8 MOV AH,09H INT 21H MOV AH,07H INT 21H CMP AL,27 ;判斷輸入的是否為ESC JNE FUN3 ;如果不是就繼續(xù)執(zhí)行 JMP STARTFUN4: LEA DX,MES21 MOV AH,09H INT 21H CALL PROC4 MOV DX,OFFSET MES8 MOV AH,09H INT 21H MOV AH,07H INT 21H CMP AL,27 ;判斷輸入的是否為ESC JNE FUN4 ;如果不是就繼續(xù)執(zhí)行 JMP STARTFUN5: LEA DX,MES16 MOV AH,09H INT 21H MOV AX,4C00H ;如果是就退出系統(tǒng) INT 21H ;DOS調(diào)用 ; 子程序一、 按1鍵完成字符串小寫字母變大寫字母PROC1 PROC NEAR PUSH AX PUSH CX PUSH DX PUSH SI MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES6 MOV AH,09H ;輸出請(qǐng)輸入字符串的信息 INT 21H LEA DX,STRING MOV AH, 0AH ;不在DATA區(qū)中定義BUF則默認(rèn)輸入到 BUF中 INT 21H LEA DX,CRLF MOV AH,09H INT 21H ;回車換行 LEA DX,MES9 MOV AH,09H INT 21H LEA SI,STRING+2 MOV CL,STRING+1 ; 獲取字符串中字符個(gè)數(shù) MOV CH,0CHANGE: MOV DL,SI CMP DL,a JB NEXT CMP DL,z JA NEXT ;ASCII碼小于a,大于z的不用進(jìn)行轉(zhuǎn)換 SUB DL,20H ;減去32裝換為大寫字母NEXT: MOV AH,02H INT 21H INC SI DEC CX JNE CHANGE MOV DX,OFFSET CRLF MOV AH,09H INT 21H POP SI POP DX POP CX POP AX RETPROC1 ENDP;子程序二,找出輸入字符串中ACSII碼值最大的數(shù)并輸出PROC2 PROC NEAR PUSH AX PUSH CX PUSH DX ;保護(hù)現(xiàn)場(chǎng) PUSH SI MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES14 MOV AH,09H ;輸出請(qǐng)輸入字符串的信息 INT 21H LEA DX,STRING MOV AH,0AH INT 21H MOV SI,DX ;獲取第一個(gè)字符串 INC SI MOV CL,SI ;獲取字符串的個(gè)數(shù) MOV CH,00H MOV DH,00H INC SI MOV AL,SICOMP: INC SI CMP AL,SI ;判斷,取出最大的值放到DL中 JG NEXT2 MOV AL,SINEXT2: LOOP COMP PUSH AX MOV DX,OFFSET CRLF MOV AH,09H INT 21H MOV DX,OFFSET MES10 MOV AH,09H INT 21H MOV DX,OFFSET CRLF MOV AH,09H INT 21H POP AX MOV DL,AL MOV AH,02H INT 21H MOV DX,OFFSET CRLF MOV AH,09H INT 21H POP SI POP DX ;恢復(fù)現(xiàn)場(chǎng) POP CX POP AX RETPROC2 ENDP;子程序三,對(duì)輸入的字符串進(jìn)行冒泡排序并輸出PROC3 PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX ;保護(hù)現(xiàn)場(chǎng) PUSH SI PUSH DI MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES15 MOV AH,09H ;輸出請(qǐng)輸入字符串的信息 INT 21H LEA DX,STRING MOV AH,0AH INT 21H MOV SI,DX INC SI ;獲取第一個(gè)字符串 MOV CL,SI ;獲取字符串的個(gè)數(shù) MOV BL,SI ;外層循環(huán)計(jì)數(shù) MOV CH,00H MOV DH,00H MOV BH,00H INC SI MOV DI,SIL1: CMP FLAG,0 JE L3 DEC BX CMP BX,0 JE L3 MOV CX,BX MOV SI,DI MOV FLAG,0L2: MOV AL,SI CMP AL,SI+1 JLE NEXT3 ;前后轉(zhuǎn)換 XCHG AL,SI+1 MOV SI,AL MOV FLAG,0FFHNEXT3: INC SI DEC CX JNZ L2 ;一直內(nèi)循環(huán) JMP L1 ;退出內(nèi)循環(huán)L3: DEC DI ;重設(shè)循環(huán)次數(shù) MOV CL,DI MOV CH,00H PUSH DX ;保護(hù)現(xiàn)場(chǎng)輸出回車換行,防止輸出信息重疊,美化界面 PUSH AX LEA DX,MES20 ;輸出 輸出提示語(yǔ)句 MOV AH,09H INT 21H LEA DX,CRLF MOV AH,09H INT 21H POP DX ;恢復(fù)現(xiàn)場(chǎng) POP AXL4: INC DI MOV DL,DI ;輸出排序后的語(yǔ)句 MOV AH,02H INT 21H DEC CX JNZ L4 LEA DX,CRLF MOV AH,09H INT 21H POP AX POP BX POP CX POP DX POP SI POP DI RETPROC3 ENDP;子程序四,動(dòng)態(tài)顯示時(shí)間PROC4 PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX CALL CATT MOV CH,AL MOV AH,01H INT 21H CALL CATT MOV CL,AL MOV AH,01H INT 21H CALL CATT MOV DH,AL MOV DL,0 LEA DX,CRLF MOV AH,09H INT 21H MOV AH,2DH ;調(diào)用DOS中斷設(shè)置時(shí)間 INT 21H CMP AL,0FFH JE ERRPRT: PUSH DX MOV AL,CH MOV AH,0 MOV BL,0AH DIV BL ADD AL,30H ADD AH,30H MOV DL,AL MOV DH,AH MOV AH,02H INT 21H MOV DL,DH INT 21H MOV DL,3AH INT 21H MOV AL,CL MOV AH,0 DIV BL ADD AL,30H ADD AH,30H MOV DL,AL MOV DH,AH MOV AH,02H INT 21H MOV DL,DH INT 21H MOV DL,3AH IN

溫馨提示

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

評(píng)論

0/150

提交評(píng)論