| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 694 人关注过本帖
标题:打字游戏汇编问题请教!
取消只看楼主 加入收藏
gy8867444
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-1-4
收藏
 问题点数:0 回复次数:1 
打字游戏汇编问题请教!
这是从咱们网站找到的,这是个打字游戏,虽然可以计时,但是不能判断打字是否正确,并且每次出的字母不是随机数。希望达人解决一下。谢谢啦

stack    segment para stack 'stack'
         db  256  dup(0)
top      label word
stack    ends
data     segment  para public 'data'
buffer   db 16h dup(0)
bufpt1   dw 0
bufpt2   dw 0
kbflag   db  0
prompt   db '   *please practise typing*',0dh,0ah,'$'
scantab  db 0,0,'1234567890-=',8,0
         db 'qwertyuiop[]',0dh,0
         db 'asdfghjkl;',0,0,0,0
         db 'zxcvbnm,./',0,0,0
         db ' ',0,0,0,0,0,0,0,0,0,0,0,0,0
         db '789-456+1230.'
even
oldcs9   dw ?
oldip9   dw ?
str1     db 'abcd efgh ijkl mnop qrst uvwx yz.'
         db 0dh,0ah,'$'
str2     db 'there are some newspapers on the table.'
         db 0dh,0ah,'$'
str3     db 'there are some clouds in the sky.'
         db 0dh,0ah,'$'
str4     db 'she always eats her lunch at noon.'
         db 0dh,0ah,'$'
str5     db 'i do not like autumn and winter.'
crlf     db 0dh,0ah,'$'
colon    db ':','$'
even
saddr    dw str1,str2,str3,str4,str5
count    dw 0
sec      dw 0
min      dw 0
hours    dw 0
save_lc  dw 2 dup(?)
data     ends
code     segment
  assume   cs:code,ds:data,es:data,ss:stack
main     proc far
start:
         mov ax,stack
         mov ss,ax
         mov sp,offset top

         push ds
         sub ax,ax
         push ax
         mov ax,data
         mov ds,ax
         mov es,ax

        ; mov ah,0
        ; mov al,4
        ; int 21h
        ; mov ah,0bh
       ;  mov bh,0
       ;  mov bl,4
       ;  int 11h
         mov ah,35h
         mov al,09h
         int 21h
         mov oldcs9,es
         mov oldip9,bx

         push ds
         mov dx,seg kbint
         mov ds,dx
         mov dx,offset kbint
         mov al,09h        
         mov ah,25h
         int 21h
         pop ds

         mov ah,35h
         mov al,1ch
         int 21h
         mov save_lc,bx
         mov save_lc+2,es

         push ds
         mov dx,seg clint
         mov ds,dx
         mov dx,offset clint
         mov al,1ch
         mov ah,25h
         int 21h
         pop ds

         in  al,21h
         and al,11111100b
         out 21h,al
   
         
first:   mov ah,0
         mov al,3
         int 10h

         mov dx,offset prompt
         mov ah,9
         int 21h

         mov si,0
next:    mov dx,saddr[si]
         mov ah,09h
         int 21h

         mov count,0
         mov sec,0
         mov min,0
         mov hours,0

         sti
forever:
         call kbget
         test kbflag,80h
         jnz  endint
         push ax
         call dispchar
         pop  ax
         cmp al,0dh
         jnz forever
         mov al,0ah
         call dispchar

         call disptime
         lea dx,crlf
         mov ah,09h
         int 21h

         add si,2
         cmp si,5*2
         jne next
         jmp first
endint:  cli
         push ds
         mov dx,save_lc
         mov ax,save_lc+2
         mov ds,ax
         mov al,1ch
         mov ah,25h
         int 21h
         pop ds

         push ds
         mov dx,oldip9
         mov ax,oldcs9
         mov ds,ax
         mov al,09h
         mov ah,25h
         int 21h
         pop ds

         sti
         ret
main     endp
clint    proc near
         push ds
         mov bx,data
         mov ds,bx

         lea bx,count
         inc word ptr[bx]
         cmp word ptr[bx],18
         jne return
         call inct
adj:
         cmp hours,12
         jle return
         sub hours,12
return:
         pop ds
         sti
         iret
clint    endp
inct     proc near
         mov word ptr[bx],0
         add bx,2
         inc word ptr[bx]
         cmp word ptr[bx],60
         jne exit
         call inct
exit:    ret
inct     endp
disptime proc near
         mov ax,min
         call bindec

         mov bx,0
         mov al,':'
         mov ah,0eh
         int 10h
         mov ax,sec
         call bindec

         mov bx,0
         mov al,':'
         mov ah,0eh
         int 10h

         mov bx,count
         mov al,55d
         mul bl
         call bindec

         ret
disptime      endp
bindec   proc near
         mov cx,100d
         call decdiv
         mov cx,10d
         call decdiv
         mov cx,1
         call decdiv
         ret
bindec   endp
decdiv   proc near
         mov dx,0
         div cx

         mov bx,0
         add al,30h
         mov ah,0eh
         int 10h

         mov ax,dx
         ret
decdiv   endp
kbget    proc near
         push bx
         cli
         mov bx,bufpt1
         cmp bx,bufpt2
         jnz kbget2
         cmp kbflag,0
         jnz kbget3
         sti
         pop bx
         jmp kbget
kbget2:
         mov al,[buffer+bx]
         inc bx
         cmp bx,16h
         jc kbget3
         mov bx,0
kbget3:
         mov bufpt1,bx
         pop bx
         ret
kbget    endp
kbint    proc near
         push bx
         push ax

         in al,60h
         push ax
         in al,61h
         or al,80h
         out 61h,al
         and al,7fh
         out 61h,al

         pop ax
         test al,80h
         jnz  kbint2
         mov bx,offset scantab
         xlat scantab
         cmp al,0
         jnz kbint4
         mov kbflag,80h
         jmp kbint2
kbint4:
         mov bx,bufpt2
         mov [buffer+bx],al
         inc bx
         cmp bx,16h
         jc kbint3
         mov bx,0
kbint3:
         cmp bx,bufpt1
         jz kbint2
         mov bufpt2,bx
kbint2:  cli
         mov al,20h
         out 20h,al
         pop ax
         pop bx
         sti
         iret
kbint    endp
dispchar proc near
         push bx
         mov bx,0
         mov ah,0eh
         int 10h
         pop bx
         ret
dispchar endp
code     ends
         end   start

搜索更多相关主题的帖子: 汇编 游戏 打字 
2010-01-04 17:29
gy8867444
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-1-4
收藏
得分:0 
有达人给这个才程序写点注释吗
2010-01-04 20:46
快速回复:打字游戏汇编问题请教!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026407 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved