游戏机之家论坛•国内人气最旺的游戏机社区,国人的游戏机家园
设为首页收藏本站

游戏机之家论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2910|回复: 9

玛莉机程序式题学习 转载自 ID 赵水一

[复制链接]
发表于 2008-6-2 22:20:12 | 显示全部楼层 |阅读模式
这一段程序运行完后,A是一个什么数?其中56H,57H,58H,59H为一组随机数。
  o3 I4 c: r5 {5 v     将这段程序看通了,对了解玛莉机程序的算法绝对有好处。至少我个人是这样认为的!      
+ i9 f; ?0 H' ~1 N3 N# L7 u, n3 M( `     高手请手下留情。
6 S9 b" Z: ]; L7 R8 V;================================
  V3 \  Y( ~- o' b) t             MOV   A,56H
- T6 r0 q6 `6 t; E% S1 {- d& M              ADD   A,59H
) |; a* |1 \* n: V              ANL   A,#07H
7 ^! _' }3 i+ P& f9 ^              MOV   R3,A
7 ]( U4 x. g6 T1 [( rQ11B7:        MOV   A,R3
# h, h" n4 f, ^. O. tQ11B8:        MOV   A,57H; Z& N# o8 M( D* ~. O
              XRL   A,58H
: S& R/ @2 Q# W' ]$ I1 t: Y' P              ADD   A,59H5 [# G+ q8 Q; w! Y6 Q
              MOV   B,A
/ L$ N2 j7 T9 m" a) ]+ L' `              MOV   A,R3
1 e$ i4 s" x  f; `7 ~( u+ V              JNZ   Q11D0
2 h3 a, W3 L( A6 o              MOV   A,B7 F9 y- R* A2 W. D5 }* p
              MOV   B,#06H% h5 f! `4 i' B" O6 Q
              DIV   AB
6 w6 X, m( M6 D2 ^" i. L              MOV   A,B
, w: E" G/ f9 S              RL    A
! j, E# l( f6 j. N$ h8 B              RL    A
% n* A% g+ J7 c) ^2 ^1 w( t              LJMP  Q11F3
* p% h6 v  U+ C2 f" j/ E;================================' R# }/ e9 v' X2 t% o6 q3 F
Q11D0:        CJNE  A,#07H,Q11E2, L# j' t/ p  u( @0 ^6 R6 i
              MOV   A,B/ j/ ~$ Q! Q' g8 H6 m
              MOV   B,#06H
; j" L4 r! N3 H# S              DIV   AB
5 {5 |9 x9 T( k' s% T              MOV   A,B
9 U: a; i! [) S+ {              RL    A
( l4 M1 e. {; X, E% b) T/ ~              RL    A
1 A* }$ t5 Y; v- q6 ~# k  l              ADD   A,#02H
9 A6 G" N4 E6 v& B: t2 }9 }; _              LJMP  Q11F3
( X; z( i/ Q4 r2 A;================================+ v+ l7 n& g9 W7 w4 x- k( x
Q11E2:        MOV   A,B2 ]* b% I8 s2 Q6 I
              ANL   A,#01H
5 O- J% B6 q1 [! g% z2 x, W              MOV   B,#0CH
$ l) N  V9 W6 D              MUL   AB+ d6 L/ O  J7 X
              MOV   B,A1 `% G& c* J6 N, K
              MOV   A,R3
2 [/ N( ?0 K6 A; `' |  [% e              MOV   DPTR,#11F6H; e* m1 w$ A1 \2 b7 U- y: w1 W
              MOVC  A,@A+DPTR
6 }8 A) A, m0 d) i. E6 G              ADD   A,B- x& a+ W7 M# b) H; t
Q11F3:        MOV   R3,A
; `. p' [0 [- [! o) P$ j' B  d              MOV   A,R3
1 k0 |: R8 X" k9 H) I. h0 k              RET) v" t# H9 l: z
;================================================, S4 E1 E( H  g
Q11F6B  00H, 09H, 0BH, 01H, 03H, 05H, 07H, 0CH
 楼主| 发表于 2008-6-2 22:21:38 | 显示全部楼层

ID tianhonwu

我来试试,望赵老师指教
; X+ e0 X# J/ d# I1 {) i! x: O$ o- A# x1 u; s& L( L4 o
     这一段程序运行完后,A是一个什么数?其中56H,57H,58H,59H为一组随机数。. |$ W6 C" o% c# O" {. k, h; x
     将这段程序看通了,对了解玛莉机程序的算法绝对有好处。至少我个人是这样认为的!      
) e& }+ B; P7 g* H  w8 o! f# |     高手请手下留情。
3 U3 `8 e" Y  E) P! N& x;================================- h  y0 o, P3 }0 D9 j$ V
              MOV   A,56H   ;读取第1个随机数单元的内容# d; j' i6 q8 c. L
              ADD   A,59H   ;56H和59H中的两个随机数相加,结果放入A
- m2 Z3 q. `1 E, {% M              ANL   A,#07H  ;保留低三位数据 A中的数据为0~7" E- y3 J/ ?% u5 v4 M3 Q
              MOV   R3,A    ;A→R3  ,R3的内容为0~7 3 L! B9 r4 r; s" B9 \
Q11B7:        MOV   A,R3    ;R3→A
) `. {% R* V* m  VQ11B8:        MOV   A,57H   ;57H随机数送入A: V" Q' c, T. O3 |( c
              XRL   A,58H   ;与58H内容异或(相同为0相异为1)
+ Q- w# l$ e/ c) q              ADD   A,59H   ;A+59H->A6 n* U$ {" g7 ]  ?5 K# S7 [
              MOV   B,A     ;B<-A,保存于B   . i; F! X# C  A' M, W# v$ [' I
              MOV   A,R3    ;R3->A. R% R) ]  m% C
              JNZ   Q11D0   ;A非零转移到11D0
: ]/ ]  W! \; ]- ~. W& S' r# \              MOV   A,B     ;B→A   
2 ^% d. z) N5 K/ ~0 Z: P              MOV   B,#06H  ;#06H→B; r& \+ |/ W$ M6 Z
              DIV   AB      ;商(存于)A  余数(存于)B      + a: W+ f+ L0 I6 L
              MOV   A,B     ;余数 →A) ]3 l) E- h7 H4 ?% `) u  u- |
              RL    A      
5 e! r% A, X) E$ D1 }: P: h              RL    A       ;左移两次  相当于*4: R: ]* f/ w+ v( b( q, Z
              LJMP  Q11F3   ;转移到11F3  产生的数据为:00H,04H,08H,0CH,10H,14H
# e/ d, w9 I- B2 [/ H- H! t;================================6 `% T% u, J, o+ T+ m( q
Q11D0:        CJNE  A,#07H,Q11E2  ;判断A中的数据也是R3中的数据是否为07H,是,顺序执行。不是转到11E29 {, ]1 a6 J0 v$ R" z/ }
              MOV   A,B           ;B→A8 w5 n: |; ]/ L
              MOV   B,#06H       ;置被除数为06H6 o& L  m1 s$ n2 ~; x
              DIV   AB           ;商(存于)A  余数(存于)B  这里的余数只可能是5以下2 J9 y8 Q/ y$ b. o4 [3 x3 D! r3 L
              MOV   A,B          ;余数 →A3 T7 R' O; W+ Y0 c
              RL    A ) M- {. P$ f7 b9 F5 v- t
              RL    A           ;左移两次  相当于*4
( J5 Z6 s! S. x% x! Q( s& h2 @              ADD   A,#02H      ;A+#02H→A  , 余数为0  A=02  余数为1则A=06H   当余数为2则A=0AH   当余数为3时,则A=OEH   当余数为4时,则A=12H   当余数为5时,则A=16H
2 ]% I4 x/ r) A# o( \* y              LJMP  Q11F3       ;转移到11F38 i$ i" i0 p8 ?( u9 w( g7 q# c; c
;================================
9 }  c7 C  t* h9 a5 m5 K  g: @; HQ11E2:        MOV   A,B         ;B→A
. v% P% ?) b- I2 z: C              ANL   A,#01H      ;保留最低位;也就是说,这里A只可能为1或03 G' n9 x4 e4 g9 O& m0 i) k
              MOV   B,#0CH      ;#0CH→B" j& W5 U4 H" g" _7 e4 a+ G
              MUL   AB          ;高位积(存于)B,低位积(存于)A  注:结果两种 A=0,B=0或A=#0CH,B=0: @# e$ Y6 Y2 E
              MOV   B,A         ;低位积送入B 4 [9 D- Q# t5 r6 R# X
              MOV   A,R3        ;R3→A
5 Z4 t$ W- U1 U9 j' z0 C- v0 X              MOV   DPTR,#11F6h  ;置表头首址  1 K; n! E3 m- r# q0 l: t( E
              MOVC  A,@A+DPTR    ;查表' M, r: X/ w% a9 ~3 r
              ADD   A,B          ;A+B→A  产生的数据为:00H,09H,0BH,01H,03H,05H,07H,0CH,15H,17H,0DH,0FH,11H,13H,18H
2 V5 P8 Z6 [" cQ11F3:        MOV   R3,A    ;A→R3- D5 K7 r* ?3 I+ T0 `& g$ e* O7 F
              MOV   A,R3    ;R3→A. u. L- t. C( A% U
              RET           ;程序返回  - W5 @4 \# i" U/ G, n
;================================================
, F1 s  x+ ]) c! \Q11F6B  00H, 09H, 0BH, 01H, 03H, 05H, 07H, 0CH
 楼主| 发表于 2008-6-2 22:25:22 | 显示全部楼层

ID 赵水一

TIANHONWU的解译很好说得不错,很有点功力,真的不错.在这里我将这题引伸一下说明这段程序在可能用在什么地方,有什么作用。
* j5 N1 ~( x) H6 y: F1 l. P# w$ ]3 R: H+ A7 M: g& t3 S5 a7 ^2 K
    首先正如TIANHONMU指出的,这段程序运行完成后‘A’有可能是从‘0’到‘18H’,也就是从‘0’到‘24’中间的任何一个数,联想到我们目前的马莉机的面板的24个灯位朋友们就会明白,这是在出牌,这里通过随机数的计算最后出了一个灯位,也就是一张牌。可能细心的朋友会问从‘0’到‘24’一共是25位数,多一位怎么办,有办法,这个问题下面要谈到的。8 y5 ?% Y) H1 `; s" c- ?; e7 n
( d+ r  ^) q. }. Y
    如果说出牌就是这样由随机数产生而不加以控制是不行的,于是就有可能加上各种控制的方法使出牌合理化.比如象上面所说的一共是24个灯位,多出一个数怎么办,好办;多这一位出来时,加一段程序使它变为出几个小分牌位的其中的一个就解决了.
( |& u1 E9 l/ a1 b
7 ]* L. A: I% D9 ]8 Q# {   当然真正的马莉机的出牌不是这样的,这只是我一个说法,只要将这说法看明白了,去了解真正的马莉机的程序和它的出牌一定会有帮助的.
发表于 2008-6-15 01:44:52 | 显示全部楼层
没头绪,好像很多转来转去的地方都没用到。
发表于 2008-6-15 01:48:18 | 显示全部楼层
上面一大段好像只有       MOV   B,#06H  ;#06H→B
3 t4 |* v. F7 e" a3 w# O7 R* y9 Z* H              DIV   AB      ;商(存于)A  余数(存于)B
$ ^* x8 z7 y  m2 L: x' t这两句有用。得出A可能的值,但其它的都作什么用?
发表于 2008-9-24 07:04:19 | 显示全部楼层
看不明白,还要好好学习
发表于 2013-1-6 21:42:31 | 显示全部楼层
这是反编译的程序段,看起来很辛苦。
发表于 2017-7-19 13:47:01 | 显示全部楼层
加我教教我
发表于 2017-8-6 03:09:23 | 显示全部楼层
也来一本      拜读一下!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|游戏机之家论坛 ( 粤ICP备13040417号 )  

GMT+8, 2017-10-18 02:40

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表