微機(jī)原理與接口技術(shù)[1]_第1頁
微機(jī)原理與接口技術(shù)[1]_第2頁
微機(jī)原理與接口技術(shù)[1]_第3頁
微機(jī)原理與接口技術(shù)[1]_第4頁
微機(jī)原理與接口技術(shù)[1]_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第6章 匯編語言程序設(shè)計(jì) 用匯編語言編程屬結(jié)構(gòu)化程序設(shè)計(jì)。 需按照結(jié)構(gòu)化的思想來進(jìn)行匯編程序的設(shè)計(jì)微機(jī)原理與接口技術(shù)1分析題意,確定算法根據(jù)算法畫出程序框圖根據(jù)框圖編寫程序上機(jī)調(diào)試程序執(zhí)行程序按照自上而下的設(shè)計(jì)方法,設(shè)計(jì)一個(gè)匯編程序的步驟:微機(jī)原理與接口技術(shù)1 順序程序 分支程序 循環(huán)程序從結(jié)構(gòu)上來講,一般的匯編程序可分為:微機(jī)原理與接口技術(shù)1Eg:從鍵盤輸入一個(gè)字符并存儲(chǔ)到字節(jié)變量BUF單元中.分析: 用DOS功能調(diào)用完成鍵入,輸入 的字符保存在AL寄存器中 將AL中的內(nèi)容存到定義在數(shù)據(jù) 段的變量BUF所指單元中 順序程序設(shè)計(jì)微機(jī)原理與接口技術(shù)1.486DATA SEGMENT USE16

2、BUF DB ?DATA ENDS源程序清單:CODESEGMENT USE16 ASSUME CS : CODE , DS : DATABEG:MOV AX , DATAMOV DS , AXMOV AH , 1INT 21H ;AL=鍵入字符的MOV BUF , AL ASIIC碼MOV AH , 4CHINT 21HCODEENDSEND BEG微機(jī)原理與接口技術(shù)1 分支程序設(shè)計(jì) 轉(zhuǎn)移指令可用來實(shí)現(xiàn)分支程序設(shè)計(jì)分支程序分三種: 簡單分支 復(fù)合分支 多分支微機(jī)原理與接口技術(shù)1 簡單分支 即兩路分支,該分支程序結(jié)構(gòu)為:條件滿足否?程序段1程序段2YN微機(jī)原理與接口技術(shù)1 Eg: 將BX寄存器

3、的內(nèi)容以二進(jìn)制數(shù)格式顯在屏幕上BX=11110B 簡單分支 RCL0SALROLCFCFCF微機(jī)原理與接口技術(shù)1 486CODE SEGMENT USE16 ASSUME CS:CODE BEG: MOV BX,5678H MOV CX,16 LAST: MOV AL,0 ROL BX,1 JNC NEXT MOV AL,1 NEXT: MOV AH,0EH INT 10H LOOP LAST MOV AH,4CH INT 21H CODE ENDS END BEG ADC AL,0 數(shù)BX,16 CXC標(biāo)=?1AL調(diào)BIOS.0EHCX-1CXCX=00ALBX左移一位10NY返DOS源程序

4、清單:微機(jī)原理與接口技術(shù)1 復(fù)合分支判斷的條件是復(fù)合條件,稱復(fù)合判斷 復(fù)合分支程序結(jié)構(gòu)為:條件1和條件2.滿足否?程序段1程序段2YN微機(jī)原理與接口技術(shù)1Eg:某科室9人,統(tǒng)計(jì)月收入在800900間的人數(shù),并用十進(jìn)制數(shù)顯示 復(fù)合分支 分析:月收入是無符號(hào)數(shù),對一批數(shù)處理應(yīng)該用間址。 數(shù)軸: N1 (800) N2 (900)微機(jī)原理與接口技術(shù)1 多分支判斷條件后有多個(gè)出口,判斷一次只能選擇一個(gè)分支。 多分支程序結(jié)構(gòu)為:1條件屬哪種情況?程序段1程序段n+m.程序段nnn+m微機(jī)原理與接口技術(shù)1例.多分支段內(nèi)轉(zhuǎn)移要求:鍵入0,轉(zhuǎn)P0程序段 鍵入1,轉(zhuǎn)P1程序段 鍵入9,轉(zhuǎn)P9程序段思路:用比較指

5、令配合直接轉(zhuǎn)移指令實(shí)現(xiàn) CMP 鍵入字符,0 JE P0 CMP 鍵入字符,1 JE P1 用轉(zhuǎn)移地址表配合間接轉(zhuǎn)移指令實(shí)現(xiàn) 多分支 微機(jī)原理與接口技術(shù)1 486DATA SEGMENT USE16TAB DW P0,P1,P9 ;匯編后自動(dòng)裝入相應(yīng)的偏移地址MESG DB 0DH,0AH,strike 09:$DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG: MOV AX,DATA MOV DS,AXAGA: MOV AH,9 MOV DX,OFFSET MESG INT 21H MOV AH,1 INT 21H CMP AL,0

6、JC AGACMP AL,9JA AGASUB AL,30HMOVZX BX,ALADD BX,BX;2BXBXMOV SI,OFFSET TABJMP BX+SI;DS:BX+SI IPP0: P1: P9: CODE ENDS END BEG 或:MOV BX,BX+SI JMP BX ;BX IP源程序清單:微機(jī)原理與接口技術(shù)1 循環(huán)程序設(shè)計(jì)循環(huán)程序的組成: 循環(huán)準(zhǔn)備 循環(huán)體 循環(huán)控制微機(jī)原理與接口技術(shù)11. 循環(huán)程序的結(jié)構(gòu)Y預(yù)置循環(huán)次數(shù)其他準(zhǔn)備工作循環(huán)體循環(huán)減1計(jì)數(shù)退出循環(huán)結(jié)果為0?N(a)單循環(huán)結(jié)構(gòu)(b) 雙循環(huán)結(jié)構(gòu)結(jié)果為0?循環(huán)體內(nèi)循環(huán)減1計(jì)數(shù)結(jié)果為0?外循環(huán)減1計(jì)數(shù)退出循環(huán)預(yù)置外

7、循環(huán)次數(shù)其他準(zhǔn)備工作預(yù)置內(nèi)循環(huán)次數(shù)其他準(zhǔn)備工作NNYY微機(jī)原理與接口技術(shù)1Eg: 假設(shè)從BUF單元開始為一個(gè) ASCII碼字符串,找出其中的最大數(shù)送屏幕顯示。 循環(huán)程序設(shè)計(jì)思路:ASC碼數(shù)為無符號(hào)數(shù),無符號(hào)數(shù)的最小數(shù)為0YNN數(shù)據(jù)區(qū)首址DS:BX無符號(hào)最小數(shù)AL數(shù)據(jù)個(gè)數(shù)CXBX ALBX=AL?BX+1 BXCX-1 CX顯示結(jié)果返回DOSCX=0?Y微機(jī)原理與接口技術(shù)1 486 DATA SEGMENT USE16 BUF DB QWERTYUIOP123 COUNT EQU $ -BUF;統(tǒng)計(jì)串長度 MAX DB MAX=,?,0DH,0AH,$ DATA ENDS CODE SEGMEN

8、T USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX,DATA MOV DS,AX MOV AL,0 ;無符號(hào)最小數(shù) 0 AL LEA BX,BUF ;串首址偏移量BX MOV CX,COUNT ;串長度CX LAST: CMP BX,AL;比較 JC NEXT MOV AL,BX;大數(shù)ALNEXT: INC BX LOOP LAST ;循環(huán)計(jì)數(shù) MOV MAX+4,AL ;最大數(shù)MAX+4 單元 MOV AH,9 MOV DX,OFFSET MAX INT 21H ;顯示結(jié)果 MOV AH,4CH INT 21H ;返回 DOSCODE ENDS END BE

9、G 源程序清單1:微機(jī)原理與接口技術(shù)1 486DATA SEGMENT USE16BUF DB QWERTYUIOP123FLAG DB 1 ;設(shè)置串結(jié)束標(biāo)志MAX DB MAX=,?,0DH,0AH,$DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG: MOV AX,DATA MOV DS,AX MOV AL,0 ;無符號(hào)最小數(shù) 0 AL LEA BX,BUF ;串首址偏移量BXLAST: CMP BYTE PTR BX, -1 ;BX=串結(jié)束標(biāo)志 ? JE DISP ;是,轉(zhuǎn) CMP BX,AL JC NEXT MOV AL,BX

