西安郵電大學(xué)匯編語言程序設(shè)計(jì)競賽報(bào)告_第1頁
西安郵電大學(xué)匯編語言程序設(shè)計(jì)競賽報(bào)告_第2頁
西安郵電大學(xué)匯編語言程序設(shè)計(jì)競賽報(bào)告_第3頁
西安郵電大學(xué)匯編語言程序設(shè)計(jì)競賽報(bào)告_第4頁
西安郵電大學(xué)匯編語言程序設(shè)計(jì)競賽報(bào)告_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、西安郵電大學(xué)匯編語言程序設(shè)計(jì)競賽報(bào)告專業(yè)班級通工1206學(xué)生姓名王煒學(xué)號03121167時(shí)間2014年11月24日 1、 設(shè)計(jì)題目 小型多任務(wù)管理系統(tǒng)2、 設(shè)計(jì)內(nèi)容應(yīng)用8086cpu匯編語言,設(shè)計(jì)任務(wù)管理系統(tǒng),對多個(gè)任務(wù)進(jìn)行管理和調(diào)度,能夠?qū)崿F(xiàn)任務(wù)間的切換,保存上下文信息。運(yùn)行任務(wù)時(shí)可從屏幕處看到任務(wù)結(jié)果。3、 需求分析1、系統(tǒng)完整功能在屏幕顯示3個(gè)子窗口,他們的行列坐標(biāo)如下: 左窗口用于實(shí)現(xiàn)當(dāng)鍵入任意字母時(shí),可將其全部轉(zhuǎn)換為小寫字母;右窗口用于實(shí)現(xiàn)當(dāng)鍵入任意字母時(shí),可將其全部轉(zhuǎn)換為大寫字母;下窗口用于顯示功能提示信息。光標(biāo)首先定位于左窗口第一行行首(5,10)處,可根據(jù)左右鍵的輸入改變光標(biāo)定

2、位,以便分時(shí)使用左右窗口。當(dāng)光標(biāo)處于左(右)窗口處,鍵入任意字母同步顯示在光標(biāo)位置處,若按Enter鍵,其轉(zhuǎn)換結(jié)果將顯示在窗口中央處,按任意鍵清屏,光標(biāo)回到第一行行首(5,10)處,可重新輸入字母進(jìn)行轉(zhuǎn)換。按ESC鍵返回到DOS界面。2、 系統(tǒng)測試截圖4、 概要設(shè)計(jì)1、 方案設(shè)計(jì)系統(tǒng)思路簡單明確,主要運(yùn)用BISO調(diào)用,用到宏定義較為方便的處理問題。把一些基本功能編寫成宏,在宏調(diào)用可高效的執(zhí)行程序。系統(tǒng)主要分為光標(biāo)定位、清屏、接受字符并判斷、在屏幕上顯示字符、屏幕上顯示轉(zhuǎn)換結(jié)果等模塊。結(jié)構(gòu)框圖 2、 模塊功能說明(1) 多窗口顯示:在代碼段中調(diào)用四次宏scroll,分別設(shè)置好總窗口,左窗口,右窗

3、口,下窗口。(2) 光標(biāo)定位:用int10h的3號中斷得到光標(biāo)位置,通過與窗口的坐標(biāo)比較確定光標(biāo)位置(3) 清屏:用scroll刷新需要清屏的窗口(4) 顯示字符:左右窗口分別用int10h的0E號中斷顯示光標(biāo)處字符,用int16h的9號中斷顯示leftbuf和rightbuf的字符。窗口用int16h的9號中斷顯示data段的mainbuf字符。(5) 接受字符并判斷:用int16h的0號中斷接受字符,通過判斷掃描碼確定字符。5、 詳細(xì)設(shè)計(jì)及運(yùn)行結(jié)果1、程序運(yùn)行流程2、 程序中使用的功能調(diào)用INT 10H:02H功 能:用文本光標(biāo)設(shè)置光標(biāo)位置入口參數(shù):AH =02HBH=頁號DH/DL=行/

4、列出口參數(shù):無03H功 能:在文本坐標(biāo)下,光標(biāo)各種信息入口參數(shù):AH = 03HBH=頁號出口參數(shù):CH=光標(biāo)起始行CL=光標(biāo)結(jié)束行DH/DL=行/列06H功 能:屏幕初始化入口參數(shù):AH = 03HAL= 0 初始化窗口BH=卷入行屬性CH=光標(biāo)起始行CL=光標(biāo)結(jié)束行CH/CL=左上角行/列號DH/DL=右上角行/列號出口參數(shù):無0EH功 能:顯示字符入口參數(shù):AH = 0EHAL=字符BH=頁碼BL=前景色出口參數(shù):無INT 16H:00H功 能:從鍵盤讀字符入口參數(shù):AH =00H出口參數(shù):AH =掃描碼AL=字符碼3、 程序及必要注釋scroll macro ulrow,ulcol,l

5、rrow,lrcol,att,function ;設(shè)置或上卷窗口(由function決定) MOV bh,0 MOV ah,6h MOV al,function MOV ch,ulrow MOV cl,ulcol MOV dh,lrrow MOV dl,lrcol MOV bh,att int 10h endm pos_curse macro xx,yy ;設(shè)置光標(biāo)在 (x,y)位置 MOV bh,0 MOV ah,2 mov dh,xx MOV dl,yy int 10h endm get_char macro clx,cly,crx,cry local again,toleft,torig

