• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    MASM-打字練習程序

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 18次 | 進入軟件測試論壇討論

    領測軟件測試網 功能:

    1) 從磁盤文件中讀入一些字母(程序中只載入一屏306個字符)

    2) 運行時,可按照屏幕顯示的字母輸入練習(模擬金山打字,這個實現很有挑戰性哦,先拷貝過去運行下看看效果哦)
    3) 輸完結束或按ESC結束.結束時可顯示出練習輸入的時間,并顯示出正確率.



    說明:

    該程序主要分成(刮弧中為相應主要的函數塊)

    1)打字事例文件加載模塊(LoadFile )注:加載文件的時候提供絕地路徑,而且文件中字符不宜太少,最好多于306個。
    2)打字屏幕提示及打字窗口模塊(clew_char,isFullLine )注:這里是算法的集中點,注意提示功能和退格功能的實現,特別注意退格時候對字符統計的影響的處理。
    3)打字時間及正誤統計模塊(TONGJI) 注:這里主要注意的是時間的顯示和正確率的計算,試試哦自己獨立實現下,很有趣的呢。

    4)打字結果計算與顯示模塊( UseTimeAndOut,RightRata_out) 注:怎么把結果顯示在屏幕上的呢,匯編中只能輸出字符(串)呀,這里的技巧啊,先想想哦(整數123,雖然是一個數可在屏幕上輸出''1''''2''''3''可不簡單呢,還有帶小數的(如98.34)怎么輸出呀?嘿嘿想想吧,肯定是要轉換的,但這算法.....)


    由于是很早前做的東西,當時又沒有做好文檔注釋,現在也沒時間重新揀起來.放在硬盤上刪了可惜,貼出來至少對剛接觸匯編又匯編感興趣的朋友還是有所幫助的.我做些大致性的標注希望能有所幫助(一般函數名表示該函數的主要實現的功能,宏也類似).

    如果代碼不能運行,請和我聯系:hbyufan@163.com (也可以給我發消息.)

    如果代碼不能運行,請和我聯系:hbyufan@163.com (也可以給我發消息.)
    ;程序:dazi.asm

    ;作者:周志明

    ; 說明:程序通過masm5運行

    ;--------------------------------------------------------------------
    ;------------------------------------------
    COLORCHAR MACRO char,color
            push ax
            push bx
            push cx
            push dx

            mov ah,9h
            mov al,char
            mov bh,0
            mov bl,color
            mov cx,1
            int 10h

            mov ah,03h
            mov bh,0
            int 10h
            mov ah,02
            add dl,1
            int 10h

            pop dx
            pop cx
            pop bx
            pop ax
    ENDM

    BACKCHAR MACRO char,color
            mov ah,02h
            mov dl,08h
            int 21h
            COLORCHAR char,color
    ENDM

    CLEARSCREAM MACRO alz,bhz,chz,clz,dhz,dlz
            push ax
            push bx
            push cx
            push dx

            mov al,alz
            mov bh,bhz
            mov ch,chz
            mov cl,clz
            mov dh,dhz
            mov dl,dlz
            mov ah,6h
            int 10h

            pop dx
            pop cx
            pop bx
            pop ax
    ENDM

    SETGBTYPE  MACRO chz,clz
            push ax
            push bx
            push cx
            push dx

            mov ch,chz
            mov cl,clz
            mov ah,1
            int 10h

            pop dx
            pop cx
            pop bx
            pop ax
    ENDM

    SETGB   MACRO bhz,dhz,dlz
            push  ax
            push  bx
            push  cx
            push  ax

            mov bh,bhz
            mov dh,dhz
            mov dl,dlz
            mov ah,2
            int 10h

            pop  dx
            pop  cx
            pop  bx
            pop  ax
    ENDM

    READGB  MACRO bhz
            push ax
            push bx
            push cx
            push dx

            mov bh,bhz
            mov ah,3
            int 10h
            mov gbattr[0],dh
            mov gbattr[1],dl

            pop dx
            pop cx
            pop bx
            pop ax
    ENDM

    LINEFULL  MACRO  lmax,lact
            push  ax
            push  bx
            push  cx
            push  dx

            mov  ax,lact
            cmp  ax,0
            jz   LFEXIT
            mov  dx,0
            cwd
            mov  bx,lmax
            div  bx
            cmp  dx,0
            jz   LNFU

            jmp  LFEXIT

    LNFU: mov  FullFlag,1
    LFEXIT: pop   dx
            pop   cx
            pop   bx
            pop   ax
    ENDM

    TISHI MACRO row,col,addr
            push ax
            push dx

            SETGB 0,row,col
            mov ah,09h
            lea dx,addr
            int 21h

            pop dx
            pop ax
    ENDM

    ;------------------------------------------
    data segment
            addr    db  400  dup(''$'')
            addrtp  db  400  dup(''$'')
            Anumber dw  0
            Enumber dw  0
            Rnumber dw  0
      
            LineMax dw  0
            LineAct dw  0
            FullFlag db 0
            gbattr  db  4  dup(0)
            oldgba  db  4  dup(0)
            newirupt     dw 2 dup(0)                   
            oldirupt     dw 2 dup(0)
            count   db  0
            Stime   db  3  dup(0)
            Utime   db  3  dup(0)
            temp db  50 dup(0)
            tempw dw  50 dup(0)
            path db  50 dup(0)
            ts00 db  ''Load File$''
            ts01 db  ''Load:$''
            ts02 db  ''OK?$''
            ts03 db  ''Path Error! Press any key to reinput!$''
            ts1  db  ''Stime:$''
            ts2  db  ''Rrate:$''
            ts3  db  ''Total Use-Time:$''
            ts4  db  ''Total Characters:$''
            ts5  db  ''Correct-Reta:$''
            ts6  db  ''Press any key to end!$''
    data ends

    code segment
            assume ds:data,cs:code
    start:
            mov ax,data
            mov ds,ax

            mov ah,0h
            mov al,03h  ;80*25/16
            int 10h
    ;------------------------------------------
            CLEARSCREAM 0,07H,0,0,24,79
            CLEARSCREAM 0,5eh,9,14,14,65
            TISHI 10,35,ts00
            TISHI 12,25,ts01
            call  LoadFile
            TISHI 13,45,ts02
            mov ah,01h
            int 21h
    ;------------------------------------------
            CLEARSCREAM 0,07h,0,0,24,79
            CLEARSCREAM 0,57h,2,10,23,69
            CLEARSCREAM 0,17H,3,12,22,66

            CLEARSCREAM 0,70h,4,14,22,64
            CLEARSCREAM 0,70h,4,14,11,64

            CLEARSCREAM 0,17H,12,14,14,64
            CLEARSCREAM 0,70h,13,18,13,35
            CLEARSCREAM 0,70H,13,43,13,60
            
            SETGB 0,4,14
            SETGBTYPE 0,24

            mov di,0
            mov cx,0ffffh
    AD:     mov dl,addr[di]
            cmp dl,''$''
            jz  A2

            push dx
            mov bp,di
            CALL isFullLine
            pop dx

            mov ah,02h
            int 21h
            inc di
            loop AD

    A2:     mov ah,2ch
            int 21h
            mov Stime[0],ch
            mov Stime[1],cl
            mov Stime[2],dh

            SETGB 0,15,14
            CALL TONGJI

            mov cx,0ffffh
            mov di,0h
    AS:     cmp addr[di],''$''
            jnz  ASnt00
            jmp AEND

    ASnt00: mov bp,di
            CALL isFullLine
            
            mov bp,di
            CALL clew_char
    ;==========================================
            ;READGB 0
    reinput:
            READGB 0
            mov ah,01
            int 21h
            cmp al,27
            jnz al27nt
            jmp  exit
    ;------------------------------------------
    al27nt: cmp al,0dh
            jnz al0dnt
            SETGB 0,gbattr[0],gbattr[1]
            jmp  reinput

    al0dnt: cmp al,08
            jnz ASnext

            cmp gbattr[1],14
            jnz ASnz
           ;inc gbattr[1]
            SETGB 0,gbattr[0],gbattr[1]
            jmp reinput
    ASnz:   
            mov ah,02h
            mov dl,'' ''
            int 21h
            mov ah,02h
            mov dl,08h
            int 21h

            dec di
           ;---------------
            dec Anumber
            push ax
            mov al,addrtp[di]
            cmp al,addr[di]
            jnz AS1nt
            dec Rnumber
    AS1nt:  pop  ax
            CALL TONGJI
          ;----------------


            mov bp,di
            CALL clew_char

            jmp reinput
            
    ;------------------------------------------
    ;==========================================        
    ASnext:
            inc Anumber
            CALL TONGJI

            mov addrtp[di],al
            cmp al,addr[di]
            jnz AER
            inc Rnumber
            CALL TONGJI

    A3:     inc di
            ;loop AS
            dec cx
            cmp cx,0
            jz AEND
            jmp AS

    AEND:   jmp exit

    AER:    inc Enumber
            mov temp[1],al
            BACKCHAR temp[1],074h
            jmp A3

    exit:   CLEARSCREAM 0,07,8,16,17,63
            CLEARSCREAM 0,57,10,20,15,59
            TISHI 11,24,ts3
            call UseTimeAndOut
            TISHI 12,24,ts4
            mov bx,Anumber
            call btod_out
            TISHI 13,24,ts5
            call RightRata_out
            TISHI 14,30,ts6
            mov ah,08
            int 21h

            ;CALL reset_interrupt
            mov ah,4ch
            int 21h
    ;---------------------------------------------------
    LoadFile proc near
            mov si,0
    LFROTA: mov ah,01h
            int 21h
            cmp al,0dh
            jz  LoadNext
            cmp al,08h
            jz  LFBK
            mov path[si],al
            inc si
            jmp LFROTA
            jmp LoadNext

    LFBK:   cmp si,0
            jnz lfnz
            READGB 0
            inc gbattr[1]
            SETGB 0,gbattr[0],gbattr[1]
            jmp LFROTA
    lfnz:   mov path[si],0
            dec si
            mov ah,02h
            mov dl,'' ''
            int 21h
            mov ah,02h
            mov dl,08h
            int 21h
            jmp LFROTA

    LoadNext:
            mov ah,3dh
            mov dx,seg path
            mov ds,dx
            mov dx,offset path
           
            mov al,00
            int 21h
            jc  LoadERROR

                      ;bx use to save file code
            mov bx,ax  
            mov si,0
            mov dx,seg addr
            mov ds,dx
            mov dx,offset addr
            mov cx,1
          
    LROT:   mov ah,3fh
            int 21h
            cmp addr[si],0ah
            jz LROT
            cmp addr[si],0dh
            jz LROT
            inc dx
            inc si
            cmp si,306
            jb LROT

            jmp lfret

    LoadERROR:
            TISHI 14,20,ts03
            mov ah,01h
            int 21h

            CLEARSCREAM 0,5eh,9,14,14,65
            TISHI 10,35,ts00
            TISHI 12,25,ts01

            mov si,0
            jmp LFROTA
            
    lfret:  ret
    LoadFile endp
    ;---------------------------------------------------
    RightRata_out proc near
            push ax
            push bx
            push cx
            push dx
        
            mov ax,Rnumber
            mov cx,100
            mul cx
            div Anumber
            mov bx,ax
            CALL btod_out

            push dx
            mov ah,02h
            mov dl,''.''
            int 21h
            pop dx

            mov ax,dx
            mul cx
            div Anumber
            mov bx,ax
            CALL btod_out

            mov ah,2h
            mov dl,''%''
            int 21h
                        
            pop dx
            pop cx
            pop bx
            pop ax
              ret
    RightRata_out endp
    ;---------------------------------------------------
    UseTimeAndOut proc near
            mov ah,2ch
            int 21h

            sub dh,Stime[2]
            jns  SecUnBlow
            jz  SecUnBlow
            add dh,60
            dec cl
    SecUnBlow:
            sub cl,Stime[1]
            jns MinUnBlow
            jz  SecUnBlow
            add cl,60
            dec ch
    MinUnBlow:
            sub ch,Stime[0]
            CALL OutTime
             ret
    UseTimeAndOut endp
    ;-----------------------------------------------

    OutTime proc near
                     ;ch:cl:dh
            mov al,ch
            cbw
            mov bx,ax
            CALL btod_out
            mov ah,2h
            mov dl,''-''
            int 21h
            mov al,cl
            cbw
            mov bx,ax
            CALL btod_out
            mov ah,2h
            mov dl,''-''
            int 21h
            mov al,dh
            cbw
            mov bx,ax
            CALL btod_out
            ret
    OutTime endp
    ;---------------------------------------------------
    TONGJI proc near
            push ax
            push bx
            push cx
            push dx

            mov ax,seg addr
            mov ds,ax
         
            READGB 0
            SETGB 0,13,20

            CLEARSCREAM 0,70h,13,18,13,35
            mov ah,09h
            lea dx,ts1
            int 21h

            mov ah,2ch
            int 21h
            CALL OutTime

            SETGB 0,13,45
            mov ah,09h
            lea dx,ts2
            int 21h

            mov ax,Rnumber

            mov bx,ax
            call btod_out

            mov ah,2h
            mov dl,''/''
            int 21h

            mov ax,Anumber
            mov bx,ax
            call btod_out

            SETGB 0,gbattr[0],gbattr[1]
            pop dx
            pop cx
            pop bx
            pop ax
            ret
    TONGJI endp
    ;----------------------------------------------
    btod_out  proc near   ;num store in bx
            push ax
            push cx
            push dx
            push bp

            mov ax,bx
            mov si,4
    rota1:  mov bl,10
            div bl
            mov temp[si],ah
            and ax,00ffh
            dec si
            cmp si,0
            jnz rota1

            mov bp,1
            mov si,1
    rota2:  mov dl,temp[si]
            add dl,''0''

            cmp dl,''0''
            jz  btodeal
            mov bp,0

    btrt1:  mov ah,02h
            int 21h
    btrt2:  inc si
            cmp si,4
            jna rota2
            
            cmp bp,1
            jnz RT
            mov ah,2h
            int 21h
            jmp RT

    btodeal: cmp bp,1
             jz  btrt2
             jmp btrt1
    RT:    pop bp
           pop dx
           pop cx
           pop ax       
        ret
    btod_out  endp
    ;--------------------------------------------------
    isFullLine proc near   ;bp is the parament
            push ax
            push bx
            mov ah,gbattr[0]
            mov al,gbattr[1]

            mov LineMax,51
            mov LineAct,bp
            LINEFULL LineMax,LineAct         
            mov bl,FullFlag
            cmp bl,0
            jz  isfexit
                             
            READGB 0
            add gbattr[0],1
            sub gbattr[1],51
            SETGB 0,gbattr[0],gbattr[1]
            mov FullFlag,0

    isfexit: mov gbattr[0],ah
             mov gbattr[1],al
             pop bx
             pop ax
             ret
    isFullLine endp
    ;--------------------------------------------------
    clew_char proc  near  ; bp is the parament
            push ax
            push bx
            push cx
            push dx
            push si

            READGB 0
            mov dh,gbattr[0]
            mov dl,gbattr[1]
            mov oldgba[0],dh
            mov oldgba[1],dl

            ;4/14,4/64,15/14,15/64
            mov ax,bp
            mov bl,51
            div bl

            mov dh,4
            mov dl,14
            add dh,al
            add dl,ah

            mov temp[0],dh
            mov temp[1],dl
            SETGB 0,temp[0],temp[1]
            COLORCHAR addr[bp],5Eh

            cmp bp,0
            jz  resetgb
            cmp temp[1],14
            jz clew2
            sub temp[1],1

    clew1:  mov bx,bp
            dec bx
            SETGB 0,temp[0],temp[1]
            COLORCHAR addr[bx],07dh
            jmp resetgb

    clew2:  sub temp[0],1
            add temp[1],50
            jmp clew1

    resetgb:
            SETGB 0,oldgba[0],oldgba[1]
            pop si
            pop dx
            pop cx
            pop bx
            pop ax
             ret
    clew_char endp
    ;--------------------------------------------------
    code ends
            end start

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>