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

游戏机之家论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3030|回复: 9

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

[复制链接]
发表于 2008-6-2 22:20:12 | 显示全部楼层 |阅读模式
这一段程序运行完后,A是一个什么数?其中56H,57H,58H,59H为一组随机数。( J8 q" O8 ]6 l! O. r- @7 k1 v; _
     将这段程序看通了,对了解玛莉机程序的算法绝对有好处。至少我个人是这样认为的!      
& v: w" @6 O& o  L6 D. Y     高手请手下留情。
/ p6 [5 @/ D* e/ t;================================
, n! p- i% n( @" _3 T, n             MOV   A,56H
3 ~' y  g2 m3 s2 K              ADD   A,59H! f' T- ?7 z0 P% G2 a
              ANL   A,#07H: T$ `( A3 \7 X4 Y
              MOV   R3,A" F3 T) S6 @: r$ F  x9 ?9 G
Q11B7:        MOV   A,R3' M) ]8 m! E% d( |$ x# [4 y, Z
Q11B8:        MOV   A,57H
' x; m2 |3 Q5 C* d              XRL   A,58H
* b# g- P. a/ p              ADD   A,59H+ o4 h# n/ r9 X: H6 G* {2 I# \
              MOV   B,A6 F* |, L% s7 @" j
              MOV   A,R3- G) P3 j2 c1 M& v, k8 c
              JNZ   Q11D0- i/ m1 w; c3 q8 A
              MOV   A,B
9 y/ D8 f% f% o! l- ~              MOV   B,#06H9 K6 J$ b8 q- r
              DIV   AB+ O: o! t" u# p5 m
              MOV   A,B
2 T& Z, ^$ `% d1 Z              RL    A
. a' V* D: Q7 G$ G& _              RL    A
  S" M* e' h/ V" Y7 h$ D              LJMP  Q11F3/ ]" @+ R' R, a- f
;================================/ e3 U9 I2 o$ ^3 H% P
Q11D0:        CJNE  A,#07H,Q11E2
4 N3 r+ W$ J/ {( G# c* M              MOV   A,B0 |- c; C8 v3 c4 I
              MOV   B,#06H3 @/ v, n1 \0 `8 z- _! q
              DIV   AB
5 C, V$ e# _4 _3 Y% s              MOV   A,B& q  k6 D8 ^0 C4 e& J* y; m# J, f
              RL    A
2 E% p' A/ |+ }1 V6 a* ]! K9 [* {              RL    A
7 q, z! X) c# t3 s' m9 N% p              ADD   A,#02H
+ E( h5 \1 N# ~              LJMP  Q11F3
3 W/ ]' d4 J: f;================================: t/ d: M$ i: o& a$ p
Q11E2:        MOV   A,B! F- C5 A5 M% S
              ANL   A,#01H* u& {" r3 |8 l  k! @" s) H
              MOV   B,#0CH
- b/ H; h% q8 f: w. v              MUL   AB* I1 E8 P4 X. H6 i4 a; p
              MOV   B,A
) g( n5 x5 I8 x" A              MOV   A,R3: \2 \+ K$ |& z7 M; Y
              MOV   DPTR,#11F6H
- i7 O5 b' [* H+ Q. g% r  E* \; M              MOVC  A,@A+DPTR
8 B) a5 Y1 I. G: Z% v              ADD   A,B
9 a& O* I) \  jQ11F3:        MOV   R3,A, S1 B9 ?" K/ T0 U1 r( o" ^6 Y
              MOV   A,R39 x/ f6 O) W5 k* k7 N: ^4 e
              RET
) m# J3 |) [. i* D;================================================; {" Z+ x4 O8 @+ n
Q11F6B  00H, 09H, 0BH, 01H, 03H, 05H, 07H, 0CH
 楼主| 发表于 2008-6-2 22:21:38 | 显示全部楼层

ID tianhonwu

我来试试,望赵老师指教# F( x7 Q, x# _3 z4 T

