微機系統與接口_第1頁
微機系統與接口_第2頁
微機系統與接口_第3頁
微機系統與接口_第4頁
微機系統與接口_第5頁
已閱讀5頁,還剩47頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1DOS和BIOS調用DOS(DiskOperationSystem)和BIOS(BasicInputandOutputSystem)是為用戶提供的兩組系統服務程序。BIOS是IBMPC/XT的基本I/O系統,負責管理系統的測試程序、初始化引導程序、一部分中斷矢量裝入程序及外部設備的服務程序。由于這些程序固化在ROM中,用戶可以直接調用。DOS是IBMPC/XT的操作系統,負責管理系統的所有資源,協調微機的操作,其中包括大量的可供調用的服務子程序,完成設備的管理和磁盤文件的管理。用戶控制PC機硬件的方法:

高級語言調用DOS程序使用BIOS程序直接訪問硬件2DOS和BIOS調用不用CALL指令。采用軟中斷指令INTn。用戶程序不必與服務程序的代碼連接。3DOS調用DOS功能調用類型號中斷功能類型號中斷功能20H程序結束21H請求DOS功能調用22H結束退出23H中止(Ctrl-Break)處理24H關鍵性錯誤處理25H磁盤順序讀26H磁盤順序寫27H程序結束且駐留內存28HDOS內部使用29~2EHDOS內部保留2FHDOS內部使用30~3FHDOS內部保留4INT21H調用方法

1、系統功能調用號送AH2、子程序規定的入口參數送指定的寄存器

3、INT21H4、分析出口參數功能號查表方法:5INT21H字符輸入

1、利用0AH功能從鍵盤輸一個字符串入內存。 要求:(AH)=0AH,(DX)=輸入緩沖區首址 數據段中的輸入緩沖區:第一個字節為所能保存的最大字符數第二個字節為實際接收的字符個數保留的單元第三個字節為所輸入的第一個字符的ASCII碼

…….6INT21H

例 DATASEGMENT

INBUFFERDB81 ACTCHARDB? CHARTEXTDB80DUP(?)

………. DATAENDS ………. CODESEGMENT ASSUMEDS:DATA,SS:STACK,CS:CODE ……….

MOV DX,OFFSETINBUFFER

MOV AH,0AH;

INT 21H ………..

CODEENDSEND ……..7INT21H2、利用09H功能在CRT上顯示一個字符串 要求:(AH)=09H,(DX)=欲輸出字符串的首址,字符串以‘$’結束。 例 DATA SEGMENT STRING DB‘HELLOEVERYBODY!$’ ………. DATAENDS ………. CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE ……….

MOV DX,OFFSETSTRING MOV AH,09H INT 21H

………..

CODEENDSEND ……..顯示0AH鍵盤輸入的字符串時,DX指向用戶定義的緩沖區的第三個字節8INT21H字符輸出

1、利用02H功能在CRT上顯示一個字符。 要求:(AH)=02H,(DL)=欲輸出字符的ASCII碼 例: MOV DL,41H MOV AH,02H INT 21H9 ;----調用DOS功能輸出回車、換行符------

MOV DL,0AH ;換行符的ASCII碼為0AH

MOV AH,02H;顯示字符

INT 21H

MOV DL,0DH ;回車符的ASCII碼為0DH

MOV AH,02H

INT 21H

INT21H10INT21H程序返回

利用4CH功能返回DOS。 要求:(AH)=4CH, CODESEGMENT …………

MOVAH,4CH INT 21H CODEENDS11常用DOS功能調用通常把DOS提供的INT21H中斷服務程序稱為DOS功能調用,調用時根據AH的值來選擇子功能。AH=1

鍵盤鍵入并回顯,輸入字符的ASCII碼在AL中返回例:MOVAH,1INT21HAH=2顯示輸出字符,輸出字符的ASCII碼放入DL中例:MOVAH,2 MOVDL,‘A’INT21HINT21H12AH=7鍵盤輸入無回顯,輸入字符的ASCII碼在AL中返回例:MOVAH,7INT21HAH=9顯示字符串,字符串以‘$’結束,開始位置用DS:DX指示AH=0AH輸入字符串,開始位置用DS:DX指示,分配存儲空間為n+2AH=0BH檢測鍵盤輸入,有鍵按下AL=0FFH,否則AL=00HAH=4CH程序運行結束,返回操作系統,返回碼由AL給出例:MOVAX,4C00HINT21HINT21H13分析問題,建立數學模型確定最佳算法合理分配存儲單元和寄存器繪制流程圖編寫程序調試程序程序設計方法14順序程序設計 指令指針IP值線性增加分支(條件)程序設計

IP值受標志位的影響而跳變循環程序設計

IP值受計數器CX中的值不為零而循環設計方法15順序結構(直線型結構)例1編程計算表達式Z=X^2-Y/5的值,其中A、B為帶符號字節整數,Z為帶符號字整數。(BX)<=X*X(AX)<=Y/5Z<=(BX)-(AX)開始結束MOV AX,DATMOV DS,AXMOV AL,XIMUL ALMOV BX,AXMOV AL,YCBW MOV CL,5IDIV CL CBWSUB BX,AXMOV Z,BXRET16;--數據段定義---------------------------------- DAT SEGMENT

