九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > PPT文檔下載  

屏幕處理和鍵盤輸入基本特性

  • 資源ID:22679851       資源大小:537.31KB        全文頁數(shù):79頁
  • 資源格式: PPT        下載積分:14.9積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要14.9積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請(qǐng)知曉。

屏幕處理和鍵盤輸入基本特性

第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 第8章 屏幕處理和鍵盤輸入基本特性 8.1 中斷指令I(lǐng)NT 8.2 基本屏幕處理 8.3 鍵盤輸入 8.4 屏幕顯示和鍵盤操作(擴(kuò)充DOS) 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 8.1 中斷指令I(lǐng)NT 中斷指令I(lǐng)NT的功能是中斷程序的執(zhí)行,轉(zhuǎn)移到DOS或BIOS處理某一項(xiàng)指定工作后,再回到程序繼續(xù)執(zhí)行。中斷常用來執(zhí)行輸入或輸出操作。為了可靠地返回中斷處的程序,所有的中斷必須留下蹤跡。為了實(shí)現(xiàn)這些要求,中斷指令I(lǐng)NT執(zhí)行下列的步驟: 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 中斷指令I(lǐng)NT的功能是中斷程序的執(zhí)行,轉(zhuǎn)移到DOS或BIOS處理某一項(xiàng)指定工作后,再回到程序繼續(xù)執(zhí)行。中斷常用來執(zhí)行輸入或輸出操作。為了可靠地返回中斷處的程序,所有的中斷必須留下蹤跡。為了實(shí)現(xiàn)這些要求,中斷指令I(lǐng)NT執(zhí)行下列的步驟: 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 (1) 將堆棧指針SP減2,再將標(biāo)志寄存器PSW內(nèi)容壓入堆棧中。 (2) TF和IF標(biāo)志位清0。 (3) 將堆棧指針SP減2,再將CS寄存器內(nèi)容壓入堆棧中。 (4) 將堆棧指針SP減2,再將指令指針寄存器IP的內(nèi)容壓入堆棧中。 (5) 執(zhí)行中斷所要求的操作。 (6) 從中斷中彈出各個(gè)寄存器的內(nèi)容,再返回到INT指令的下一條指令繼續(xù)執(zhí)行。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 這些過程是自動(dòng)完成的,程序員所要做的僅是定義一個(gè)足夠大的堆棧段,以確保壓入和彈出的操作能順利完成。 本章介紹兩種形式的中斷:BIOS的INT 10H,它負(fù)責(zé)屏幕處理;DOS的INT 21H負(fù)責(zé)輸出顯示和接受輸入。INT 21H通常被稱為某項(xiàng)操作的DOS系統(tǒng)功能調(diào)用。依照不同的需求目的,分別使用INT 10H 或INT 21H 完成不同的操作。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 8.2 基本屏幕處理 本節(jié)介紹較早期DOS對(duì)屏幕的處理方法。它們是設(shè)定光標(biāo)的位置、清除屏幕和顯示字符。 8.2.1 設(shè)定光標(biāo)位置 屏幕是由一格一格的小方格所組成的,光標(biāo)可以設(shè)定在任意的小方格上。例如,典型的監(jiān)視器有25行(024)、80列(079)。表8-1是光標(biāo)位置的例子。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 表8-1 光 標(biāo) 位 置位置十進(jìn)制數(shù)十六進(jìn)制數(shù)行列行列左上角00 00 00 00 右上角00 79 00 4F屏幕中央12 39/40 0C 27/28左下角24 00 18 00右下角24 79 18 4F 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 INT 10H的特色是可以把光標(biāo)定在屏幕的任何位置以及清除屏幕。下面的例子是把光標(biāo)放在第5行、12列的位置上。 MOV AH, 02 ;功能號(hào)定址要求 MOV BH, 00 ;第0頁 MOV DH, 05 ;第5行 MOV DL, 12 ;第12列 INT 10H ;中斷轉(zhuǎn)移至BIOS 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 AH的值02通知BIOS要設(shè)定光標(biāo),行和列的值必須放到DX寄存器中,頁數(shù)通常是0,放在BH中。其他寄存器的內(nèi)容不需要。也可以用MOV指令和十六進(jìn)制的立即數(shù)來設(shè)定光標(biāo)位置。例如: MOV DX ,050CH ;第5行、第12列 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 8.2.2 清除屏幕 系統(tǒng)的提示命令通常都會(huì)留在屏幕上,直到新的信息顯示或屏幕向上卷動(dòng),提示命令才會(huì)消失。當(dāng)程序開始時(shí),若想要清除屏幕,也可以從屏幕的任何位置開始清除到行和列編號(hào)較高的位置。方法是把終止行、列的值送入DX中,07送入BH中,設(shè)定AX為0600H。下面是一個(gè)清除整個(gè)屏幕的例子: 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 MOV AX,0600H ;AH=06(屏幕上卷),AL=00(整個(gè)屏幕) MOV BH,07 ;正常屬性(黑白) MOV CX,0000 ;起始位置0行、0列 MOV DX,184FH ;終止位置(24/79) INT 10H 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 上述操作是把屏幕上卷成空白。假如,屏幕右下角坐標(biāo)所設(shè)定的值大于184FH,會(huì)使屏幕的卷動(dòng)超過一幀畫面,造成某些地方被清除兩次,雖然這種疏忽在單色屏幕上不會(huì)造成什么傷害,但是在彩色監(jiān)視器上,可能會(huì)造成嚴(yán)重的錯(cuò)誤。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 8.2.3 顯示字符 通常程序會(huì)顯示一些信息,以提示程序已經(jīng)完成或發(fā)生錯(cuò)誤,或者提示使用者輸入信息,或說明下一步的操作。 較早期的DOS將要顯示在屏幕上的信息定義在數(shù)據(jù)段中;設(shè)定AH為09(DOS功能調(diào)用號(hào)),并且使用DOS功能調(diào)用INT 21H。要顯示的內(nèi)容以符號(hào)“$”作為結(jié)束標(biāo)志,如下所示: 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 NAMPRMP DB Customer name?,$ MOV AH,09 LEA DX,NAMPRMP INT 21H 符號(hào)“$”也可以直接寫在提示語句內(nèi),如Customer name?$,或?qū)懺谙乱恍小5荒苡蒙鲜龅牟僮鲗⒆址?”顯示在屏幕上。如果在提示信息后省略了符號(hào)“$”,上述指令會(huì)繼續(xù)顯示字符,直到遇到一個(gè)“$”字符為止。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 LEA指令將NAMPRMP的地址裝入DX 寄存器中,使得DOS能夠找到所要顯示的信息。LEA只是裝入NAMPRMP在數(shù)據(jù)段的偏移地址,DOS利用DS寄存器的值乘以10H加上DX(DS:DX)的值,確定出存儲(chǔ)器的物理地址即實(shí)際地址。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 8.2.4 顯示ASCII碼字符集 例8.1 顯示00HFFH的ASCII字符集。 256個(gè)ASCII碼字符,大部分都能以一個(gè)符號(hào)顯示在屏幕上,因?yàn)?0H和FFH沒有符號(hào)表示,所以顯示空白,但是在ASCII碼中,真正的空白是20H。程序清單如下: ; filename:L81.ASM ; 數(shù)據(jù)段 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 DATA SEGMENT CTR DB 00H, $DATA ENDS; 堆棧段STACK_ SEGMENT PARA STACK STACK DW 100 DUP(?)STACK_ ENDS; 代碼段CODE SEGMENT PARA CODE 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 ; 主程序MAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACK_START: PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX CALL BIOCLR CALL CIOSET 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 CALL DIODISP RET MAIN ENDP; 清除屏幕BIOCLR PROC MOV AX,0600H MOV BH,07 MOV CX,0000 MOV DX,184FH INT 10H RET 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 BIOCLR ENDP; 設(shè)置光標(biāo)0行、0列CIOSET PROC MOV AH,02 MOV BH,00 MOV DX,0C28H INT 10H RET CIOSET ENDP 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 ; 顯示ASCII碼字符集DIODISP PROC MOV CX,256 LEA DX,CTRD20: CMP CTR,08H JB D30 CMP CTR,0DH JBE D40 D30: MOV AH,09 INT 21H 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 D40: INC CTR LOOP D20 RETDIODISP ENDP; CODE ENDS END START 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 說明:例8.1會(huì)出現(xiàn)如下問題,符號(hào)“$”并不顯示在屏幕上;介于08H到0DH之間的字符是一些特殊的格式控制符,用來作為退位和其他的一些控制,它們將會(huì)使光標(biāo)移動(dòng)。 建議:鍵入例8.1中的程序,然后編譯、鏈接,生成一個(gè)可執(zhí)行的文件,如ASCII.EXE,然后執(zhí)行該文件。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 結(jié)果:屏幕上顯示的第一行,由一個(gè)空白開始(00H),然后是兩個(gè)“笑臉”(01H、02H),再接著是紅心,方塊和梅花(03H、04H和05H),07H會(huì)使喇叭響一聲,06H會(huì)顯示黑桃,但是會(huì)被08H到0DH的控制字符所清除,0DH會(huì)使光標(biāo)跳到下一行的開頭,0EH是音樂符號(hào),7FH以上的字符都是圖形符號(hào)。 可以修改例8.1的程序,以便跳過這些控制字符。下面的一段指令可以跳過介于08H 到0DH的所有字符。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 CMP CTR,08H ;低于08H? JB D30 ;不高于/等于,則跳到顯示 CMP CTR,0DH ;不高于0DH? JBE D40 ;不高于,則跳過顯示D30: MOV AH,09 ;顯示低于08H高于0DH的ASCII碼字符 INT 21HD40: INC CTR 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 8.3 鍵 盤 輸 入 實(shí)現(xiàn)從鍵盤接受輸入的程序和顯示輸出的做法相似。對(duì)于早期DOS的輸入方法,需設(shè)置輸入?yún)^(qū)以指明輸入信息的參數(shù),使得中斷指令I(lǐng)NT能夠處理。 首先,用于輸入的中斷必須知道輸入信息的最大長(zhǎng)度,其目的是在使用者輸入太長(zhǎng)的信息時(shí)發(fā)出警告,并且不再接受輸入字符。其次,輸入操作會(huì)計(jì)算出真正的輸入字符的長(zhǎng)度,共占用多少個(gè)字節(jié),并將其值 放入輸入?yún)?shù)表中。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 8.3.1 鍵盤輸入字符 下面的例子是首先為輸入定義一個(gè)參數(shù)表。LABEL是一條偽指令,類型為字節(jié)類型(BYTE),指示參數(shù)表的開始。參數(shù)表的第1個(gè)字節(jié)是限制輸入字符的最大長(zhǎng)度,因?yàn)橹徽家粋€(gè)字節(jié),所以輸入的最大長(zhǎng)度為FFH或255。第2個(gè)字節(jié)是留給DOS存儲(chǔ)真正的輸入字符長(zhǎng)度的。從第3個(gè)字節(jié)開始,是存放輸入字符的地方。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 NAMEPAR LABEL BYTE ;參數(shù)表的開始MAXLEN DB 20 ;輸入字符的最大長(zhǎng)度ACTLEN DB ? ;真實(shí)的輸入字符長(zhǎng)度NAMEFLD DB 20 DUP( ) ;鍵盤輸入字符的存儲(chǔ)處 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 此參數(shù)表的LABEL是一條偽指令,不占存儲(chǔ)空間。利用AH為10(0AH)的DOS功能調(diào)用(INT 21H),可以實(shí)現(xiàn)接受鍵盤輸入字符。方法是把參數(shù)表(本例中為NAMEPAR)的地址送入DX寄存器中,然后發(fā)出INT 21H 調(diào)用。 MOV AH,0AH ;請(qǐng)求輸入功能號(hào)為0AH LEA DX,NAMEPAR ;參數(shù)表首地址填入DX INT 21H ;DOS中斷 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 INT 21H指令會(huì)等待使用者輸入字符,并且檢查輸入字符個(gè)數(shù)是否超過參數(shù)表中的最大長(zhǎng)度(本例中是20)。當(dāng)使用者按下回車鍵(0DH)即表示結(jié)束輸入,結(jié)束符(0DH)也會(huì)跟著進(jìn)入到輸入字符欄(本例為NAMEFLD)。假如,輸入一個(gè)叫BROWN(回車Enter)的名字,則輸入?yún)?shù)表的內(nèi)容將成為:十進(jìn)制20 5 B R O 十六進(jìn)制14 05 42 52 4FW N Enter 20 20 57 4E 0D 20 20 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 此中斷操作同時(shí)也傳送回輸入名字的長(zhǎng)度05,存入?yún)?shù)表的第2個(gè)字節(jié),在本例中為ACTLEN?;剀囨I字符存放在NAMEFLD+5的位置。因?yàn)?DH是不能輸出符號(hào)的,在此以Enter表示,雖然最大的輸入長(zhǎng)度為20,但必須包含0DH,所以真正輸入的名字只能有19個(gè)字符。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 8.3.2 鍵盤輸入并顯示名字 例8.2 要求用戶輸入名字,并將它顯示在屏幕中央,同時(shí)發(fā)出嘟的一聲響聲。通過例8.2對(duì)8.3.1節(jié)中的內(nèi)容進(jìn)行使用。 程序清單如下: ; filename:L82.ASM;STACK_SEGMENTPARASTACKSTACKDW32DUP(?)STACK_ ENDS 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 ;DATA SEGMENTPARADATANAMEPAR LABEL BYTE;參數(shù)表開始MAXNLEN DB 20;輸入名字的最大長(zhǎng)度NAMELEN DB ? ;真正輸入名字的長(zhǎng)度NAMEFLD DB 20DUP(), $ ;輸入名字的存放處PROMPT DB NAME?, $;提示句 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 DATA ENDS;CODESGSEGMENTPARACODEMAIN PROC FAR ASSUMECS:CODESG,DS:DATA,SS:STACK_,ES:DATABEGIN: PUSHDS SUBAX,AX PUSHAX 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 MOVAX,DATA MOVDS,AX MOVES,AX CALLQ10CLR ;清屏 A20LOOP: MOVDX,0000 ;設(shè)定光標(biāo)0行0列 CALLQ20CURS ;屏幕設(shè)置 CALLB10PRMP ;顯示提示語句 MOVCX,20 MOVSI,0000 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 B30: MOVNAMEFLDSI,20H ;字符存放單元裝入20H(空白) INCSI LOOPB30 CALLD10INPUT;輸入名字 CALLQ10CLR;清屏 CMPNAMELEN,00 JE A30 ;輸入字符長(zhǎng)度為0,結(jié)束 CALLE10CODE;插入鈴聲與字符$ CALLF10CENT;顯示輸入的名字 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 JMPA20LOOPA30: RETMAINENDP; 顯示提示B10PRMPPROCNEAR MOVAH,09LEADX,PROMPTINT21HRET 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 B10PRMPENDP; 接受輸入名字D10INPUTPROCNEARMOVAH,0AH;接受輸入LEADX,NAMEPARINT21HRET D10INPUTENDP 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 ; 插入鈴聲與$字符E10CODEPROCNEAR MOVBH,00 MOVBL,NAMELEN ;BX中存放輸入字符的長(zhǎng)度MOVNAMEFLDBX,07 ;回車符(0DH)由07替換 MOVNAMEFLDBX+1, $ ;07后放字符$ RETE10CODEENDP 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 ; 顯示輸入的名字F10CENTPROCNEAR MOV DL,NAMELEN;輸入字符的長(zhǎng)度送入 DLSHRDL,1;右移1位(除以2) NEG DL;正號(hào)變更為負(fù)號(hào) ADD DL,40;光標(biāo)列定位值MOV DH,12;光標(biāo)行定位值 CALL Q20CURS;設(shè)置光標(biāo)位置 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 MOVAH,09LEADX,NAMEFLD;顯示名字 INT21HRETF10CENTENDP ; 清屏 Q10CLR PROCNEAR MOVAX,0600H MOVBH,07 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 MOVCX,0000 MOVDX,184FH INT10HRETQ10CLRENDP ; 設(shè)置頁號(hào)與光標(biāo)位置Q20CURSPROCNEAR 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 MOVAH,02MOVBH,00INT10HRETQ20CURSENDPCODESGENDS ENDBEGIN 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 程序說明如下: 1) 屏幕中央 重復(fù)執(zhí)行上述步驟,用戶通過鍵盤輸入名字,直到輸入一個(gè)回車(Enter)為止。假設(shè)輸入的名字是AI HUALIN。 (1) 將長(zhǎng)度09除以2等于4。 (2) 從40減此值等于36。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 在子程序F10CENT中,SHR指令將長(zhǎng)度09向右移1位,形成除以2的效果,使00001001變成00000100。NEG指令變更正負(fù)號(hào),把+4變成-4。ADD加上40得到列的位置36,并將它存入DL寄存器中。光標(biāo)被設(shè)定在第12行、36列的位置,此時(shí)顯示在屏幕上的名字如下: (12行)AI HUALIN (列) 36 40 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 2) 響聲 子程序E10CODE中的一條指令,是在輸入名字欄插入喇叭鳴叫的字符(07),字符07緊跟在輸入的名字之后: MOV NAMEFLDBX,07 該條指令前的兩條指令用于設(shè)定BX寄存器裝入輸入字符的長(zhǎng)度。本條MOV指令的作用是把BX中的長(zhǎng)度值與NAMEFLD的偏移地址相結(jié)合,并把07送到這個(gè)結(jié)合后的偏移地址單元中,如一個(gè)長(zhǎng)度為5個(gè)字符的輸入,這條指令將把07送入NAMEFLD+05偏移地址的單元中(取代回車符0DH)。在子程序E10CODE中的最后一條指令,緊跟著07加入一個(gè)“$”,使得子程序E10CENT在顯示名 字的同時(shí)發(fā)出嘟的一聲。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 3) 只輸入Enter(回車符) 假如,用戶所鍵入的名字超過參數(shù)表中給出的最大長(zhǎng)度(本例大于19)時(shí),系統(tǒng)會(huì)發(fā)出報(bào)警的喇叭聲,并且只能接受Enter(回車符)。但是,如果只輸入一個(gè)Enter鍵,系統(tǒng)會(huì)接受,并且在參數(shù)表中的輸入長(zhǎng)度欄中放入一個(gè)0,如下所示: 參數(shù)表NAMEPAR(十六進(jìn)制):14 00 0D 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 在要求輸入名字的提示下,用戶可以簡(jiǎn)單地只按下Enter鍵,來表示輸入內(nèi)容的結(jié)束,即當(dāng)輸入名字的長(zhǎng)度為0時(shí),本程序確定輸入內(nèi)容已結(jié)束。 4) 替換或清除Enter(回車符) 為了實(shí)現(xiàn)不同的用途,可以用空格符(20H)取代 NAMEFLD中某些處的回車符(0DH)。 NAMELEN這個(gè)欄包含了輸入的真正長(zhǎng)度,并且可以用來提供任何字符的相對(duì)偏移地址。例如,假設(shè)NAMELEN的值為5,則0DH的偏移地址是NAMEFLD+5。可以把這個(gè)長(zhǎng)度裝入BX寄存器中,并 且利用BX當(dāng)作NAMEFLD的索引地址。如: 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 MOV BH,00 MOV BL,NAMELEN ;BX為0005 MOV NAMEFLDBX,20H ;清除回車鍵替換為空格 第3條MOV指令傳送一個(gè)空格(20H)給NAMEFLD+5單元。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 5) 清除輸入?yún)^(qū)域 輸入?yún)^(qū)域的內(nèi)容將被輸入的字符所取代,而其他區(qū)域仍保留原來的字符,直到另有其他輸入字符取代它們?yōu)橹?。假設(shè)下面的例子是連續(xù)輸入的: (1) BROWN 14 05 42 52 4F 57 4E 0D 20 20 - 20 (2) HAMILTON 14 08 48 41 4D 49 4C 54 4F 4E 0D 20 (3) ADAMS 14 05 41 44 41 4D 53 0D 4F 4E 0D 20 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 HAMILTON 取代了比較短的名字BROWN。但是,因?yàn)锳DAMS名字比HAMILTON名字短,所以它只能取代至HAMIL,并且T字符被回車符(0DH)所取代。殘留的字符ON,仍緊跟在ADAMS之后。良好的編程習(xí)慣是,在送出要求輸入的提示語句之前,先把NAMEFLD清為空格。如: MOV CX,20 ;重復(fù)20次 MOV SI,0000 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 B30: MOV NAMEFLDSI,20H ;給名字處存入空格字符 INC SI ;加1 LOOP B30 ;循環(huán)20次 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 若不用SI寄存器,也可以使用DI或BX寄存器。更有效的方法是一次傳送一個(gè)字的空格字符,只需循環(huán)10次。但是,因?yàn)镹AMEFLD被定義為DB(BYTE)的類型,所以必須用WORD和PTR(Pointer)運(yùn)算符來更改它的類型。如: MOV CX,10 ;重復(fù)10次 LEA SI,NAMEFLD ;設(shè)SI為起始地址 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 B30: MOV WORD PTRSI,2020H ;給名字處寫入2個(gè)空格 INC SI INC SI ;加2 LOOP B30 ;循環(huán)10次 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 傳送空格的字到SI間接尋址的單元,本例中用LEA指令來設(shè)定起始地址值,并對(duì)于B30:的MOV指令使用了另外一些處理方法,這是由于不能將此指令寫成如下的格式: MOV WORD PTRNAMEFLD,2020H ; 不合理的指令格式 這樣,借清除輸入?yún)^(qū)域的方法,可解決輸入名字是否比上一次輸入短的困擾。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 8.4 屏幕顯示和鍵盤操作(擴(kuò)充DOS) 本節(jié)將要討論DOS 2.0以上版本的屏幕顯示和鍵盤操作方法。DOS以文件管理的方式管理設(shè)備,在要求I/O設(shè)備動(dòng)作時(shí),只需要把I/O設(shè)備的代號(hào)送入BX寄存器中即可。下列是標(biāo)準(zhǔn)設(shè)備號(hào): 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 0 輸入設(shè)備,鍵盤為標(biāo)準(zhǔn)輸入 1 輸出設(shè)備,顯示器為標(biāo)準(zhǔn)輸出 2 錯(cuò)誤輸出設(shè)備,總是顯示器 3 輔助設(shè)備,一般為通訊設(shè)備 4 標(biāo)準(zhǔn)打印機(jī) 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 DOS中斷是INT 21H,要求功能調(diào)用的功能號(hào)碼被放至AH中;3FH的功能是輸入,40H的功能是輸出。設(shè)定CX的值為所要輸入或顯示的字節(jié)個(gè)數(shù)(長(zhǎng)度),并且把輸入或輸出區(qū)域的偏移地址送入DX中。 當(dāng)處理的動(dòng)作成功時(shí),會(huì)把進(jìn)位標(biāo)志CF清為0,并且將真正輸入或顯示的字符個(gè)數(shù)放在AX中。當(dāng)處理動(dòng)作不成功時(shí),進(jìn)位標(biāo)志CF將被設(shè)置為1,并且會(huì)把錯(cuò)誤代碼(本例為6)放入AX。因?yàn)锳X的內(nèi)容可能為長(zhǎng)度值,也可能為錯(cuò)誤代碼,所以能判斷錯(cuò)誤情況的唯一方法是去測(cè)試進(jìn)位標(biāo)志CF,雖然鍵盤和屏幕上出現(xiàn)錯(cuò)誤的情況是罕見的。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 8.4.1 在屏幕上顯示 下列指令說明如何使用DOS擴(kuò)充的功能,要求顯示在屏幕上。 DISAREA DB 20 DUP( ) ;顯示區(qū)域 MOV AH,40H ;要求顯示MOV BX,01 ;輸出的設(shè)備管理MOV CX,20 ;最大20個(gè)字節(jié)LEA DX,DISAREA ;顯示區(qū)域 INT 21H ;調(diào)用DOS 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 LEA把DISAREA的偏移地址裝入DX中,使得DOS能找到所要顯示的內(nèi)容。操作成功時(shí)會(huì)把進(jìn)位標(biāo)志清為0,并且設(shè)定AX的值為所顯示字節(jié)的個(gè)數(shù)。不成功的操作也可能發(fā)生,其原因在于進(jìn)行了不正當(dāng)?shù)墓芾?。此操作將CF標(biāo)志設(shè)為1,并把錯(cuò)誤代碼(本例為6)放入AX之中。因?yàn)锳X可以為顯示字符的長(zhǎng)度值,也可以為錯(cuò)誤代碼,所以唯一能判斷錯(cuò)誤情況的方法是測(cè)試CF標(biāo)志。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 練習(xí)在屏幕上顯示 讓我們利用DEBUG去檢查中斷的內(nèi)部效果。裝入DEBUG,當(dāng)它的提示符“-”出現(xiàn)時(shí),鍵入A 100,以便在指令代碼段偏移地址100處開始輸入?yún)R編語言指令。要注意的是,DEBUG假設(shè)所有被輸入的數(shù)都是十六進(jìn)制。 100 MOV AH,40 102 MOV BX,01 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 105 MOV CX,09 (輸出的長(zhǎng)度) 108 MOV DX,10E 10B INT 21 10D RET 10E DB YOUR NAME 上面的程序段設(shè)定AH的值為40H,是要求顯示功能號(hào),并且設(shè)定DX為10EH,這個(gè)位置是要顯示字符串“YOUR NAME”的地址,在整個(gè)程序的最后面,類型被定義成字節(jié)。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 當(dāng)鍵入完上述的指令,再按一次回車鍵,就會(huì)退出A命令。利用U命令(U 100,10D)反匯編此程序,再反復(fù)地利用R和T命令去追蹤執(zhí)行。當(dāng)執(zhí)行到INT 21H指令時(shí),也就是到達(dá)10BH位置時(shí),它的執(zhí)行會(huì)跳往BIOS;利用G命令(G 10D)直接執(zhí)行到下一條指令。執(zhí)行完G命令后,YOUR NAME 將被顯示在屏幕上,最后利用Q命令,退出DEBUG而將控制權(quán)交還給DOS。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 8.4.2 從鍵盤接受輸入 下面的例子說明,如何利用DOS擴(kuò)充功能所提供的方法,實(shí)現(xiàn)從鍵盤接受輸入。 INAREA DB 20 DUP( ) ;輸入?yún)^(qū)域MOV AH,3FH ;要求輸入功能號(hào)MOV BX,00 ;對(duì)鍵盤的設(shè)備管理MOV CX,20 ;最大20個(gè)字節(jié)LEA DX,INAREA ;輸入?yún)^(qū)域 INT 21H ;調(diào)用DOS 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 LEA指令將INAREA的偏移地址送入DX。INT 21H中斷會(huì)使系統(tǒng)停下來等待使用者輸入字符,但是并不檢查輸入字節(jié)是否已經(jīng)超過CX寄存器內(nèi)容的值(本例為20),鍵入回車鍵(0DH)即表示輸入的結(jié)束。例如,輸入的字符串為“PC Vsers Group”,使得INAREA 的內(nèi)容如下所示: PC Vsers Group,0D,0A 輸入的字符串后緊跟著你所輸入的Enter(0DH)和不用你輸入的換行Line Feed(0AH)。因?yàn)檫@種特色,輸入?yún)^(qū)域的最大數(shù)目和長(zhǎng)度將另外附加2個(gè)字節(jié)。假如你所輸入的個(gè)數(shù)比最大長(zhǎng)度短時(shí),在存儲(chǔ)器中輸入字符 的存儲(chǔ)位置將和上面的例子相同。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 當(dāng)處理動(dòng)作成功時(shí),將把CF標(biāo)志清為0(通過測(cè)試可得知),并且把輸入字節(jié)的個(gè)數(shù)放入AX中。在先前的例子中,長(zhǎng)度為14,加上Enter和Line Feed兩個(gè)字節(jié),也可以說長(zhǎng)度為16。如前所述,程序可以確定字符的真正長(zhǎng)度。 因?yàn)閷?duì)設(shè)備管理的錯(cuò)誤,也有可能出現(xiàn)不成功的處理情形。當(dāng)這種情況發(fā)生時(shí),會(huì)將CF標(biāo)志設(shè)為1,并把錯(cuò)誤代碼(本例為6)放入AX中。因?yàn)锳X可為輸入字符的長(zhǎng)度,也可以為錯(cuò)誤代碼,所以唯一能確定是否發(fā)生錯(cuò)誤情況的方法是測(cè)試CF標(biāo)志的值。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 假如,所輸入的名字超過CX寄存器的值時(shí),這個(gè)處理動(dòng)作將會(huì)接受所有字符。假設(shè)CX的內(nèi)容為08,而使用者輸入的字符串為“PC EXCHANGE”,上述的動(dòng)作會(huì)將前面8個(gè)字符“PC EXCHA”放入輸入?yún)^(qū)域,在字符“A”后并沒有附加Enter和Line Feed兩個(gè)字符,并且AX的值為08。當(dāng)遇到下一個(gè)INT中斷時(shí),它所接受的名字并不是由鍵盤輸入的,而是緩沖器(BUFFER)內(nèi)的字符串,這是因?yàn)榇藭r(shí)緩沖器(BUFFER)內(nèi)仍殘留著上一次輸入的字符串。輸入?yún)^(qū)域的內(nèi)容將變成“NGE”加上Enter和Line Feed,AX被設(shè)置為5。上述的兩個(gè)動(dòng)作都是正常的,并且將CF標(biāo)志清為0。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 第一次 INT 21H:PC EXCHA AX=08 第二次 INT 21H:NGE 0D 0A AX=05 當(dāng)一個(gè)程序告知使用者,他所輸入的字符個(gè)數(shù)是正確的,它必須符合下列兩個(gè)條件:AX的值小于CX的值;AX的值等于CX的值,并且輸入?yún)^(qū)域最后的兩個(gè)字符為0D和0A。 早期的DOS對(duì)于鍵盤輸入調(diào)用功能0AH,因?yàn)榫哂袃?nèi)在的檢查能力,所以能提供一個(gè)功能更強(qiáng)的操作方法,至少在輸入文字方面,它是一個(gè)較佳的選擇。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 練習(xí)輸入資料 在此提供一個(gè)練習(xí),使你能在DEBUG之下觀察輸入資料所造成的影響。這個(gè)程序允許你輸入12個(gè)字符,包括Enter和Line Feed。裝入DEBUG,當(dāng)提示符“-”出現(xiàn)時(shí),鍵入A 100,表示在指令代碼段位置100處開始輸入?yún)R編語言指令。DEBUG狀態(tài)下的數(shù)字,都被認(rèn)為是十六進(jìn)制。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 100 MOV AH,3F 102 MOV BX,00 105 MOV CX,0C 108 MOV DX,10F 10B INT 21 10D JMP 100 10F DB 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 上述程序段設(shè)定AH和BX的值,要求作鍵盤輸入操作,CX的值是輸入的最大長(zhǎng)度,DX被設(shè)定為10FH程序最后一條指令DB的位置;輸入的字符將被存儲(chǔ)在10FH開始的地址位置處。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 當(dāng)你用A命令鍵入完上述指令,再按一次Enter鍵,就會(huì)退出A命令。用U命令(U100,10D)去反匯編這段程序。利用R命令、重復(fù)使用T命令,去追蹤前面四條MOV指令所執(zhí)行的結(jié)果。當(dāng)執(zhí)行位置到達(dá)10BH時(shí),利用G 10DH跳過中斷指令(不必追蹤BIOS的執(zhí)行過程)。DEBUG會(huì)等待著,讓你輸入字符,并以Enter告知輸入結(jié)束。檢查AX寄存器的內(nèi)容和進(jìn)位標(biāo)志變化的情況,并利用D 10F顯示輸入字符存放在存儲(chǔ)器中的情況。你可以多次地重復(fù)這些動(dòng)作。最后利用Q命令退出DEBUG。 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 8.4.3 利用Enter、Line Feed和TAB在屏幕上顯示 利用Enter、Line Feed和TAB字符,可讓顯示在屏幕上的字符串更有可讀性,它們分別為回車、換行和跳格。你可使用ASCII格式、十進(jìn)制或十六進(jìn)制來表示這些字符, 例如: ASCII格式 十進(jìn)制 十六進(jìn)制 CR(Enter) 13 0D LF(Line Feed) 10 0A TAB 09 09 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 在低版本DOS或擴(kuò)充版本DOS之下,當(dāng)需要顯示在屏幕上或接受輸入時(shí),都可以利用這些字符,使得光標(biāo)自動(dòng)地跳到下一行的起始位置。例如: MOV AH,40H ;要求顯示功能 MOV BX,01 ;屏幕處理 MOV CX,31 ;最大輸出長(zhǎng)度 LEA DX,MESSAG1 ;顯示的資料位置 INT 21H ;調(diào)用DOS 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 為增強(qiáng)上述程序的可讀性,可以利用EQU偽指令來定義處理字符,進(jìn)行修飾。例如:CR EQU 13 或 EQU 0DHLF EQU 10 或 EQU 0AHTAB EQU 09 或 EQU 09HMESSAGE DB TAB,PC Users Group Annual Report,CR,LF 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 例8.3 在屏幕上顯示字符“PC Users Group Annual Report”。程序清單如下:;filename:L83.ASM ;DATA SEGMENTMESSAGE DB TAB,PC Users Group Annual Report,CR,LFDATA ENDS; STACK_ SEGMENT PARA STACK STACK 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 DB 100 DUP(?)STACK_ ENDS;CODE SEGMENT CR EQU 13 LF EQU 10 TAB EQU 09 ASSUME CS:CODE,DS:DATA,SS:STACK_ 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 BEG:MOV AX,STACK_ MOV SS,AX MOV SP,100 MOV AX,DATA MOV DS,AX MOV AH,40H MOV BX,01 MOV CX,31 第 8章 屏 幕 處 理 和 鍵 盤 輸 入 基 本 特 性 LEA DX,MESSAGE INT 21H MOV AH,4CH INT 21HCODE ENDS END BEG

注意事項(xiàng)

本文(屏幕處理和鍵盤輸入基本特性)為本站會(huì)員(san****019)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!