6、ht,inleft,inright,judge,runleft,runright,showleft again: mov ah,00H ;從鍵盤讀字符,al為ASCII碼,ah為掃描碼 int 16H cmp ah,01H ;esc,則跳轉(zhuǎn)到主程序的exit je temp1 jne temp2temp1: jmp exittemp2: cmp ah,4BH ;若為鍵,跳轉(zhuǎn)到left je toleft cmp ah,4DH ;若為鍵,則跳轉(zhuǎn)到right je toright cmp ah,1CH ;若為Enter鍵,跳轉(zhuǎn)到j(luò)udge je judge ;若為普通字符 mov ah,0EH ;

7、在當(dāng)前光標(biāo)位置處顯示字符 int 10H mov ah,03H ;讀取光標(biāo)位置 int 10H ;dh是行,dl是列 cmp dl,28H ;與左右窗口之間的列坐標(biāo)位置比較 jb inleft ;小于40,表示在左窗口 ja inrighttoleft: pos_curse 5,cly jmp again toright: pos_curse 5,cry jmp againinleft: inc cly or al,00100000B mov ds:si+06H,al inc si pos_curse 5,cly jmp again inright: inc cry and al,110111

8、11B mov ds:di+16H,al inc di pos_curse 5,cry jmp again judge: mov ah,03H ;讀取光標(biāo)位置 int 10H ;dh是行,dl是列 cmp dl,28H ;與左右窗口之間的列坐標(biāo)位置比較 jb runleft ;小于40,表示在左窗口 ja runright runleft: mov byte ptr ds:si+06H,$ mov si,0 ;此處調(diào)用左窗口程序 pos_curse 0AH,0FH lea dx, leftbuf mov ah, 9 int 21h ; output string at ds:dx mov ah

9、, 1 ;等待按鍵 int 21h scroll 5h,0ah,0fh,1eh,1fh,0 ;重置左窗口 mov cly,0AH jmp toleft runright: mov byte ptr ds:di+16H,$ mov di,0 ;此處調(diào)用右窗口程序 pos_curse 0AH,37H lea dx, rightbuf mov ah, 9 int 21h mov ah, 1 ;等待按鍵 int 21h scroll 5h,32h,0fh,46h,1fh,0 mov cry,32H jmp toright endm data segment lx db 05H ;初始時(shí)刻左窗口左上角(

10、5,10) ly db 0AH rx db 05H ;初始時(shí)刻右窗口左上角(5,50) ry db 32H dwx db 12H ;初始時(shí)刻下窗口左上角(18,15) dwy db 0FH leftbuf db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;06H rightbuf db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;16H mainbuf1 db Transform capital letters and lower case letters!$ ;12345678901234567890123456789012345678901234

11、567890 mainbuf2 db You can press to change between left-win$ mainbuf3 db -dows and right-windows If you want to exit,you c$ mainbuf4 db -an press Esc.Now press any key to see the result$ data endsstack segmentdw 8 dup(0);暫存寄存器stack endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax

12、;設(shè)置堆棧段地址和偏移地址 mov ax,stackmov ss,axmov sp,10h ;初始化窗口 urow ucol lrow lcol att scroll 0,0,18h,4fh,70h,0 ;function為0 設(shè)置三個(gè)窗口 scroll 5h,0ah,0fh,1eh,1fh,0 scroll 5h,32h,0fh,46h,1fh,0 scroll 12h,0fh,16h,41h,1fh,0 ;顯示界面語句 pos_curse 12H,0FH lea dx,mainbuf1 mov ah,09H int 21H pos_curse 13H,0FH lea dx,mainbuf2

13、 mov ah,09H int 21H pos_curse 14H,0FH lea dx,mainbuf3 mov ah,09H int 21H pos_curse 15H,0FH lea dx,mainbuf4 mov ah,09H int 21H pos_curse lx,ly get_char lx,ly,rx,ry exit: mov ax,4C00H int 21H code ends end start4、 運(yùn)行結(jié)果 6、 調(diào)試情況,設(shè)計(jì)技巧及體會1、 任務(wù)完成情況設(shè)計(jì)系統(tǒng)主要是功能是在多窗口條件下完成多項(xiàng)任務(wù),與預(yù)期效果基本一致。但這些指令并非學(xué)習(xí)過程中用到過的,許多指令功能不清楚,需要一點(diǎn)一點(diǎn)地查閱,還要從眾多指令中選擇正確的指令實(shí)現(xiàn)要求的功能,在相關(guān)指令使用過程中還要注意其使用方法。在經(jīng)過多次調(diào)試之后,可以在任意窗口中自由鍵入字符,按左右鍵來回切換以便使用左右窗口的不同功能。在窗口中按下Enter鍵即可顯示轉(zhuǎn)換結(jié)果,繼續(xù)按任意鍵清屏,重新使用系統(tǒng)功能。2、 心得體會此次競賽設(shè)計(jì)并不簡單,在程序編寫過程中使用到多方面知識,在程序執(zhí)行過程中,寄存器中的值會發(fā)生變化,有些值需要保存,有些值需要根據(jù)條件做適當(dāng)更改,都需要嚴(yán)格控制;在條件判斷、程序跳轉(zhuǎn)時(shí),在何時(shí)執(zhí)行哪段程序,及執(zhí)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論