X DB 10 Y DB -20 Z DW ? DAT ENDS順序結構(直線型結構)17;--代碼段定義----------------------------------COD SEGMENT

ASSUMEDS:DAT,CS:COD

MAIN PROCFARSTART:PUSH DS ;

保存返回地址

SUB AX,AX PUSHAX MOV AX,DAT MOV DS,AX

;初始化DS

順序結構(直線型結構)18;----------------------------------------------------------------------------MOV AL,XIMUL ALMOV BX,AX

;(BX)<=X*X;-----------------------------------------------MOV AL,YCBW

;將被除數擴展為字數據MOV CL,5IDIV CL CBW

;(AX)<=Y/5;------------------------------------------------SUB BX,AXMOV Z,BX

;Z<=(BX)-(AX)順序結構(直線型結構)19;---------------------------------------------------- RET

;返回

MAIN ENDP;---------------------------------------------------- COD ENDSEND START順序結構(直線型結構)20例2

從鍵盤輸入一個小寫字母,轉換成大寫字母輸出。;3_8_1.asmdatasegmentparapublic‘data’string1db‘Pleaseinput(a–z):$’string2db0dh,0ah,‘Theresultis:$’dataendsss_segsegmentparastackdb256dup(?)ss_segends順序結構程序設計21codesegmentparapublic‘code’assumecs:code,ss:ss_seg,ds:datamainprocfarStart:pushds xorax,ax pushax movax,data mov ds,ax leadx,string1 movah,9 ;顯示提示符1 int 21h mov ah,1 ;輸入小寫字符

int 21h;ASCII碼保存ALsubal,20hpushaxleadx,string2movah,9;顯示提示符2int21hpopaxmovah,2;輸出大寫字符

movdl,alint21hret ;返回DOSmainendpcodeendsendStart順序結構程序設計22例3以16進制形式顯示存儲器中一個字節的無符號數VAR。例如:11010101顯示D5;3_8_3.asmdatasegmentpara var db100dataendssta_segsegmentstack db 256dup(?)sta_segendscode segmentassumecs:code,ds:data,ss:sta_seg順序結構程序設計23mainprocfar pushdsmovax,0pushaxmovax,datamovds,axmoval,var movdh,al movcl,4 shral,cl callubasc callpchar moval,dhcallubasc

callpchar

retmainendp;顯示一個字符pcharproc

movah,02h

movdl,al

int21h

ret

pcharendp;將AL的低4位轉換為ASCII碼

ubascprocandal,0fh

addal,30h

cmpal,‘9’

jnaubasc1

addal,07h

ubasc1:retubascendp順序結構程序設計24JZL1L1:………...L2:…...L3:…...JMPL3TESTAX,1程序段1程序段2條件后繼程序YN分支結構程序設計25JZL1L1:………...…...TESTAX,1程序段1后繼程序條件YN分支結構程序設計26條件轉移指令就是一個分支結構,常用數據比較指令:無符號數比較指令JB/JNAE/JCJNB/JAE/JNCJBE/JNAJNBE/JA有符號數比較指令JL/JNGEJNL/JGEJNLE/JGJLE/JNG分支結構程序設計27二分支結構例4在數據段中有兩個16位二進制無符號數DATA1和DATA2,找出其中較小數,并存于MIN中。datasegmentdata1dw2000hdata2dw3f80hmindw?dataendsss_segsegmentstack db256dup(?)ss_segendscodesegmentassumecs:code,ds:data,ss:ss_segmainprocfarpushdsmovax,0pushaxmovax,datamovds,ax

movax,data1cmpax,data2jnaenextmovax,data2next:movmin,axretmainendpcodeendsendmain分支結構程序設計28三分支結構例5判斷變量var中的值,若為正數,在result中存入0001H;為負數,在result中存入FFFFH;為零,在result中存入0000H。datasegmentvardw2000hresultdw0dataendsss_segsegmentstack dw100dup(0)ss_segendscodesegmentassumecs:code,ds:data,ss:ss_seg分支結構程序設計29main procfar pushds movax,0pushaxmovax,datamovds,ax

movax,varcmpax,0jllessjggreatmovax,0jmpshortnextless: movax,0ffffh jmpshortnextgreat: movax,0001hnext:movresult,axretmainendpcodeendsendmain分支結構程序設計30多分支機構例

根據內存字節變量control被置位的情況控制程序轉移到8個子程序中的一個。datasegment

brn_tabdwsubr1,subr2,subr3,dwsubr4,subr5,subr6,dwsubr7,subr8controldb40hdataendsss_segsegmentstackdb100dup(0)ss_segendscodesegmentassumecs:code,ds:data,ss:ss_seg變量control轉入子程序00000001subr100000010subr200000100subr300001000subr400010000subr500100000subr601000000subr710000000subr8分支結構程序設計31mainprocfar …

leabx,brn_tabmoval,controlgtbit:rcral,1jcgetagaddbx,2jmpshortgtbitgetag:call[bx]retmainendpsubr1proc…retsubr1endp…subr8proc…retsubr8endpcodeendsendmain分支結構程序設計32先執行、后判斷初始化部分循環體修改部分條件循環結構程序設計先判斷、后執行初始化部分循環體修改部分條件后繼程序33單重循環循環結構程序設計34多重循環:氣泡排序法

例在數據段中以buffer單元開始連續存放10個16位二進制有符號數,將這些數按由小到大順序排列。開始初始化數組起始地址SI內循環次數N-1CX外循環次數N-1DXi=0地址加2數i<=數i+1?內循環計數CX-1CX=0?Y二數位置交換N外循環計數DX-1YNDX=0?NY結束各重循環的初始控制條件及程序實現內循環可以嵌套在外循環中,也可以幾個內循環并列在外循環中,但各層循環之間不能交叉,可以從內循環跳到外循環,不可以從外循環直接跳到內循環防止出現死循環,即不能讓循環回到初始條件,引起死循環35codesegmentassumecs:code,ds:data,ss:ss_segmainprocfar pushds movax,0 pushax movax,data movds,ax movsi,countsort1: movdi,1 movcx,di leabx,buffercircle: movax,[bx] incbxincbx cmpax,[bx] jlenext xchgax,[bx] mov[bx-2],ax movdi,cxnext:inccxcmpcx,si;比完

jlcircle;1遍

decsicmpdi,1jnesort1retmainendpcodeendsendmain循環結構程序設計36冒泡法的第二種實現 mainprocfar cmp ax,[bx] pushds jle next xor ax,ax xchg ax,[bx];交換數據

pushax mov [bx-2],ax mov ax,data next: loop main2 ;內循環

mov ds,ax pop cx movcx,count–1 loop main1;外循環main1: mainendp lea bx,buffer pushcxmain2: mov ax,[bx] inc bxinc bx循環結構程序設計37子程序(過程)調用程序設計(參數傳遞、保護現場)子程序設計38子程序設計子程序的描述(注釋用)子程序的功能描述入口參數的描述出口參數的描述斷點保護子程序中用到的寄存器應用堆棧進行保護 例:subr1proc pushax …… popax ret subr1endp39

子程序的參數傳遞通過寄存器傳遞參數通過全局變量傳遞參數通過堆棧傳遞參數其它子程序設計40子程序設計(一)無參子程序設計在子程序中無傳入參數,也不返回參數例延時子程序DELAYPROC

PUSHCXDELAY1:MOVCX,0LOOPDELAY1POPCXRETDELAYENDP41子程序設計(二)帶參數子程序設計使用寄存器傳遞參數例ASCII轉換為16進制子程序(0-0FH)入口條件:(AL)存放ASCII碼;出口條件:(AL)存放16進制;

atohexproc subal,30hcmpal,10

jlatohex1 subal,7

atohex1:

ret

atohexendp42子程序設計使用全局變量傳遞參數

主程序與子程序共用一組變量,這種結構獨立性較差

在數據段中,data1存放4位壓縮BCD碼(低位在前),將其轉化成二進制數,再存回data1中。

分析:二進制數=(((BCD3*10+BCD2)*10+BCD1)*10+BCD0BCD1BCD0BCD3BCD2data1低8位高8位datasegment

data1dw?dataendsss_segsegmentstackdb100dup(0)ss_segendscodesegmentassumecs:code,ds:data,ss:ss_seg43子程序設計startprocfarpushdsmovax,0pushaxmovax,datamovds,ax

movdata1,4356hcallbcdhexretstartendpbcdhexprocpushaxpushcxpushdx pushsipushdimovsi,data1

……movdata1,axpopdipopsipopdxpopcxpopaxretbcdhexendpcodeendsendstart44子程序設計通過堆棧傳遞參數在子程序調用之前將入口參數壓入堆棧。子程序根據當前堆棧指針找到參數。

此種方法程序獨立性強,高級語言編譯程序多采用該種方法。

在數據段data1和data2中存放兩個16位二進制有符號數,將其中較大數找出來存放于result中。datasegmentdata1dw3000data2dw-500resultdw?dataends45子程序設計ss_segsegmentstack db256dup(?)ss_segendscodesegmentassumecs:code,ds:data,ss:ss_segmainprocfar pushdssubax,axpushaxmovax,datamovds,ax

movax,data1pushax movax,data2pushax

callmaxpopcxpopcxmovresult,axretmainendpmaxproc

pushbpmovbp,sp

movdx,[bp+4]movax,[bp+6]cmpax,dxjgshortmax1movax,dxmax1:;movsp,bppopbpretmaxendpcodeends

endmain46子程序設計通過代碼段傳遞參數例在數據段中有一個16位二進制無符號數var,計算下列表達式:var*10+600并把結果存于result單元中。datasegment vardw32767 resultdd?dataendsssegsegmentstack db100dup(?)ssegendscodesegmentassumecs:code,ds:data,ss:ss_seg47子程序設計startprocfar pushds movax,0 pushax movax,data movds,ax movax,var

callfunc dw10 dw600 leabx,r

溫馨提示

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

評論

0/150

提交評論