汇编网首页登录博客注册
masmaster的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
文章收藏

[2010-08-04 21:59] 算法练习:打印4个不重复的10以内随机数

今天在坛子里看到有这么一道题。 拿来写一写, 练一练。
;-----------------------------------------------------

  1 ;显示4个10以内
  2 ;不重复的随机数
  3 assume  cs:code
  4 data    segment
  5 tmp     db      0,0,0,0
  6 divisor db      10
  7 data    ends
  8 code    segment
  9 start:
 10         mov ax,data
 11         mov ds,ax
 12         mov si,0
 13         mov cx,4
 14 L:
 15         in al,40h
 16         and ax,0ffh
 17         div ds:divisor
 18         add ah,30h
 19         mov [si],ah
 20         inc si
 21         loop L
 22 ;上述代码产生4个随机数
 23         mov si,offset tmp
 24         mov cx,4
 25 L1:     push cx
 26         mov bx,si
 27         inc bx
 28         mov cx,3
 29 L2:     mov al,[si]
 30         cmp al,[bx]
 31         jz L3
 32         inc bx
 33         loop L2
 34         inc si
 35         pop cx
 36         loop L1
 37         jmp disp
 38
 39 L3:     in al,40h
 40         and ax,0ffh
 41         div ds:divisor
 42         add ah,30h
 43         mov [si],ah
 44         jmp L1
 45 ;上述代码判断是否有重复,如有重复则从新获取
 46 disp:
 47         mov si,offset tmp
 48         mov cx,4
 49 D:      mov dl,[si]
 50         mov ah,2
 51         int 21h
 52         mov dl,' '
 53         mov ah,2
 54         int 21h
 55         inc si
 56         loop D
 57 ;上面代码打印结果。
 58 over:   mov ah,4ch
 59         int 21h
 60 code    ends
 61 end     start
;-----------------------------------------------------

算法或者想法,有的时候规划起来是一回事, 用代码实现的时候又是另外一回事, 要从电脑的角度去思考不要从主观臆想去思考!
这段代码难点的地方在于如果排除重复的数字, 我用了嵌套循环才得以解决。 L1为外循环,L2为内循环。这段代码严格的来说,我觉得不是很满意,先mark一下! 等以后水平提高了再去优化吧。
评论次数(0)  |  浏览次数(341)  |  类型(程序与练习) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码