10、;大數(shù)ALNEXT: INC BX JMP LASTDISP: MOV MAX+4,AL ;最大數(shù)MAX+4 單元 MOV AH,9 MOV DX,OFFSET MAX INT 21H ;顯示結(jié)果 MOV AH,4CH INT 21H ;返回 DOSCODE ENDS END BEG 源程序清單2:微機(jī)原理與接口技術(shù)1匯編程序設(shè)計(jì)舉例 代 碼 轉(zhuǎn) 換微機(jī)原理與接口技術(shù)1代碼轉(zhuǎn)換微機(jī)原理與接口技術(shù)1 常見的代碼轉(zhuǎn)換有: 二進(jìn)制數(shù)顯示 二進(jìn)制數(shù)十進(jìn)制數(shù)顯示 二進(jìn)制數(shù)十六進(jìn)制數(shù)顯示 BCD碼數(shù)二進(jìn)制數(shù)微機(jī)原理與接口技術(shù)1代碼轉(zhuǎn)換A二進(jìn)制數(shù)顯示:例.把鍵盤輸入的一位數(shù)(09),轉(zhuǎn)換成等值二進(jìn)數(shù)顯示顯示

11、的格式要求如下:Please Enter:ERROR!Please Enter:9=00001001B微機(jī)原理與接口技術(shù)1代碼轉(zhuǎn)換思路:鍵盤緩沖區(qū)中是鍵入字符的ASC碼。 09的ASC碼為30H39H。二進(jìn)制數(shù)每一位代碼的判斷:本程序采用兩種格式設(shè)計(jì)源程序:一種是EXE文件編程格式,另一種是COM文件編程格式。RCL0SALROLCFCFCF微機(jī)原理與接口技術(shù)1程序框圖: AL-30HBL =屏幕,8CX 0 屏幕1 屏幕CX-1 CXB 屏幕,返回DOSNN給出操作提示鍵盤輸入ALAL=09?CF=?CX=0?BL左移一位Y顯示錯(cuò)誤信息 Y01微機(jī)原理與接口技術(shù)1 . 486DATA SEG

12、MENT USE16MESG1 DB Please Enter ! ,0DH,0AH,$MESG2 DB -Error ! $ DATA ENDSCODE SEGMENT USE16 ASSUME CS:CODE,DS:DATABEG: MOV AX,DATA MOV DS,AX MOV AH,9 MOV DX,OFFSET MESG1 INT 21H ;顯示操作提示 MOV AH,1 INT 21H ;等待鍵入 CMP AL,3AH JNC ERROR ;9轉(zhuǎn) CMP AL,30H EXE格式程序清單 JC ERROR ;0轉(zhuǎn) SUB AL,30H MOV BL,AL ;BL=09 的二進(jìn)制

13、數(shù) MOV AH,2 MOV DL,= INT 21H CALL DISP MOV AH,2 MOV DL,B INT 21H JMP EXITERROR: MOV AH,9 MOV DX,OFFSET MESG2 INT 21H ;顯示錯(cuò)誤信息EXIT: MOV AH,4CH INT 21H微機(jī)原理與接口技術(shù)1;-DISP PROC ;顯示BL中的二進(jìn)制數(shù) MOV CX,8LAST: MOV DL,0 RCL BL,1 JNC NEXT MOV DL,1NEXT: MOV AH,2 INT 21H LOOP LAST RETDISP ENDPCODE ENDS END BEG EXE格式程序

14、清單微機(jī)原理與接口技術(shù)1 . 486CODE SEGMENT USE16 ASSUME CS:CODE ORG 100HSTART: JMP BEGMESG1 DB Please Enter ! ,0DH,0AH,$MESG2 DB -Error ! $ BEG: MOV AH,9 MOV DX,OFFSET MESG1 INT 21H ;顯示操作提示 MOV AH,1 INT 21H ;等待鍵入 CMP AL,3AH JNC ERROR ; 9 轉(zhuǎn) CMP AL,30H JC ERROR ; 0 轉(zhuǎn) SUB AL,30H MOV BL,AL ;BL=09 的二進(jìn)制數(shù) MOV AH,2 MOV

15、 DL,= INT 21H CALL DISP MOV AH,2 MOV DL,B INT 21H JMP EXIT MOV DX,OFFSET MESG2 INT 21H ;顯示錯(cuò)誤信息 INT 21H ERROR: MOV AH,9EXIT: MOV AH,4CHCOM格式程序清單微機(jī)原理與接口技術(shù)1;-DISP PROC ;顯示BL中的二進(jìn)制數(shù) MOV CX,8LAST: MOV DL,0 RCL BL,1 JNC NEXT MOV DL,1NEXT: MOV AH,2 INT 21H LOOP LAST RETDISP ENDPCODE ENDS END START COM格式程序清單

16、微機(jī)原理與接口技術(shù)1問題:鍵入的是兩位十進(jìn)制數(shù)時(shí),如何將該十進(jìn)制數(shù)的二進(jìn)制數(shù)顯示在屏幕上?代碼轉(zhuǎn)換微機(jī)原理與接口技術(shù)1二.二進(jìn)制數(shù)十六進(jìn)制數(shù)顯示算法:四位二進(jìn)制數(shù)等值的十六進(jìn)制數(shù)十六進(jìn)制數(shù) ASC碼算法000010011010111109AF30H39H41H46H四位二進(jìn)制數(shù)+30H= 等值的十六進(jìn)制數(shù)ASC碼四位二進(jìn)制數(shù)+37H= 等值的十六進(jìn)制數(shù)ASC碼代碼轉(zhuǎn)換微機(jī)原理與接口技術(shù)1編程技巧:8位二進(jìn)制數(shù)截取高4位顯示顯示截取低4位XXXXXXXXXXXX0 0 0 0XXXX0 0 0 016進(jìn)制數(shù)ASC碼16進(jìn)制數(shù)ASC碼代碼轉(zhuǎn)換微機(jī)原理與接口技術(shù)1例.設(shè)從BNUM單元開始,有4個(gè)16

17、位的二進(jìn)制數(shù),要求把它們轉(zhuǎn)換成16進(jìn)制數(shù),并送屏幕顯示。 程序清單 . 486 DATA SEGMENT USE16 BNUM DW 10100B ;1234H DW 11000B ;5678H DW 01011B ;1A2BH DW 01101B ;3C4DH BUF DB 4 DUP(?), H $ ;輸出緩沖區(qū) COUNT DB 4 DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE, DS:DATA微機(jī)原理與接口技術(shù)1BEG: MOV AX,DATA MOV DS,AX MOV CX,4 MOV BX,OFFSET BNUMAGA: MOV DX,B

18、X SAL EDX,16 CALL N2_16ASC MOV AH,9 MOV DX,OFFSET BUF INT 21H ;顯示一個(gè)16進(jìn)數(shù) ADD BX,2 ;地址加 2 LOOP AGA MOV AH,4CH INT 21H;二進(jìn)數(shù)十六進(jìn)數(shù)ACSII碼N2_16ASC PROC MOV SI,OFFSET BUF ;輸出緩沖區(qū)地址SI MOV COUNT,4LAST: ROL EDX,4 AND DL,0FH CMP DL,10 JC NEXT ADD DL,7NEXT: ADD DL,30H MOV SI,DL INC SI ;地址加1 DEC COUNT ;計(jì)數(shù) JNZ LAST R

19、ETN2_16ASC ENDPCODE ENDS END BEGEXE格式程序清單微機(jī)原理與接口技術(shù)1代碼轉(zhuǎn)換三.BCD碼二進(jìn)制數(shù)例.4位BCD碼數(shù)二進(jìn)制數(shù)顯示算法:設(shè)4位BCD碼數(shù)列為:N3 N2 N1 N0,等值二進(jìn)制數(shù)=N31000+N2100+N110+N0 =(010+N3)10+N2)10+N1)10+N0編程考慮:4位BCD碼最大為9999H,等值的二進(jìn)制數(shù)最大為16位(超過8位),而且D15位肯定為0分離出BCD千位N3,百位N2,十位N1,個(gè)位N0設(shè)計(jì)一個(gè)AX10+BX AX的子程序供調(diào)用,首次調(diào)用時(shí),令A(yù)X=0,BX=N3,共調(diào)用4次,則AX中即為等值的二進(jìn)制數(shù)。微機(jī)原理與

20、接口技術(shù)1 486CODE SEGMENT USE16 ASSUME CS:CODENUM DW 4567H ;BCD碼表示BEG: MOV CX,4 ;4次調(diào)用 MOV AX,0AGA: ROL NUM, 4 MOV BX,NUM AND BX,000FH IMUL AX,10 ADD AX,BX LOOP AGA 顯示AX中的二進(jìn)制數(shù) 返回DOSCODE ENDS END BEG本例數(shù)據(jù)放在代碼段!本例: 因?yàn)锳X的D15=0,是正的有符號(hào)數(shù),所以可用IMUL指令A(yù)X10+BXAXEXE格式程序清單微機(jī)原理與接口技術(shù)1代碼轉(zhuǎn)換三.二進(jìn)制數(shù)十進(jìn)制數(shù)方法:比較法,恢復(fù)余數(shù)法,除法 8位二進(jìn)制數(shù)

