| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 800 人关注过本帖
标题:怎样判断当前系统时间的百分秒的奇偶性?
只看楼主 加入收藏
star5578
Rank: 2
等 级:论坛游民
帖 子:39
专家分:11
注 册:2010-7-31
结帖率:25%
收藏
已结贴  问题点数:20 回复次数:3 
怎样判断当前系统时间的百分秒的奇偶性?
程序代码:
data segment
     CC db '+'
     ww db '-'
     GG db '='
     II db 0DH,0AH,'$'
     AA db 5 DUP(?)
     www dw 0
     ghh db '0',0dh,0ah,'$'
     bnm dw 0
data ends

stack segment
    db  200  dup(0)
stack ends

code segment
    assume cs:code,ds:data,ss:stack

start: mov ax,data
       mov ds,ax
     
       call RAND            ;产生一随机数
       call MCAT            ;将随机数转换为16进制表示的ASCII码字符
       mov  ax,bx
       push ax
       cmp  www,0           ;WWW=0?
       je  A1               ;执行'+'
       cmp  www,1           ;www=1?
       je  A2               ;执行'-'
  A1:  mov dl,CC            ;显示'+'
       mov ah,2
       int 21H
       call RAND1            ;产生另一随机数         
       call MCAT            ;将随机数转换为16进制表示的ASCII码字符
       mov dl,GG            ;显示'='
       mov ah,2
       int 21H
       pop ax
       add ax,bx
       cmp ax,0
       jne B1
       lea dx,ghh
       mov ah,9
       int 21h
       jmp QQ
  

   A2: mov dl,WW             ;显示'-'
       mov ah,2
       int 21H
       call RAND1
       call MCAT
       mov dl,GG
       mov ah,2
       int 21H
       pop AX
       Sbb AX,BX
       cmp ax,0
       jne  B1
       lea dx,ghh
       mov ah,9
       int 21h
       jmp QQ   

   B1: mov  bx,ax
       call MCAT
       lea  dx,II
       mov  ah,9
       int  21H
   QQ: mov  ah,4CH
       int  21H

MCAT proc                 ;将随机数转换为16进制表示的ASCII码字符子程序
     push aX
     push bx
     push cX
     push dX
     cmp bX,9
     ja s1                ;BX大于9跳转到S1
     push aX
     push bX
     push cX
     push dX
     mov ax,bx
     mov bl,5
     div bl
     cmp ah,3
     jae vb1              ;大于等于3,跳转vb1
     mov www,1
     jmp vn1              ;无条件跳转 vn1
 vb1:mov www,0

 vn1:pop dx
     pop cx
     pop bx
     pop ax
     ADD bl,30H
     mov AA,bl
     mov AA+1,'$'
     lea dx,AA           ;取AA的偏移地址放在DX中
     mov ah,9            ;输出一个字符串
     int 21H
     jmp s3
  s1:mov cl,4
     mov al,0
     push bx              ;余数进栈
     shl bx,cl            ;逻辑左移4位
     cmp bh,9             ;如果BH小于等于9,跳转到V1
     jbe V1
     sub bh,9
     add bh,40H
     jmp QQ1             ;无条件跳转到MM1
  V1:add bh,30H
  ;是算加法还是算减法?
 QQ1:mov AA,bh
     pop bx
     and bl,0FH          ;清BL的高四位
     push ax
     push bx
     push cx
     push dx
     mov ax,bx
     mov bl,5
     div bl                ;AH存余数,AL存商
     cmp ah,3
     jae vb2               
     mov www,1             ;减法
     jmp vn2

 vb2:mov www,0             ; 加法
 vn2:pop dx
     pop cx
     pop bx
     pop ax
     cmp bl,9
     jbe TT1
     sub bl,9
     add bl,40H
     jmp RR1
TT1: add bl,30H
RR1: mov AA+1,bl
     mov AA+2,'$'
     lea dx,AA
     mov ah,9
     int 21H
  s3:pop dx
     pop cx
     pop bx
     pop ax
     ret
MCAT  endp
;一个随机数通过DX除以101,得到0~100之间的一个余数,将得到的余数作为随机数。
;随机数存在BX中
RAND  proc           
      push dx              ;保护现场,之后用到寄存器DX,AX
      push ax
      sti                  ;允许外部中断
      mov ah,0             ;读时钟计数器值
      int 1AH
      mov ax,dx            ;清高6位
      and ah,3
      mov dl,101           ;除101,产生0~100余数
      div dl               ;AL存商,AH存余数,
      mov bl,ah            ;余数存BL,作随机数
      pop ax               ;恢复现场
      pop dx
      ret
RAND  endp
;一个随机数通过CX除以101,得到0~100之间的一个余数,将得到的余数作为随机数。
;随机数存在BL中
RAND1 proc
      push cx                   ;保护现场,之后用到CX,DX,AX
      push dx
      push ax
      sti                         ;允许外部中断
      mov ah,0                    ;读时钟计数器值
      int 1AH
      mov ax,cx                   ;清高6位
      and ah,3
      mov dl,101                  ;除101,产生0~100之间的余数
      div dl                      ;AL存商,AH存余数
      mov bl,ah                   ;余数存在BL,作随机数
      pop ax                      ;恢复现场
      pop dx
      pop cx
      ret
RAND1  endp

code ends
      end start
两点不明白:1)产生随机数时,清高六位是做什么用的?
             2)怎样判断当前系统时间的百分秒的奇偶性?这里好像是用余数除以5再取余数,与3比较,这样就能判断了吗?
搜索更多相关主题的帖子: 时间 color 奇偶性 
2011-01-01 21:56
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:20 
1、16位数最大为65535如果直接除以101等于648,而ax除以一个数(8位)商是存于al中的,al却只能存256,648会溢出(出错),高6位清0,最大值为1024,除以101,等于10,能存下
2、这个不是用来判断奇偶的吧
2011-01-02 19:30
star5578
Rank: 2
等 级:论坛游民
帖 子:39
专家分:11
注 册:2010-7-31
收藏
得分:0 
回复 2楼 xiaomarn
哦,谢谢第一个问题明白了,第二个问题,两个随机数运算时算加法还是算减法是通过什么决定的呢?没明白
2011-01-03 13:52
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
可以读端口42H取得随机数,比如:in al,42H,个人觉得,这样要简单的多。

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-02-15 23:41
快速回复:怎样判断当前系统时间的百分秒的奇偶性?
数据加载中...
 
   



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

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