1 I; ]/ J4 {- s) h5 p6 h3 @2 w     这一段程序运行完后,A是一个什么数?其中56H,57H,58H,59H为一组随机数。2 I" |3 l1 `) p1 u
     将这段程序看通了,对了解玛莉机程序的算法绝对有好处。至少我个人是这样认为的!       4 ]8 L; l# B8 Q
     高手请手下留情。; T, A/ X% H; {8 @# y1 Y$ W
;================================
; B$ m& W; a% B! y- P              MOV   A,56H   ;读取第1个随机数单元的内容
7 Y; M& X% Z* k, R: l. `! x& J              ADD   A,59H   ;56H和59H中的两个随机数相加,结果放入A
6 Q' c  Q. ]: u8 ~5 u0 n' N              ANL   A,#07H  ;保留低三位数据 A中的数据为0~7( a, H' _! ]3 U& C! r* n8 L% c
              MOV   R3,A    ;A→R3  ,R3的内容为0~7
! Y  J2 V+ ~4 m! AQ11B7:        MOV   A,R3    ;R3→A
9 s6 l4 F9 ^. P+ P1 o3 XQ11B8:        MOV   A,57H   ;57H随机数送入A
2 p+ e1 L: W, S) w. ]. k2 L              XRL   A,58H   ;与58H内容异或(相同为0相异为1); F" l8 r+ M% A; Y  G% |. d
              ADD   A,59H   ;A+59H->A; H( `' W* q" X' k* Z
              MOV   B,A     ;B<-A,保存于B   8 q" {; X6 |( v; O  t8 o
              MOV   A,R3    ;R3->A! h2 u5 b" m) x( {' Z5 ?' C
              JNZ   Q11D0   ;A非零转移到11D0
8 [& X. e2 p$ e  J0 D              MOV   A,B     ;B→A    9 H$ D. g/ T; A' s. Q
              MOV   B,#06H  ;#06H→B/ j: K5 a' E; p1 ?
              DIV   AB      ;商(存于)A  余数(存于)B      $ d( X* T1 p3 i: R3 q- L
              MOV   A,B     ;余数 →A
/ s' i7 d4 V* q' k( x$ z$ a              RL    A      $ D# A1 g5 _; J+ `# k" Y
              RL    A       ;左移两次  相当于*48 s* C# V0 m! n% Q1 r4 I3 P
              LJMP  Q11F3   ;转移到11F3  产生的数据为:00H,04H,08H,0CH,10H,14H; n; ?6 d2 Y  K3 Q4 X( S
;================================
0 B: O. P* a6 w' W! l' o" bQ11D0:        CJNE  A,#07H,Q11E2  ;判断A中的数据也是R3中的数据是否为07H,是,顺序执行。不是转到11E2
4 D6 l0 D  f* A              MOV   A,B           ;B→A" x" b  S* g1 t) a" L4 ^5 R
              MOV   B,#06H       ;置被除数为06H
9 s# r$ F/ ]$ R5 G              DIV   AB           ;商(存于)A  余数(存于)B  这里的余数只可能是5以下
' ^- b: ~$ v% Z2 T$ ^  `              MOV   A,B          ;余数 →A& v' i: n. `- n$ C9 [
              RL    A
4 J' v/ [2 r5 s  K) T              RL    A           ;左移两次  相当于*4+ V2 A4 j  M) B$ u1 K
              ADD   A,#02H      ;A+#02H→A  , 余数为0  A=02  余数为1则A=06H   当余数为2则A=0AH   当余数为3时,则A=OEH   当余数为4时,则A=12H   当余数为5时,则A=16H
$ B$ F3 Y  N8 j0 z6 \5 |: z' f' Y              LJMP  Q11F3       ;转移到11F3/ v# E; O9 y0 D. G' U9 Y6 r. L" U
;================================
* a) n8 m" w% k7 C+ O. \Q11E2:        MOV   A,B         ;B→A
+ m; A0 z. d) ^0 H              ANL   A,#01H      ;保留最低位;也就是说,这里A只可能为1或09 J. [3 K" m/ ]( x" n
              MOV   B,#0CH      ;#0CH→B
: r; r# ]5 a- y, E3 H8 B0 W" X              MUL   AB          ;高位积(存于)B,低位积(存于)A  注:结果两种 A=0,B=0或A=#0CH,B=0
# g% ^0 V1 D/ ]' L! f/ t              MOV   B,A         ;低位积送入B
9 `+ ]+ H6 c2 ?% `5 A* H8 K              MOV   A,R3        ;R3→A
& u. B8 I) q4 p, q; k4 Q. F. t              MOV   DPTR,#11F6h  ;置表头首址  ! N) W0 a( L1 q2 t8 q
              MOVC  A,@A+DPTR    ;查表
1 e$ i; Y) i, w              ADD   A,B          ;A+B→A  产生的数据为:00H,09H,0BH,01H,03H,05H,07H,0CH,15H,17H,0DH,0FH,11H,13H,18H0 A/ L( ~2 \) Y( k% E  V
Q11F3:        MOV   R3,A    ;A→R3
' B! K( S( ^, O# {( ]              MOV   A,R3    ;R3→A
# E# y9 L" t6 A6 p" k* k              RET           ;程序返回  
# X3 W: s/ K. H; ~! M; K;================================================
  u( K" z" x7 ]: u9 z0 M4 w7 WQ11F6B  00H, 09H, 0BH, 01H, 03H, 05H, 07H, 0CH
 楼主| 发表于 2008-6-2 22:25:22 | 显示全部楼层

ID 赵水一

TIANHONWU的解译很好说得不错,很有点功力,真的不错.在这里我将这题引伸一下说明这段程序在可能用在什么地方,有什么作用。
; F% r7 @" W/ D: g. V, p- a
9 o$ J. W! W: H$ n6 @% m: \    首先正如TIANHONMU指出的,这段程序运行完成后‘A’有可能是从‘0’到‘18H’,也就是从‘0’到‘24’中间的任何一个数,联想到我们目前的马莉机的面板的24个灯位朋友们就会明白,这是在出牌,这里通过随机数的计算最后出了一个灯位,也就是一张牌。可能细心的朋友会问从‘0’到‘24’一共是25位数,多一位怎么办,有办法,这个问题下面要谈到的。
6 b" u( G7 A& P5 h( r. F# m
) _5 y9 s7 b; l4 x    如果说出牌就是这样由随机数产生而不加以控制是不行的,于是就有可能加上各种控制的方法使出牌合理化.比如象上面所说的一共是24个灯位,多出一个数怎么办,好办;多这一位出来时,加一段程序使它变为出几个小分牌位的其中的一个就解决了.6 ?( e$ X& |/ S

# _7 V1 c. y3 M6 H* `8 L   当然真正的马莉机的出牌不是这样的,这只是我一个说法,只要将这说法看明白了,去了解真正的马莉机的程序和它的出牌一定会有帮助的.
发表于 2008-6-15 01:44:52 | 显示全部楼层
没头绪,好像很多转来转去的地方都没用到。
发表于 2008-6-15 01:48:18 | 显示全部楼层
上面一大段好像只有       MOV   B,#06H  ;#06H→B3 S7 U* `) \( I2 `' C8 ?
              DIV   AB      ;商(存于)A  余数(存于)B ( x4 Q: ~6 a, I: ]) Y8 g& o
这两句有用。得出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 | 显示全部楼层
也来一本      拜读一下!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|游戏机之家论坛 ( 粤ICP备13040417号 )  点击这里和我联系

GMT+8, 2018-2-19 23:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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