马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
16位汇编好像没有得到随机数的方法,然后我想到了个替代方法,用当前时间来模拟随机数。 
但考虑到第二次调用时随机性不够大,所以再加了个假随机数表的方式来模拟,双重随机,使得每次调用都能获得较为合理的随机数。 
效果:每调用一次就在屏幕显示一个$$,想看到效果最好是调用+延时的方式,这样可以在屏幕上不断地出现$$ 
 
   
 
代码↓↓↓ 
- rand      : jmp short sr
 
 -             seat db 0,0,0,0,0              ;第一个是列的随机数表的指向位置,四为果子x,五为果子y
 
 -             table1 db 5,2,7,1,8,0,5,9,4,3,6,7,8,1,9,2,6,0,3,4           ;x坐标的个位
 
 -                         table2 db 0ah,14h,0,14h,1dh,0ah,1dh,0ah,0,14h,0,1dh         ;x坐标的十位,0,10,20,30
 
 -                         table3 db 2,15,22,16,13,0,12,9,19,11,1,7,21,18,6,16,17,8,4,12,14,20,3,10,5,18   ;y坐标
 
 -     sr    : push ax
 
 -             push ds
 
 -                         push bx
 
 -                         push cx
 
 -                         push es
 
 -                         mov ax,cs
 
 -                         mov ds,ax            ;这是写在代码段的
 
 -                         mov al,0
 
 -                         out 70h,al           
 
 -                     in al,71h            ;获取时间秒,下面处理秒
 
 -                         mov ah,al
 
 -                         mov cl,4
 
 -                         shr ah,cl
 
 -                         and al,00001111b
 
 -                         
 
 -                         mov cl,seat[0]
 
 -                         mov bl,cl
 
 -                         add bl,al
 
 -                         cmp bl,13h
 
 -                         jna bz1
 
 -                         sub bl,14h
 
 -                 bz1:mov seat[0],bl
 
 -                         mov bh,0
 
 -                         mov bh,table1[bx]
 
  
-                     mov cl,seat[1]
 
 -                     mov bl,cl
 
 -                         add bl,ah
 
 -                         cmp bl,0bh
 
 -                         jna bz2
 
 -                     sub bl,0ch                        
 
 -                 bz2:mov seat[1],bl
 
 -                     mov cl,bh
 
 -                         mov bh,0
 
 -                     mov bh,table2[bx]
 
 -                         add bh,cl
 
 -                         
 
 -                     cmp bh,25h
 
 -                         jna bz3
 
 -                         sub bh,al
 
 -                         sub bh,ah
 
 -                         sub bh,al
 
 -                 bz3:mov seat[3],bh
 
 -                 
 
 -                     mov al,2
 
 -                         out 70h,al
 
 -                     in al,71h          ;获取时间分,下面处理分
 
 -                         and al,00001111b
 
 -                         mov cl,seat[2]
 
 -                         mov bl,cl
 
 -                         add bl,al
 
 -                         cmp bl,16h         ;判断是否超过16h
 
 -                         jna bz4
 
 -                         sub bl,17h
 
 -                 bz4:mov seat[2],bl
 
 -                         mov bh,0
 
 -                     mov bh,table3[bx]
 
 -                         mov seat[4],bh
 
 -                         
 
 -                         mov ax,0b800h                ;下面是显示$
 
 -                         mov es,ax
 
 -                         mov al,seat[4]
 
 -                         add al,1
 
 -                         mov ah,0
 
 -                         mov bl,160                   ;y坐标*160
 
 -                         mul bl
 
 -                         mov bl,seat[3]
 
 -                         mov bh,0
 
 -                         add bx,bx
 
 -                         add bx,bx
 
 -                         add ax,bx
 
 -                         add ax,4
 
 -                         mov bx,ax
 
 -                         mov al,'
 
 -                         mov ah,46h
 
 -                         mov es:[bx],al
 
 -                         mov es:[bx+1],ah
 
 -                         mov es:[bx+2],al
 
 -                         mov es:[bx+3],ah
 
 -                         pop es
 
 -                         pop cx
 
 -                         pop bx
 
 -                         pop ds
 
 -                         pop ax
 
 -                         ret
 
  复制代码 |