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

游戏机之家论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3267|回复: 9

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

[复制链接]
发表于 2008-6-2 22:20:12 | 显示全部楼层 |阅读模式
这一段程序运行完后,A是一个什么数?其中56H,57H,58H,59H为一组随机数。, X# K' ^# U4 V( O: e0 D
     将这段程序看通了,对了解玛莉机程序的算法绝对有好处。至少我个人是这样认为的!       , }. T1 }# G) J: u$ d& ^  A
     高手请手下留情。
$ r3 j0 U& o3 {) d7 l$ V) [9 e;================================
" ^, {! i  M1 a             MOV   A,56H
6 F; N  W  t$ y9 S9 d) A$ \7 \& l              ADD   A,59H4 R" p3 o6 `1 ?3 Z  f# f; ]
              ANL   A,#07H
% E! o) p* h' c( P% A              MOV   R3,A  H0 e$ L6 F7 C) Z, i
Q11B7:        MOV   A,R3
, r, {& M2 o* @8 I  H8 b& L" PQ11B8:        MOV   A,57H
1 i4 E- d( Y2 w              XRL   A,58H
8 V3 b3 q% L4 }              ADD   A,59H
2 ?: E- J0 f2 B3 k2 Q" w( d( s1 T              MOV   B,A
9 g# q  g/ T2 b              MOV   A,R3$ ^6 ~* w5 [8 C: `3 I
              JNZ   Q11D0: c* i% }# d2 b. i( v- ]0 F0 R% n
              MOV   A,B  _+ X7 x/ O5 f, a$ {& n
              MOV   B,#06H
- S: a! J; }: ~              DIV   AB
+ R+ V. i' c( Q% X  s) t. O& N8 x              MOV   A,B( ]( s8 H3 K7 T
              RL    A0 P1 \6 [1 T' T7 R; ]
              RL    A
2 Z6 \5 w9 Z7 p5 ~              LJMP  Q11F3/ Q! @$ j4 _, z( R/ E) G  ~! t: m
;================================
/ B/ z7 p2 {4 x# p' J6 Q8 }$ ]5 NQ11D0:        CJNE  A,#07H,Q11E2
/ A2 g# b- {+ N  @/ K% m              MOV   A,B
0 j5 ~8 ?2 o( ~. C, n4 ?              MOV   B,#06H
+ H- d# ?0 i- q; ~1 S1 g              DIV   AB
# x# _" N+ w7 x4 X5 \              MOV   A,B
6 y( q* W5 A# @! _1 y              RL    A
8 L- x+ e. a0 m              RL    A) A) y1 X* B% m/ e1 ~8 J2 i9 o
              ADD   A,#02H
( H" \7 g1 o% X# V- F+ o              LJMP  Q11F3
1 h8 `* h: P0 k;================================
" n" |  ]! i. D/ b4 {! [- D9 XQ11E2:        MOV   A,B
  `8 y; Y1 ]$ c  U              ANL   A,#01H
# p* n1 R% e+ V5 r$ k+ O0 {! r# k+ p              MOV   B,#0CH
  g8 G; m- T$ z2 T9 `) U' |              MUL   AB
* m# q1 w2 L5 t/ J              MOV   B,A/ h/ a' p, {8 C, E8 N! \! x( _
              MOV   A,R3
- B  d2 W' E9 x! ~/ o. v7 d% r1 q/ H              MOV   DPTR,#11F6H
$ g2 H  `. q/ _# R              MOVC  A,@A+DPTR& S% ^# Q1 ~+ p
              ADD   A,B: t1 i/ _5 D0 l. I* d
Q11F3:        MOV   R3,A3 C! R* |' y5 a7 ~
              MOV   A,R3
: R8 e9 s3 M$ }) Y& J3 ^' C              RET! h' n, E- }. T
;================================================# T- S' \+ _: U* u$ Z5 U! x
Q11F6B  00H, 09H, 0BH, 01H, 03H, 05H, 07H, 0CH
 楼主| 发表于 2008-6-2 22:21:38 | 显示全部楼层

ID tianhonwu