21、最大為11111111, 等值的十進(jìn)制數(shù)為255, 比較法的關(guān)鍵:判斷某二進(jìn)制數(shù)(假設(shè)為BEN單元的內(nèi)容)包含幾個(gè)100,幾個(gè)10,幾個(gè)1 1. 8位二進(jìn)制數(shù)十進(jìn)制數(shù),比較法: DL+1DL(BEN)-10BEN(BEN)=100?NY(BEN)=10?NY0 DL DL+1DL(BEN)-100BENDL+30H屏幕 0DL DL+30H屏幕(BEN)+30H屏幕 返回DOS微機(jī)原理與接口技術(shù)1 . 486CMPDISP MACRO NN LOCAL LAST, NEXT MOV DL,0 ;DL清0LAST: CMP BEN, NN ;比較 JC NEXT ;BENNN轉(zhuǎn) INC DL ;

22、DL加1 SUB BEN, NN JMP LASTNEXT: ADD DL, 30H MOV AH,2 INT 21H ;顯示 ENDMCODE SEGMENT USE16 ASSUME CS:CODEBEN DB 10101110B ;=174BEG: CMPDISP 100 CMPDISP 10 CMPDISP 1 MOV AH,4CH INT 21HCODE ENDS END BEGEXE格式程序清單微機(jī)原理與接口技術(shù)1代碼轉(zhuǎn)換2. 8位二進(jìn)制數(shù)十進(jìn)制數(shù),恢復(fù)余數(shù)法(請自學(xué))3. 8位二進(jìn)制數(shù)十進(jìn)制數(shù),“除權(quán)值求商”的算法分析把11110101B十進(jìn)制數(shù)245算法:依次用權(quán)值100,10

23、,1去除上次的余數(shù),直到余數(shù)為0時(shí)停止。每次除法所得的商數(shù)順序排列,即為十進(jìn)制數(shù)。 1 1 1 1 0 1 0 11 1 0 0 1 0 01 0 1 1 0 11 02權(quán)值(100)10 1 0 1 5 1 0 1 1 0 1 0余數(shù)為0時(shí)止1權(quán)值(1) 1 0 0 4 1 0 1 1 0 1 1 0 1 0 1 0 11010權(quán)值(10)10微機(jī)原理與接口技術(shù)1例. 將NUM單元中的16位二進(jìn)制數(shù),轉(zhuǎn)換成十進(jìn)制數(shù)顯示。思路: 16 位二進(jìn)制數(shù):最大為11,其等值的十進(jìn)制數(shù)為65535,故應(yīng)判斷NUM單元的數(shù)包含幾個(gè)10000,幾個(gè)1000,幾個(gè)100,幾個(gè)10,幾個(gè) 1設(shè)計(jì)一個(gè)XXYY并顯

24、示商值的宏指令供調(diào)用,XX為32位,YY為16為二進(jìn)制數(shù)。微機(jī)原理與接口技術(shù)1DX,AX為被除數(shù) 486DIVIDE MACRO XX,YY MOV AX,XX MOV DX,0 MOV CX,YY ;CX為除數(shù) DIV CX ;AX=商,且1010B,DX=余數(shù) MOV AH,0EH ADD AL,30H INT 10H ENDMCODE SEGMENT USE16 ASSUME CS:CODENUM DW 65530 ;匯編后為二進(jìn)制數(shù)BEG: DIVIDE NUM, 10000 DIVIDE DX, 1000 本題在代碼段中設(shè)置數(shù)據(jù),這是COM格式?EXE格式?如果改為:BEG: MOV

25、 BX,OFFSET NUM DIVIDE BX,10000 是錯(cuò)誤的,為什么? DIVIDE DX, 100 DIVIDE DX, 10 DIVIDE DX, 1 MOV AH, 4CH INT 21HCODE ENDS END BEG顯示一位商值不能顛倒分析:應(yīng)寫成:DIVIDE CS:BX,10000程序清單微機(jī)原理與接口技術(shù)1代碼轉(zhuǎn)換4. 8位二進(jìn)制數(shù)十進(jìn)制數(shù),“除十取余”的算法分析 把11110101十進(jìn)制數(shù)245算法:N被(10)10除,商再被(10)10除,直到商數(shù)為0時(shí)止。每次所得的余數(shù)按倒序方式排列顯示。編程技巧:每次除法的余數(shù)棧,除法結(jié)束后,再從堆棧中依次彈出余數(shù)+30H屏

溫馨提示

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

評(píng)論

0/150

提交評(píng)論