我来试试,望赵老师指教
1 C/ j( A1 F4 x/ Z  V  [* L3 K% z2 z' O. v" {' Z$ m' p
     这一段程序运行完后,A是一个什么数?其中56H,57H,58H,59H为一组随机数。: {+ m# @4 O1 d! N8 B5 q
     将这段程序看通了,对了解玛莉机程序的算法绝对有好处。至少我个人是这样认为的!      
) X! ]5 {: l. F& h     高手请手下留情。
8 R! _' q4 g$ J& Z4 i4 l;================================
+ d: f2 x3 D5 S; i$ Q+ n              MOV   A,56H   ;读取第1个随机数单元的内容
% b) q% s' i; \! o. Q              ADD   A,59H   ;56H和59H中的两个随机数相加,结果放入A- Q2 E' w9 O* V/ g5 Q
              ANL   A,#07H  ;保留低三位数据 A中的数据为0~7' |0 ~/ ?9 D" Y( u( R5 @& M
              MOV   R3,A    ;A→R3  ,R3的内容为0~7 0 E* [4 i2 g, D6 Z
Q11B7:        MOV   A,R3    ;R3→A
4 f3 w2 t/ S: M3 UQ11B8:        MOV   A,57H   ;57H随机数送入A- T3 a! m$ A# U
              XRL   A,58H   ;与58H内容异或(相同为0相异为1)
8 H: B7 f' O1 q  k% S$ R$ w              ADD   A,59H   ;A+59H->A$ {  m" L; M$ F
              MOV   B,A     ;B<-A,保存于B     p& \+ M/ |; ^
              MOV   A,R3    ;R3->A4 M6 d3 o& q0 D0 U, m
              JNZ   Q11D0   ;A非零转移到11D0# v) Q+ }( h. q' R4 F. a/ |; c
              MOV   A,B     ;B→A    0 K, O& O5 g2 s& R* e3 I2 h
              MOV   B,#06H  ;#06H→B: ?/ L8 T. ?, W7 d( m% _
              DIV   AB      ;商(存于)A  余数(存于)B      ' S+ Z0 V3 B3 o
              MOV   A,B     ;余数 →A( a0 ^/ M* d4 C) L4 `9 X' L
              RL    A      
3 K# y, t! H9 s, T' A              RL    A       ;左移两次  相当于*4
) e* \$ J+ y' n5 v              LJMP  Q11F3   ;转移到11F3  产生的数据为:00H,04H,08H,0CH,10H,14H7 X- I' V! T. w- b" H9 p4 ~! N
;================================
% Z4 c* ~( u6 H6 tQ11D0:        CJNE  A,#07H,Q11E2  ;判断A中的数据也是R3中的数据是否为07H,是,顺序执行。不是转到11E2
7 v; w. H0 ]+ I1 z              MOV   A,B           ;B→A
2 X3 z) s8 z* k              MOV   B,#06H       ;置被除数为06H% l/ v" E% R+ @1 c, _$ _9 O
              DIV   AB           ;商(存于)A  余数(存于)B  这里的余数只可能是5以下! Z2 S+ ~; B7 p$ h0 a/ P
              MOV   A,B          ;余数 →A8 {( j" t' M% t' Y% j; ~$ `# ~
              RL    A
% G$ Z; R: Q) D& t! M. I7 N              RL    A           ;左移两次  相当于*43 M% }# s, `! `4 ?
              ADD   A,#02H      ;A+#02H→A  , 余数为0  A=02  余数为1则A=06H   当余数为2则A=0AH   当余数为3时,则A=OEH   当余数为4时,则A=12H   当余数为5时,则A=16H, J3 R- f3 a3 S5 z0 Y2 J9 @7 ?7 g
              LJMP  Q11F3       ;转移到11F3) o" a9 O  h5 ?( P  F. w7 p
;================================3 C, Y( l4 t7 ?8 P  f  U, g
Q11E2:        MOV   A,B         ;B→A9 J% x% E/ A4 l5 F) S: H
              ANL   A,#01H      ;保留最低位;也就是说,这里A只可能为1或0
8 a* X$ q+ P: U9 `# E9 W. B              MOV   B,#0CH      ;#0CH→B
5 D* [9 d4 y/ \# Q              MUL   AB          ;高位积(存于)B,低位积(存于)A  注:结果两种 A=0,B=0或A=#0CH,B=0" \- f( k8 D5 @+ P6 q- y
              MOV   B,A         ;低位积送入B * m0 O0 w, _0 r2 Q+ t% d
              MOV   A,R3        ;R3→A1 B% N& D% D. g
              MOV   DPTR,#11F6h  ;置表头首址  
# I. Y! x: M) H8 q5 {. p9 j: d              MOVC  A,@A+DPTR    ;查表$ m; t- y2 t+ B
              ADD   A,B          ;A+B→A  产生的数据为:00H,09H,0BH,01H,03H,05H,07H,0CH,15H,17H,0DH,0FH,11H,13H,18H
; m6 n6 ~  e# ?& _Q11F3:        MOV   R3,A    ;A→R34 x4 I0 c9 m5 `( I! C
              MOV   A,R3    ;R3→A
/ S; m) ]6 A8 B+ B' Q; h- n              RET           ;程序返回  ( s# {  B: e0 U! \: p
;================================================/ T% ^9 N* Z8 k; g& n
Q11F6B  00H, 09H, 0BH, 01H, 03H, 05H, 07H, 0CH
 楼主| 发表于 2008-6-2 22:25:22 | 显示全部楼层

ID 赵水一

TIANHONWU的解译很好说得不错,很有点功力,真的不错.在这里我将这题引伸一下说明这段程序在可能用在什么地方,有什么作用。& O- D7 k! U; u. Q  L
. @( o  f- u5 J2 x  t
    首先正如TIANHONMU指出的,这段程序运行完成后‘A’有可能是从‘0’到‘18H’,也就是从‘0’到‘24’中间的任何一个数,联想到我们目前的马莉机的面板的24个灯位朋友们就会明白,这是在出牌,这里通过随机数的计算最后出了一个灯位,也就是一张牌。可能细心的朋友会问从‘0’到‘24’一共是25位数,多一位怎么办,有办法,这个问题下面要谈到的。
. B; C9 U3 O, d5 k8 p/ q9 H7 y6 y& Z4 `; }8 E
    如果说出牌就是这样由随机数产生而不加以控制是不行的,于是就有可能加上各种控制的方法使出牌合理化.比如象上面所说的一共是24个灯位,多出一个数怎么办,好办;多这一位出来时,加一段程序使它变为出几个小分牌位的其中的一个就解决了.
# K2 f" \4 F+ A. }) f/ X) z. L
' n6 J+ i2 T9 ^2 Q   当然真正的马莉机的出牌不是这样的,这只是我一个说法,只要将这说法看明白了,去了解真正的马莉机的程序和它的出牌一定会有帮助的.
发表于 2008-6-15 01:44:52 | 显示全部楼层
没头绪,好像很多转来转去的地方都没用到。
发表于 2008-6-15 01:48:18 | 显示全部楼层
上面一大段好像只有       MOV   B,#06H  ;#06H→B
7 i; {/ A! u: }, f: c4 h" f              DIV   AB      ;商(存于)A  余数(存于)B
( R8 N+ u( s/ {这两句有用。得出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-6-21 16:05

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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