PK 使人进步:HotISP V2.80A传说中的disasm51超级反汇编结语

[复制链接]
26907|118
john_light 发表于 2011-10-26 19:04 | 显示全部楼层
批量最后每次固定2或3字节的地址搜索,绝对是散转即指针
hotpower 发表于 2011-10-26 18:04

只能说是疑似,它和相关的代码有关,有可能是(1)两字节的直接地址,也可能是(2)两字节的SJMP/AJMP,也有可能是(3)两字节的相对地址,也可能是(4)两字节的直接地址+一字节的散转条件,也可能是(5)三字节的LJMP。
 楼主| hotpower 发表于 2011-10-26 19:32 | 显示全部楼层
俺特殊的编码都可以算出来的。
 楼主| hotpower 发表于 2011-10-26 22:48 | 显示全部楼层
不是太好!
反例程里面那几个程序还可以
反我自己的程序出现数据段太多!很多本是程序段的也反成了数据区
有2/3都是数据区,只有1/3是程序
xxdcq 发表于 2011-10-21 10:22


哈哈~~~要批量的~~~

特别注意自动产生的*.def,它非常珍贵~~~


  1. $0003 EXTI0
  2. $0188
  3. $048A
  4. -0006 $000A
  5. $000B TIMER0
  6. $0191
  7. $0474
  8. $048B
  9. $04A7
  10. -0644 $0EFC
  11. $0EFD
  12. -000E $0012
  13. $0013 EXTI1
  14. $01B9
  15. $0477
  16. $048E
  17. $04A8
  18. @0F00 DataBuff
  19. -0014 $001A
  20. $001B TIMER1
  21. $0361
  22. $0478
  23. $048F
  24. $04A9
  25. -001C $0022
  26. $0023 SINT
  27. $0362
  28. $047B
  29. $0495
  30. $04AA
  31. $1FFD
  32. -0026 $00FF
  33. $047C
  34. $0498
  35. $04AB
  36. $047D
  37. $0499
  38. $04B4
  39. $047E
  40. $049C
  41. $04B5
  42. $047F
  43. $04B6
  44. $0480
  45. $04B7
  46. $0481
  47. $04B8
  48. $04C1
  49. $04C2
  50. $04C3
  51. $04C4
  52. $04C5
  53. $04CE
  54. $04CF
  55. $04D0
  56. $04D1
  57. $04D2

 楼主| hotpower 发表于 2011-10-26 22:51 | 显示全部楼层
新算法自动搜索了真正使用过的中断~~~而非人工指定。


  1. ;Disasm51 Version 5.10 Copyright (c) 2011,2018 HotPower@126.com
  2. ;Binfile_name:[D:\hotispcode\disasm51\bin2a51\gdb1036.bin]
  3. ;Binfile_size:[0...1FFFH]
  4. ;Compile_size:[0...1FFEH]
  5. $NOMOD51
  6. $INCLUDE(d:\Keil\C51\ASM\REG52.INC)

  7. ORG 0000H
  8. RESET: LJMP L0100
  9. EXTI0: LJMP L03C0
  10. ORG 000BH
  11. TIMER0: LJMP L036E
  12. ORG 0013H
  13. EXTI1: RETI
  14. ORG 001BH
  15. TIMER1: RETI
  16. ORG 0023H
  17. SINT: LJMP L01B9
  18. ORG 0100H
  19. L0100: CLR EA
  20. MOV SP,#028H
  21. CLR 000H
  22. LCALL S011B
  23. LCALL S0183
  24. LCALL S0487
  25. SETB 000H
  26. L0112: MOV 0A6H,#01EH
  27. MOV 0A6H,#0E1H
  28. LJMP L0112
  29. S011B: MOV TMOD,#021H
  30. MOV TH1,#0FFH
  31. MOV TL1,#0FFH
  32. MOV TH0,#0B8H
  33. MOV TL0,#000H
  34. MOV SCON,#050H
  35. MOV PCON,#080H
  36. MOV IP,#003H
  37. SETB IT0
  38. SETB EX0
  39. SETB ET0
  40. CLR EX1
  41. CLR ET1
  42. SETB ES
  43. CLR IE0
  44. CLR TF0
  45. CLR IE1
  46. CLR TF1
  47. CLR TI
  48. CLR RI
  49. SETB RXD
  50. SETB TXD
  51. SETB P1.2
  52. SETB T2EX
  53. SETB T2
  54. SETB P1.3
  55. SETB P1.4
  56. SETB INT1
  57. SETB WR
  58. SETB RD
  59. CLR RS0
  60. CLR RS1
  61. CLR 002H
  62. CLR 003H
  63. SETB 004H
  64. MOV 059H,#032H
  65. MOV 05AH,#005H
  66. MOV 05BH,#001H
  67. SETB 005H
  68. MOV 05DH,#000H
  69. MOV 05EH,#000H
  70. MOV 05FH,#000H
  71. MOV 047H,#000H
  72. SETB EA
  73. RET
  74. S0183: SETB TR0
  75. SETB TR1
  76. RET
  77. L0188: MOV R6,#025H
  78. L018A: MOV R7,#0FAH
  79. L018C: DJNZ R7,$
  80. DJNZ R6,L018A
  81. RET
  82. S0191: MOV R0,#062H
  83. L0193: LCALL S01A0
  84. JB 001H,L019F
  85. MOV @R0,SBUF
  86. INC R0
  87. DJNZ 053H,L0193
  88. L019F: RET
  89. S01A0: MOV 040H,#005H
  90. L01A3: MOV 041H,#064H
  91. L01A6: JNB RI,L01B0
  92. CLR RI
  93. CLR 001H
  94. LJMP L01B8
  95. L01B0: DJNZ 041H,L01A6
  96. DJNZ 040H,L01A3
  97. SETB 001H
  98. L01B8: RET
  99. L01B9: PUSH ACC
  100. PUSH B
  101. PUSH PSW
  102. SETB RS0
  103. SETB RS1
  104. CLR RI
  105. MOV A,SBUF
  106. MOV B,A
  107. MOV 061H,A
  108. MOV 053H,#003H
  109. LCALL S0191
  110. JB 001H,L01EA
  111. MOV R0,#061H
  112. INC R0
  113. MOV A,@R0
  114. ADD A,B
  115. MOV B,A
  116. INC R0
  117. MOV A,@R0
  118. ADD A,B
  119. MOV B,A
  120. INC R0
  121. MOV A,@R0
  122. CJNE A,B,L01EA
  123. LJMP L01F5
  124. L01EA: CLR RI
  125. CLR TI
  126. POP PSW
  127. POP B
  128. POP ACC
  129. RETI
  130. L01F5: MOV A,061H
  131. CJNE A,#010H,L01FD
  132. LJMP L0200
  133. L01FD: LJMP L0289
  134. L0200: MOV 052H,#0FFH
  135. MOV SBUF,#0FFH
  136. LCALL S0423
  137. MOV A,052H
  138. ADD A,#010H
  139. MOV 052H,A
  140. MOV SBUF,#010H
  141. LCALL S0423
  142. MOV 065H,#055H
  143. MOV A,065H
  144. CJNE A,#055H,L0228
  145. MOV 065H,#0AAH
  146. MOV A,065H
  147. CJNE A,#0AAH,L0228
  148. LJMP L024F
  149. L0228: MOV A,052H
  150. ADD A,#021H
  151. MOV 052H,A
  152. MOV SBUF,#021H
  153. LCALL S0423
  154. MOV A,052H
  155. ADD A,#000H
  156. MOV 052H,A
  157. MOV SBUF,#000H
  158. LCALL S0423
  159. MOV A,052H
  160. ADD A,#07FH
  161. MOV 052H,A
  162. MOV SBUF,#07FH
  163. LCALL S0423
  164. LJMP L0273
  165. L024F: MOV A,052H
  166. ADD A,#020H
  167. MOV 052H,A
  168. MOV SBUF,#020H
  169. LCALL S0423
  170. MOV A,052H
  171. ADD A,#000H
  172. MOV 052H,A
  173. MOV SBUF,#000H
  174. LCALL S0423
  175. MOV A,052H
  176. ADD A,#000H
  177. MOV 052H,A
  178. MOV SBUF,#000H
  179. LCALL S0423
  180. L0273: MOV A,052H
  181. ADD A,#0F0H
  182. MOV 052H,A
  183. MOV SBUF,#0F0H
  184. LCALL S0423
  185. MOV A,052H
  186. MOV SBUF,A
  187. LCALL S0423
  188. LJMP L0363
  189. L0289: CJNE A,#016H,L02CF
  190. MOV 052H,#0FFH
  191. MOV SBUF,#0FFH
  192. LCALL S0423
  193. MOV A,052H
  194. ADD A,#016H
  195. MOV 052H,A
  196. MOV SBUF,#016H
  197. LCALL S0423
  198. MOV A,052H
  199. ADD A,#020H
  200. MOV 052H,A
  201. MOV SBUF,#020H
  202. LCALL S0423
  203. MOV A,052H
  204. ADD A,#000H
  205. MOV 052H,A
  206. MOV SBUF,#000H
  207. LCALL S0423
  208. MOV A,052H
  209. ADD A,#0F0H
  210. MOV 052H,A
  211. MOV SBUF,#0F0H
  212. LCALL S0423
  213. MOV A,052H
  214. MOV SBUF,A
  215. LCALL S0423
  216. LJMP L0363
  217. L02CF: CJNE A,#017H,L0312
  218. MOV 052H,#0FFH
  219. MOV SBUF,#0FFH
  220. LCALL S0423
  221. MOV A,052H
  222. ADD A,#017H
  223. MOV 052H,A
  224. MOV SBUF,#017H
  225. LCALL S0423
  226. MOV DPTR,#DataBuff
  227. MOV 053H,#00EH
  228. L02ED: CLR A
  229. MOVC A,@A+DPTR
  230. MOV SBUF,A
  231. ADD A,052H
  232. MOV 052H,A
  233. LCALL S0423
  234. INC DPTR
  235. DJNZ 053H,L02ED
  236. MOV A,052H
  237. ADD A,#0F0H
  238. MOV 052H,A
  239. MOV SBUF,#0F0H
  240. LCALL S0423
  241. MOV A,052H
  242. MOV SBUF,A
  243. LCALL S0423
  244. LJMP L0363
  245. L0312: CJNE A,#012H,L0360
  246. MOV A,062H
  247. MOV 060H,A
  248. MOV A,063H
  249. MOV 05FH,A
  250. MOV 052H,#0FFH
  251. MOV SBUF,#0FFH
  252. LCALL S0423
  253. MOV A,052H
  254. ADD A,#012H
  255. MOV 052H,A
  256. MOV SBUF,#012H
  257. LCALL S0423
  258. MOV A,052H
  259. ADD A,#020H
  260. MOV 052H,A
  261. MOV SBUF,#020H
  262. LCALL S0423
  263. MOV A,052H
  264. ADD A,#000H
  265. MOV 052H,A
  266. MOV SBUF,#000H
  267. LCALL S0423
  268. MOV A,052H
  269. ADD A,#0F0H
  270. MOV 052H,A
  271. MOV SBUF,#0F0H
  272. LCALL S0423
  273. MOV A,052H
  274. MOV SBUF,A
  275. LCALL S0423
  276. LJMP L0363
  277. L0360: NOP
  278. L0361: NOP
  279. L0362: NOP
  280. L0363: CLR RI
  281. CLR TI
  282. POP PSW
  283. POP B
  284. POP ACC
  285. RETI
  286. L036E: PUSH ACC
  287. PUSH B
  288. PUSH PSW
  289. CLR RS0
  290. SETB RS1
  291. JNB 000H,L03B1
  292. DJNZ 059H,L03A2
  293. MOV 059H,#032H
  294. JB INT1,L0391
  295. SETB T0
  296. CLR EX0
  297. CLR ES
  298. CPL T1
  299. SETB 005H
  300. LJMP L03A2
  301. L0391: CLR TI
  302. CLR RI
  303. SETB EX0
  304. SETB ES
  305. JNB 005H,L03A2
  306. CLR T0
  307. SETB T1
  308. CLR 005H
  309. L03A2: DJNZ 05AH,L03B1
  310. MOV 05AH,#005H
  311. CLR 002H
  312. CLR 003H
  313. SETB 004H
  314. MOV 047H,#000H
  315. L03B1: MOV TH0,#0B8H
  316. MOV TL0,#000H
  317. CLR TF0
  318. POP PSW
  319. POP B
  320. POP ACC
  321. RETI
  322. L03C0: PUSH ACC
  323. PUSH B
  324. PUSH PSW
  325. SETB RS0
  326. CLR RS1
  327. JNB 000H,L041A
  328. MOV 05AH,#005H
  329. CLR T1
  330. LCALL S0473
  331. MOV A,05CH
  332. CJNE A,060H,L03DD
  333. LJMP L03DF
  334. L03DD: JC L03EF
  335. L03DF: JNB 004H,L03E9
  336. SETB 002H
  337. CLR 004H
  338. MOV 047H,#004H
  339. L03E9: MOV 05BH,#001H
  340. LJMP L03FA
  341. L03EF: JB 004H,L03FA
  342. JB 002H,L03FA
  343. DJNZ 05BH,L03FA
  344. SETB 003H
  345. L03FA: LCALL S04A4
  346. MOV A,047H
  347. CJNE A,#008H,L0405
  348. LJMP L040C
  349. L0405: INC 047H
  350. MOV A,047H
  351. CJNE A,#008H,L0415
  352. L040C: LCALL S0522
  353. LCALL S05A7
  354. LCALL S0442
  355. L0415: LCALL S0593
  356. SETB T1
  357. L041A: CLR IE0
  358. POP PSW
  359. POP B
  360. POP ACC
  361. RETI
  362. S0423: MOV 040H,#0C8H
  363. L0426: MOV 041H,#0C8H
  364. L0429: JNB TI,L0433
  365. CLR TI
  366. CLR 001H
  367. LJMP L0441
  368. L0433: MOV 0A6H,#01EH
  369. MOV 0A6H,#0E1H
  370. DJNZ 041H,L0429
  371. DJNZ 040H,L0426
  372. SETB 001H
  373. L0441: RET
  374. S0442: CLR ES
  375. MOV 048H,#0FFH
  376. MOV 051H,#0F0H
  377. MOV 053H,#001H
  378. L044D: MOV 052H,#000H
  379. MOV 054H,#00BH
  380. MOV R0,#048H
  381. L0455: MOV SBUF,@R0
  382. LCALL S0423
  383. DJNZ 054H,L0460
  384. LJMP L0469
  385. L0460: MOV A,@R0
  386. ADD A,052H
  387. MOV 052H,A
  388. INC R0
  389. LJMP L0455
  390. L0469: DJNZ 053H,L044D
  391. CLR TI
  392. CLR RI
  393. SETB ES
  394. RET
  395. S0473: NOP
  396. L0474: SETB T2EX
  397. NOP
  398. L0477: NOP
  399. L0478: CLR T2EX
  400. NOP
  401. L047B: NOP
  402. L047C: NOP
  403. L047D: NOP
  404. L047E: NOP
  405. L047F: NOP
  406. L0480: NOP
  407. L0481: SETB P1.2
  408. MOV R7,#014H
  409. L0485: DJNZ R7,$
  410. S0487: CLR T2EX
  411. NOP
  412. L048A: NOP
  413. L048B: CLR P1.2
  414. NOP
  415. L048E: NOP
  416. L048F: MOV R3,#007H
  417. L0491: MOV C,T2
  418. RLC A
  419. NOP
  420. L0495: SETB T2EX
  421. NOP
  422. L0498: NOP
  423. L0499: CLR T2EX
  424. NOP
  425. L049C: DJNZ R3,L0491
  426. MOV C,T2
  427. RLC A
  428. MOV 05CH,A
  429. RET
  430. S04A4: CLR WR
  431. NOP
  432. L04A7: NOP
  433. L04A8: NOP
  434. L04A9: NOP
  435. L04AA: NOP
  436. L04AB: MOV A,P0
  437. ANL A,#03FH
  438. MOV 046H,A
  439. CLR RD
  440. NOP
  441. L04B4: NOP
  442. L04B5: NOP
  443. L04B6: NOP
  444. L04B7: NOP
  445. L04B8: MOV A,P0
  446. ANL A,#03FH
  447. MOV 045H,A
  448. SETB WR
  449. NOP
  450. L04C1: NOP
  451. L04C2: NOP
  452. L04C3: NOP
  453. L04C4: NOP
  454. L04C5: MOV A,P0
  455. ANL A,#03FH
  456. MOV 043H,A
  457. SETB RD
  458. NOP
  459. L04CE: NOP
  460. L04CF: NOP
  461. L04D0: NOP
  462. L04D1: NOP
  463. L04D2: MOV A,P0
  464. ANL A,#03FH
  465. RLC A
  466. RLC A
  467. MOV 044H,A
  468. MOV A,043H
  469. RRC A
  470. MOV 043H,A
  471. MOV A,044H
  472. RRC A
  473. MOV 044H,A
  474. MOV A,043H
  475. RRC A
  476. MOV 043H,A
  477. MOV A,044H
  478. RRC A
  479. MOV 044H,A
  480. MOV A,043H
  481. ANL A,#00FH
  482. MOV 043H,A
  483. MOV A,046H
  484. RLC A
  485. RLC A
  486. MOV 046H,A
  487. MOV A,045H
  488. RRC A
  489. MOV 045H,A
  490. MOV A,046H
  491. RRC A
  492. MOV 046H,A
  493. MOV A,045H
  494. RRC A
  495. MOV 045H,A
  496. MOV A,046H
  497. RRC A
  498. MOV 046H,A
  499. MOV A,045H
  500. ANL A,#00FH
  501. MOV 045H,A
  502. MOV R0,#080H
  503. MOV @R0,043H
  504. INC R0
  505. MOV @R0,044H
  506. INC R0
  507. MOV @R0,045H
  508. INC R0
  509. MOV @R0,046H
  510. RET
  511. S0522: MOV A,#080H
  512. ADD A,#005H
  513. MOV R0,A
  514. MOV A,#080H
  515. ADD A,#007H
  516. MOV R1,A
  517. MOV 054H,#007H
  518. L052F: MOV A,044H
  519. ADD A,@R0
  520. MOV 044H,A
  521. DEC R0
  522. MOV A,043H
  523. ADDC A,@R0
  524. MOV 043H,A
  525. MOV A,046H
  526. ADD A,@R1
  527. MOV 046H,A
  528. DEC R1
  529. MOV A,045H
  530. ADDC A,@R1
  531. MOV 045H,A
  532. MOV A,R0
  533. ADD A,#005H
  534. MOV R0,A
  535. MOV A,R1
  536. ADD A,#005H
  537. MOV R1,A
  538. DJNZ 054H,L052F
  539. MOV A,043H
  540. RRC A
  541. MOV 043H,A
  542. MOV A,044H
  543. RRC A
  544. MOV 044H,A
  545. MOV A,043H
  546. RRC A
  547. MOV 043H,A
  548. MOV A,044H
  549. RRC A
  550. MOV 044H,A
  551. MOV A,043H
  552. RRC A
  553. MOV 043H,A
  554. MOV A,044H
  555. RRC A
  556. MOV 044H,A
  557. ANL 043H,#00FH
  558. MOV A,045H
  559. RRC A
  560. MOV 045H,A
  561. MOV A,046H
  562. RRC A
  563. MOV 046H,A
  564. MOV A,045H
  565. RRC A
  566. MOV 045H,A
  567. MOV A,046H
  568. RRC A
  569. MOV 046H,A
  570. MOV A,045H
  571. RRC A
  572. MOV 045H,A
  573. MOV A,046H
  574. RRC A
  575. MOV 046H,A
  576. ANL 045H,#00FH
  577. RET
  578. S0593: MOV 054H,#01CH
  579. MOV A,#080H
  580. ADD A,#01FH
  581. MOV R0,A
  582. CLR C
  583. SUBB A,#004H
  584. MOV R1,A
  585. L059F: MOV A,@R1
  586. MOV @R0,A
  587. DEC R0
  588. DEC R1
  589. DJNZ 054H,L059F
  590. RET
  591. S05A7: MOV 049H,#07FH
  592. MOV 04AH,#060H
  593. JNB 003H,L05BC
  594. ORL 04AH,#004H
  595. CLR 003H
  596. SETB 004H
  597. CLR T0
  598. LJMP L05D3
  599. L05BC: JNB 002H,L05CB
  600. ORL 04AH,#001H
  601. CLR 002H
  602. CLR 004H
  603. SETB T0
  604. LJMP L05D3
  605. L05CB: JNB 004H,L05D3
  606. ORL 04AH,#002H
  607. CLR T0
  608. L05D3: JB P1.3,L05E0
  609. MOV A,05DH
  610. JZ L05E9
  611. ORL 04AH,#008H
  612. LJMP L05EB
  613. L05E0: MOV A,05DH
  614. JZ L05EB
  615. DEC 05DH
  616. LJMP L05EB

 楼主| hotpower 发表于 2011-10-26 22:53 | 显示全部楼层
这个子程序(S打头的标号)肯定是模拟什么总线协议了~~~
三个NOP以上就暴露了~~~


  1. S0473: NOP   
  2. L0474: SETB  T2EX
  3. NOP   
  4. L0477: NOP   
  5. L0478: CLR   T2EX
  6. NOP   
  7. L047B: NOP   
  8. L047C: NOP   
  9. L047D: NOP   
  10. L047E: NOP   
  11. L047F: NOP   
  12. L0480: NOP   
  13. L0481: SETB  P1.2
  14. MOV   R7,#014H
  15. L0485: DJNZ  R7,$
  16. S0487: CLR   T2EX
  17. NOP   
  18. L048A: NOP   
  19. L048B: CLR   P1.2
  20. NOP   
  21. L048E: NOP   
  22. L048F: MOV   R3,#007H
  23. L0491: MOV   C,T2
  24. RLC   A
  25. NOP   
  26. L0495: SETB  T2EX
  27. NOP   
  28. L0498: NOP   
  29. L0499: CLR   T2EX
  30. NOP   
  31. L049C: DJNZ  R3,L0491
  32. MOV   C,T2
  33. RLC   A
  34. MOV   05CH,A
  35. RET   

 楼主| hotpower 发表于 2011-10-26 23:00 | 显示全部楼层
若不习惯T2EX为,在disasm51.def里用'*'屏蔽了它(注意修改保存)

  1. *91        T2EX
  2. *90        T2
注意后面的:

  1. !90        P1.0
  2. !91        P1.1
再单次反汇编!!!

  1. S0473:        NOP   
  2. L0474:        SETB  P1.1
  3.         NOP   
  4. L0477:        NOP   
  5. L0478:        CLR   P1.1
  6.         NOP   
  7. L047B:        NOP   
  8. L047C:        NOP   
  9. L047D:        NOP   
  10. L047E:        NOP   
  11. L047F:        NOP   
  12. L0480:        NOP   
  13. L0481:        SETB  P1.2
  14.         MOV   R7,#014H
  15. L0485:        DJNZ  R7,$
  16. S0487:        CLR   P1.1
  17.         NOP   
  18. L048A:        NOP   
  19. L048B:        CLR   P1.2
  20.         NOP   
  21. L048E:        NOP   
  22. L048F:        MOV   R3,#007H
  23. L0491:        MOV   C,P1.0
  24.         RLC   A
  25.         NOP   
  26. L0495:        SETB  P1.1
  27.         NOP   
  28. L0498:        NOP   
  29. L0499:        CLR   P1.1
  30.         NOP   
  31. L049C:        DJNZ  R3,L0491
  32.         MOV   C,P1.0
  33.         RLC   A
  34.         MOV   05CH,A
  35.         RET   
 楼主| hotpower 发表于 2011-10-26 23:01 | 显示全部楼层
这种模拟不习惯IO的第二功能的标注

  1. S04A4: CLR WR
  2. NOP
  3. L04A7: NOP
  4. L04A8: NOP
  5. L04A9: NOP
  6. L04AA: NOP
  7. L04AB: MOV A,P0
  8. ANL A,#03FH
  9. MOV 046H,A
  10. CLR RD
  11. NOP
  12. L04B4: NOP
  13. L04B5: NOP
  14. L04B6: NOP
  15. L04B7: NOP
  16. L04B8: MOV A,P0
  17. ANL A,#03FH
  18. MOV 045H,A
  19. SETB WR
  20. NOP
  21. L04C1: NOP
  22. L04C2: NOP
  23. L04C3: NOP
  24. L04C4: NOP
  25. L04C5: MOV A,P0
  26. ANL A,#03FH
  27. MOV 043H,A
  28. SETB RD
  29. NOP
  30. L04CE: NOP
  31. L04CF: NOP
  32. L04D0: NOP
  33. L04D1: NOP
  34. L04D2: MOV A,P0
  35. ANL A,#03FH
  36. RLC A
  37. RLC A
  38. MOV 044H,A
  39. MOV A,043H
  40. RRC A
  41. MOV 043H,A
  42. MOV A,044H
  43. RRC A
  44. MOV 044H,A
  45. MOV A,043H
  46. RRC A
  47. MOV 043H,A
  48. MOV A,044H
  49. RRC A
  50. MOV 044H,A
  51. MOV A,043H
  52. ANL A,#00FH
  53. MOV 043H,A
  54. MOV A,046H
  55. RLC A
  56. RLC A
  57. MOV 046H,A
  58. MOV A,045H
  59. RRC A
  60. MOV 045H,A
  61. MOV A,046H
  62. RRC A
  63. MOV 046H,A
  64. MOV A,045H
  65. RRC A
  66. MOV 045H,A
  67. MOV A,046H
  68. RRC A
  69. MOV 046H,A
  70. MOV A,045H
  71. ANL A,#00FH
  72. MOV 045H,A
  73. MOV R0,#080H
  74. MOV @R0,043H
  75. INC R0
  76. MOV @R0,044H
  77. INC R0
  78. MOV @R0,045H
  79. INC R0
  80. MOV @R0,046H
  81. RET
 楼主| hotpower 发表于 2011-10-26 23:07 | 显示全部楼层
在disasm51.def里用'*'屏蔽了WR,RD(注意修改保存)

  1. *B7        RD
  2. *B6        WR
开放P3.6,.7

  1. !B6        P3.6
  2. !B7        P3.7
单次反汇编后再编译,即手工操作。
可以直接搜索"S04A4:"
  1. S04A4:        CLR   P3.6
  2.         NOP   
  3. L04A7:        NOP   
  4. L04A8:        NOP   
  5. L04A9:        NOP   
  6. L04AA:        NOP   
  7. L04AB:        MOV   A,P0
  8.         ANL   A,#03FH
  9.         MOV   046H,A
  10.         CLR   P3.7
  11.         NOP   
  12. L04B4:        NOP   
  13. L04B5:        NOP   
  14. L04B6:        NOP   
  15. L04B7:        NOP   
  16. L04B8:        MOV   A,P0
  17.         ANL   A,#03FH
  18.         MOV   045H,A
  19.         SETB  P3.6
  20.         NOP   
  21. L04C1:        NOP   
  22. L04C2:        NOP   
  23. L04C3:        NOP   
  24. L04C4:        NOP   
  25. L04C5:        MOV   A,P0
  26.         ANL   A,#03FH
  27.         MOV   043H,A
  28.         SETB  P3.7
  29.         NOP   
  30. L04CE:        NOP   
  31. L04CF:        NOP   
  32. L04D0:        NOP   
  33. L04D1:        NOP   
  34. L04D2:        MOV   A,P0
  35.         ANL   A,#03FH
  36.         RLC   A
  37.         RLC   A
  38.         MOV   044H,A
  39.         MOV   A,043H
  40.         RRC   A
  41.         MOV   043H,A
  42.         MOV   A,044H
  43.         RRC   A
  44.         MOV   044H,A
  45.         MOV   A,043H
  46.         RRC   A
  47.         MOV   043H,A
  48.         MOV   A,044H
  49.         RRC   A
  50.         MOV   044H,A
  51.         MOV   A,043H
  52.         ANL   A,#00FH
  53.         MOV   043H,A
  54.         MOV   A,046H
  55.         RLC   A
  56.         RLC   A
  57.         MOV   046H,A
  58.         MOV   A,045H
  59.         RRC   A
  60.         MOV   045H,A
  61.         MOV   A,046H
  62.         RRC   A
  63.         MOV   046H,A
  64.         MOV   A,045H
  65.         RRC   A
  66.         MOV   045H,A
  67.         MOV   A,046H
  68.         RRC   A
  69.         MOV   046H,A
  70.         MOV   A,045H
  71.         ANL   A,#00FH
  72.         MOV   045H,A
  73.         MOV   R0,#080H
  74.         MOV   @R0,043H
  75.         INC   R0
  76.         MOV   @R0,044H
  77.         INC   R0
  78.         MOV   @R0,045H
  79.         INC   R0
  80.         MOV   @R0,046H
  81.         RET   
Cortex-M0 发表于 2011-10-27 10:23 | 显示全部楼层
这么多呀~~~
Cortex-M0 发表于 2011-10-27 10:23 | 显示全部楼层
菜农辛苦啦~~~ :victory:
 楼主| hotpower 发表于 2011-10-28 01:35 | 显示全部楼层
在向VC移植,全部用C++编写,文件操作用CFile,控制台程序,只能用CString,不过已知足了。

实际搞单片机的用VC编写控制台程序是很好的方法,这就是还有人用BC的原因
xxdcq 发表于 2011-10-28 08:50 | 显示全部楼层
看来菜农没有把真玩意放进网上呢!
有保留
我等下载的运行结果不是那样的
hp34401a 发表于 2011-10-28 09:14 | 显示全部楼层
顶,记号:PK 使人进步:HotISP V2.80A传说中的disasm51超级反汇编结语
Cortex-M0 发表于 2011-10-28 09:21 | 显示全部楼层
看来菜农没有把真玩意放进网上呢!
有保留
我等下载的运行结果不是那样的
xxdcq 发表于 2011-10-28 08:50


给力~~~

菜农的智能算法,能将那些特殊的编码都能算出来~~~

俺特殊的编码都可以算出来的。
hotpower 发表于 2011-10-26 19:32
 楼主| hotpower 发表于 2011-10-28 09:26 | 显示全部楼层
93楼冤枉菜农!
2.80A就是这个结果!
关键在操作,俺没时间写说明,在做新的算法,以对付任意捣鬼者。
hotisp和disasm51结合后会比其它51反汇编软件都方便。
何也?因为hotisp平台反汇编后直接调用keil A51进行再编译。
直接给出A51和LST文件,并双击对应入口直接到你要求查看的语句行。
而且hotisp平台可以自动找到keil工程并进入keil平台。
这些是比其它反汇编软件有点优点的。
散转即函数指针几乎无藏身之处!
xxdcq 发表于 2011-10-28 09:50 | 显示全部楼层
我也来现现丑!

我用我的反汇编出来的代码

;Made by xiexiaodong 2010.4.16
;Copyright by szyftech 2010.4.16
;www.yofeng.com
;********************************************************
        org 0000h
        ljmp X0100                        ;3
        ljmp X03c0                        ;3
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        ljmp X036e                        ;3
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        reti                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        reti                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        ljmp X01b9                        ;3
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
;********************************************************
X0100:
        clr ea                        ;2
        mov sp,#28h                ;3
        clr 00h                ;2
        lcall X011b                        ;3
        lcall X0183                        ;3
        lcall X0487                        ;3
        setb 00h                ;2
X0112:
        mov 0a6h,#1eh                ;3
        mov 0a6h,#0e1h                ;3
        ljmp X0112                        ;3
;********************************************************
X011b:
        mov tmod,#21h                ;3
        mov th1,#0ffh                ;3
        mov tl1,#0ffh                ;3
        mov th0,#0b8h                ;3
        mov tl0,#00h                ;3
        mov scon,#50h                ;3
        mov pcon,#80h                ;3
        mov ip,#03h                ;3
        setb it0                        ;2
        setb ex0                        ;2
        setb et0                        ;2
        clr ex1                        ;2
        clr et1                        ;2
        setb es                        ;2
        clr ie0                        ;2
        clr tf0                        ;2
        clr ie1                        ;2
        clr tf1                        ;2
        clr ti                        ;2
        clr ri                        ;2
        setb p3.0                        ;2
        setb p3.1                        ;2
        setb p1.2                        ;2
        setb p1.1                        ;2
        setb p1.0                        ;2
        setb p1.3                        ;2
        setb p1.4                        ;2
        setb p3.3                        ;2
        setb p3.6                        ;2
        setb p3.7                        ;2
        clr psw.3                        ;2
        clr psw.4                        ;2
        clr 02h                ;2
        clr 03h                ;2
        setb 04h                ;2
        mov 59h,#32h                ;3
        mov 5ah,#05h                ;3
        mov 5bh,#01h                ;3
        setb 05h                ;2
        mov 5dh,#00h                ;3
        mov 5eh,#00h                ;3
        mov 5fh,#00h                ;3
        mov 47h,#00h                ;3
        setb ea                        ;2
        ret                ;1
;********************************************************
X0183:
        setb tr0                        ;2
        setb tr1                        ;2
        ret                ;1
;********************************************************
X0188:
        db        7eh                ;1
        db        25h                ;1
X018a:
        mov r7,#0fah                ;2
X018c:
        djnz r7,X018c                ;2
        djnz r6,X018a                ;2
        ret                ;1
;********************************************************
X0191:
        mov r0,#62h                        ;2
X0193:
        lcall X01a0                        ;3
        jb 01h,X019f                ;3
        mov @r0,sbuf                        ;2
        inc r0                        ;1
        djnz 53h,X0193                ;3
X019f:
        ret                ;1
;********************************************************
X01a0:
        mov 40h,#05h                ;3
X01a3:
        mov 41h,#64h                ;3
X01a6:
        jnb ri,X01b0                ;3
        clr ri                        ;2
        clr 01h                ;2
        ljmp X01b8                        ;3
X01b0:
        djnz 41h,X01a6                ;3
        djnz 40h,X01a3                ;3
        setb 01h                ;2
X01b8:
        ret                ;1
;********************************************************
X01b9:
        push acc                        ;2
        push b                        ;2
        push psw                        ;2
        setb psw.3                        ;2
        setb psw.4                        ;2
        clr ri                        ;2
        mov a,sbuf                        ;2
        mov b,a                ;2
        mov 61h,a                ;2
        mov 53h,#03h                ;3
        lcall X0191                        ;3
        jb 01h,X01ea                ;3
        mov r0,#61h                        ;2
        inc r0                        ;1
        mov a,@r0                ;1
        add a,b                        ;2
        mov b,a                ;2
        inc r0                        ;1
        mov a,@r0                ;1
        add a,b                        ;2
        mov b,a                ;2
        inc r0                        ;1
        mov a,@r0                ;1
        cjne a,b,X01ea                ;3
        ljmp X01f5                        ;3
X01ea:
        clr ri                        ;2
        clr ti                        ;2
        pop psw                        ;2
        pop b                        ;2
        pop acc                        ;2
        reti                ;1
X01f5:
        mov a,61h                        ;2
        cjne a,#10h,X01fd                ;3
        ljmp X0200                        ;3
X01fd:
        ljmp X0289                        ;3
X0200:
        mov 52h,#0ffh                ;3
        mov sbuf,#0ffh                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        add a,#10h                        ;2
        mov 52h,a                ;2
        mov sbuf,#10h                ;3
        lcall X0423                        ;3
        mov 65h,#55h                ;3
        mov a,65h                        ;2
        cjne a,#55h,X0228                ;3
        mov 65h,#0aah                ;3
        mov a,65h                        ;2
        cjne a,#0aah,X0228                ;3
        ljmp X024f                        ;3
X0228:
        mov a,52h                        ;2
        add a,#21h                        ;2
        mov 52h,a                ;2
        mov sbuf,#21h                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        add a,#00h                ;2
        mov 52h,a                ;2
        mov sbuf,#00h                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        add a,#7fh                        ;2
        mov 52h,a                ;2
        mov sbuf,#7fh                ;3
        lcall X0423                        ;3
        ljmp X0273                        ;3
X024f:
        mov a,52h                        ;2
        add a,#20h                        ;2
        mov 52h,a                ;2
        mov sbuf,#20h                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        add a,#00h                ;2
        mov 52h,a                ;2
        mov sbuf,#00h                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        add a,#00h                ;2
        mov 52h,a                ;2
        mov sbuf,#00h                ;3
        lcall X0423                        ;3
X0273:
        mov a,52h                        ;2
        add a,#0f0h                ;2
        mov 52h,a                ;2
        mov sbuf,#0f0h                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        mov sbuf,a                ;2
        lcall X0423                        ;3
        ljmp X0363                        ;3
X0289:
        cjne a,#16h,X02cf                ;3
        mov 52h,#0ffh                ;3
        mov sbuf,#0ffh                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        add a,#16h                        ;2
        mov 52h,a                ;2
        mov sbuf,#16h                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        add a,#20h                        ;2
        mov 52h,a                ;2
        mov sbuf,#20h                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        add a,#00h                ;2
        mov 52h,a                ;2
        mov sbuf,#00h                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        add a,#0f0h                ;2
        mov 52h,a                ;2
        mov sbuf,#0f0h                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        mov sbuf,a                ;2
        lcall X0423                        ;3
        ljmp X0363                        ;3
X02cf:
        cjne a,#17h,X0312                ;3
        mov 52h,#0ffh                ;3
        mov sbuf,#0ffh                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        add a,#17h                        ;2
        mov 52h,a                ;2
        mov sbuf,#17h                ;3
        lcall X0423                        ;3
        mov dptr,#0f00h                ;3
        mov 53h,#0eh                ;3
X02ed:
        clr a                ;1
        movc a,@a+dptr                ;1
        mov sbuf,a                ;2
        add a,52h                        ;2
        mov 52h,a                ;2
        lcall X0423                        ;3
        inc dptr                ;1
        djnz 53h,X02ed                ;3
        mov a,52h                        ;2
        add a,#0f0h                ;2
        mov 52h,a                ;2
        mov sbuf,#0f0h                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        mov sbuf,a                ;2
        lcall X0423                        ;3
        ljmp X0363                        ;3
X0312:
        cjne a,#12h,X0360                ;3
        mov a,62h                        ;2
        mov 60h,a                ;2
        mov a,63h                        ;2
        mov 5fh,a                ;2
        mov 52h,#0ffh                ;3
        mov sbuf,#0ffh                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        add a,#12h                        ;2
        mov 52h,a                ;2
        mov sbuf,#12h                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        add a,#20h                        ;2
        mov 52h,a                ;2
        mov sbuf,#20h                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        add a,#00h                ;2
        mov 52h,a                ;2
        mov sbuf,#00h                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        add a,#0f0h                ;2
        mov 52h,a                ;2
        mov sbuf,#0f0h                ;3
        lcall X0423                        ;3
        mov a,52h                        ;2
        mov sbuf,a                ;2
        lcall X0423                        ;3
        ljmp X0363                        ;3
X0360:
        nop                ;1
        nop                ;1
        nop                ;1
X0363:
        clr ri                        ;2
        clr ti                        ;2
        pop psw                        ;2
        pop b                        ;2
        pop acc                        ;2
        reti                ;1
;********************************************************
X036e:
        push acc                        ;2
        push b                        ;2
        push psw                        ;2
        clr psw.3                        ;2
        setb psw.4                        ;2
        jnb 00h,X03b1                ;3
        djnz 59h,X03a2                ;3
        mov 59h,#32h                ;3
        jb p3.3,X0391                ;3
        setb p3.4                        ;2
        clr ex0                        ;2
        clr es                        ;2
        cpl p3.5                        ;2
        setb 05h                ;2
        ljmp X03a2                        ;3
X0391:
        clr ti                        ;2
        clr ri                        ;2
        setb ex0                        ;2
        setb es                        ;2
        jnb 05h,X03a2                ;3
        clr p3.4                        ;2
        setb p3.5                        ;2
        clr 05h                ;2
X03a2:
        djnz 5ah,X03b1                ;3
        mov 5ah,#05h                ;3
        clr 02h                ;2
        clr 03h                ;2
        setb 04h                ;2
        mov 47h,#00h                ;3
X03b1:
        mov th0,#0b8h                ;3
        mov tl0,#00h                ;3
        clr tf0                        ;2
        pop psw                        ;2
        pop b                        ;2
        pop acc                        ;2
        reti                ;1
;********************************************************
X03c0:
        push acc                        ;2
        push b                        ;2
        push psw                        ;2
        setb psw.3                        ;2
        clr psw.4                        ;2
        jnb 00h,X041a                ;3
        mov 5ah,#05h                ;3
        clr p3.5                        ;2
        lcall X0473                        ;3
        mov a,5ch                        ;2
        cjne a,60h,X03dd                ;3
        ljmp X03df                        ;3
X03dd:
        jc X03ef                ;2
X03df:
        jnb 04h,X03e9                ;3
        setb 02h                ;2
        clr 04h                ;2
        mov 47h,#04h                ;3
X03e9:
        mov 5bh,#01h                ;3
        ljmp X03fa                        ;3
X03ef:
        jb 04h,X03fa                ;3
        jb 02h,X03fa                ;3
        djnz 5bh,X03fa                ;3
        setb 03h                ;2
X03fa:
        lcall X04a4                        ;3
        mov a,47h                        ;2
        cjne a,#08h,X0405                ;3
        ljmp X040c                        ;3
X0405:
        inc 47h                        ;2
        mov a,47h                        ;2
        cjne a,#08h,X0415                ;3
X040c:
        lcall X0522                        ;3
        lcall X05a7                        ;3
        lcall X0442                        ;3
X0415:
        lcall X0593                        ;3
        setb p3.5                        ;2
X041a:
        clr ie0                        ;2
        pop psw                        ;2
        pop b                        ;2
        pop acc                        ;2
        reti                ;1
;********************************************************
X0423:
        mov 40h,#0c8h                ;3
X0426:
        mov 41h,#0c8h                ;3
X0429:
        jnb ti,X0433                ;3
        clr ti                        ;2
        clr 01h                ;2
        ljmp X0441                        ;3
X0433:
        mov 0a6h,#1eh                ;3
        mov 0a6h,#0e1h                ;3
        djnz 41h,X0429                ;3
        djnz 40h,X0426                ;3
        setb 01h                ;2
X0441:
        ret                ;1
;********************************************************
X0442:
        clr es                        ;2
        mov 48h,#0ffh                ;3
        mov 51h,#0f0h                ;3
        mov 53h,#01h                ;3
X044d:
        mov 52h,#00h                ;3
        mov 54h,#0bh                ;3
        mov r0,#48h                        ;2
X0455:
        mov sbuf,@r0                ;2
        lcall X0423                        ;3
        djnz 54h,X0460                ;3
        ljmp X0469                        ;3
X0460:
        mov a,@r0                ;1
        add a,52h                        ;2
        mov 52h,a                ;2
        inc r0                        ;1
        ljmp X0455                        ;3
X0469:
        djnz 53h,X044d                ;3
        clr ti                        ;2
        clr ri                        ;2
        setb es                        ;2
        ret                ;1
;********************************************************
X0473:
        nop                ;1
        setb p1.1                        ;2
        nop                ;1
        nop                ;1
        clr p1.1                        ;2
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        setb p1.2                        ;2
        mov r7,#14h                        ;2
X0485:
        djnz r7,X0485                ;2
;********************************************************
X0487:
        clr p1.1                        ;2
        nop                ;1
        nop                ;1
        clr p1.2                        ;2
        nop                ;1
        nop                ;1
        mov r3,#07h                ;2
X0491:
        mov c,p1.0                        ;2
        rlc a                ;1
        nop                ;1
        setb p1.1                        ;2
        nop                ;1
        nop                ;1
        clr p1.1                        ;2
        nop                ;1
        djnz r3,X0491                ;2
        mov c,p1.0                        ;2
        rlc a                ;1
        mov 5ch,a                ;2
        ret                ;1
;********************************************************
X04a4:
        clr p3.6                        ;2
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        mov a,p0                        ;2
        anl a,#3fh                        ;2
        mov 46h,a                ;2
        clr p3.7                        ;2
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        mov a,p0                        ;2
        anl a,#3fh                        ;2
        mov 45h,a                ;2
        setb p3.6                        ;2
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        mov a,p0                        ;2
        anl a,#3fh                        ;2
        mov 43h,a                ;2
        setb p3.7                        ;2
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        nop                ;1
        mov a,p0                        ;2
        anl a,#3fh                        ;2
        rlc a                ;1
        rlc a                ;1
        mov 44h,a                ;2
        mov a,43h                        ;2
        rrc a                ;1
        mov 43h,a                ;2
        mov a,44h                        ;2
        rrc a                ;1
        mov 44h,a                ;2
        mov a,43h                        ;2
        rrc a                ;1
        mov 43h,a                ;2
        mov a,44h                        ;2
        rrc a                ;1
        mov 44h,a                ;2
        mov a,43h                        ;2
        anl a,#0fh                ;2
        mov 43h,a                ;2
        mov a,46h                        ;2
        rlc a                ;1
        rlc a                ;1
        mov 46h,a                ;2
        mov a,45h                        ;2
        rrc a                ;1
        mov 45h,a                ;2
        mov a,46h                        ;2
        rrc a                ;1
        mov 46h,a                ;2
        mov a,45h                        ;2
        rrc a                ;1
        mov 45h,a                ;2
        mov a,46h                        ;2
        rrc a                ;1
        mov 46h,a                ;2
        mov a,45h                        ;2
        anl a,#0fh                ;2
        mov 45h,a                ;2
        mov r0,#80h                        ;2
        mov @r0,43h                        ;2
        inc r0                        ;1
        mov @r0,44h                        ;2
        inc r0                        ;1
        mov @r0,45h                        ;2
        inc r0                        ;1
        mov @r0,46h                        ;2
        ret                ;1
;********************************************************
X0522:
        mov a,#80h                        ;2
        add a,#05h                ;2
        mov r0,a                ;1
        mov a,#80h                        ;2
        add a,#07h                ;2
        mov r1,a                ;1
        mov 54h,#07h                ;3
X052f:
        mov a,44h                        ;2
        add a,@r0                ;1
        mov 44h,a                ;2
        dec r0                ;1
        mov a,43h                        ;2
        addc a,@r0                ;1
        mov 43h,a                ;2
        mov a,46h                        ;2
        add a,@r1                ;1
        mov 46h,a                ;2
        dec r1                ;1
        mov a,45h                        ;2
        addc a,@r1                ;1
        mov 45h,a                ;2
        mov a,r0                ;1
        add a,#05h                ;2
        mov r0,a                ;1
        mov a,r1                ;1
        add a,#05h                ;2
        mov r1,a                ;1
        djnz 54h,X052f                ;3
        mov a,43h                        ;2
        rrc a                ;1
        mov 43h,a                ;2
        mov a,44h                        ;2
        rrc a                ;1
        mov 44h,a                ;2
        mov a,43h                        ;2
        rrc a                ;1
        mov 43h,a                ;2
        mov a,44h                        ;2
        rrc a                ;1
        mov 44h,a                ;2
        mov a,43h                        ;2
        rrc a                ;1
        mov 43h,a                ;2
        mov a,44h                        ;2
        rrc a                ;1
        mov 44h,a                ;2
        anl 43h,#0fh                ;3
        mov a,45h                        ;2
        rrc a                ;1
        mov 45h,a                ;2
        mov a,46h                        ;2
        rrc a                ;1
        mov 46h,a                ;2
        mov a,45h                        ;2
        rrc a                ;1
        mov 45h,a                ;2
        mov a,46h                        ;2
        rrc a                ;1
        mov 46h,a                ;2
        mov a,45h                        ;2
        rrc a                ;1
        mov 45h,a                ;2
        mov a,46h                        ;2
        rrc a                ;1
        mov 46h,a                ;2
        anl 45h,#0fh                ;3
        ret                ;1
;********************************************************
X0593:
        mov 54h,#1ch                ;3
        mov a,#80h                        ;2
        add a,#1fh                        ;2
        mov r0,a                ;1
        clr c                ;1
        subb a,#04h                ;2
        mov r1,a                ;1
X059f:
        mov a,@r1                ;1
        mov @r0,a                ;1
        dec r0                ;1
        dec r1                ;1
        djnz 54h,X059f                ;3
        ret                ;1
;********************************************************
X05a7:
        mov 49h,#7fh                ;3
        mov 4ah,#60h                ;3
        jnb 03h,X05bc                ;3
        orl 4ah,#04h                ;3
        clr 03h                ;2
        setb 04h                ;2
        clr p3.4                        ;2
        ljmp X05d3                        ;3
X05bc:
        jnb 02h,X05cb                ;3
        orl 4ah,#01h                ;3
        clr 02h                ;2
        clr 04h                ;2
        setb p3.4                        ;2
        ljmp X05d3                        ;3
X05cb:
        jnb 04h,X05d3                ;3
        orl 4ah,#02h                ;3
        clr p3.4                        ;2
X05d3:
        jb p1.3,X05e0                ;3
        mov a,5dh                        ;2
        jz X05e9                ;2
        orl 4ah,#08h                ;3
        ljmp X05eb                        ;3
X05e0:
        mov a,5dh                        ;2
        jz X05eb                ;2
        dec 5dh                        ;2
        ljmp X05eb                        ;3
X05e9:
        inc 5dh                        ;2
X05eb:
        jb p1.4,X05f8                ;3
        mov a,5eh                        ;2
        jz X0601                ;2
        orl 4ah,#10h                ;3
        ljmp X0603                        ;3
X05f8:
        mov a,5eh                        ;2
        jz X0603                ;2
        dec 5eh                        ;2
        ljmp X0603                        ;3
X0601:
        inc 5eh                        ;2
X0603:
        mov a,5ch                        ;2
        cjne a,60h,X060b                ;3
        ljmp X0612                        ;3
X060b:
        jnc X0612                ;2
        mov a,#00h                ;2
        ljmp X0614                        ;3
X0612:
        subb a,60h                        ;2
X0614:
        mov 4ch,a                ;2
        rlc a                ;1
        mov a,4bh                        ;2
        rlc a                ;1
        anl a,#01h                ;2
        orl a,#78h                        ;2
        mov 4bh,a                ;2
        anl 4ch,#7fh                ;3
        mov a,44h                        ;2
        mov 4eh,a                ;2
        rlc a                ;1
        mov a,43h                        ;2
        rlc a                ;1
        mov 4dh,a                ;2
        anl 4dh,#1fh                ;3
        anl 4eh,#7fh                ;3
        mov a,46h                        ;2
        mov 50h,a                ;2
        rlc a                ;1
        mov a,45h                        ;2
        rlc a                ;1
        mov 4fh,a                ;2
        anl 4fh,#1fh                ;3
        anl 50h,#7fh                ;3
        ret                ;1
;********************************************************
X0644:
        db        00h                ;1
        db        00h                ;1
        db        00h                ;1
;********************************************************
        org 0efdh
        ljmp X0100                        ;3
;********************************************************
        org 0f00h
X0f00:
        db        30h                ;1
        db        30h                ;1
        db        30h                ;1
        db        30h                ;1
        db        30h                ;1
        db        33h                ;1
        db        30h                ;1
        db        39h                ;1
        db        32h                ;1
        db        38h                ;1
        db        31h                ;1
        db        30h                ;1
        db        33h                ;1
        db        36h                ;1
        db        00h                ;1
        db        00h                ;1
        db        00h                ;1
;********************************************************
        org 1ffdh
        ljmp X0100                        ;3
        end
xxdcq 发表于 2011-10-28 09:55 | 显示全部楼层
这是源程序
N年前做的产品

;光电笔程序
;压力值为设定值
;带看门狗
;带8点平均滤波算法
;结束点判断个数为1个
;new要改变pointnum到4,over不改变pointnum
;版本信息改到了0f00h
;t0定时中断改到20ms
;增加t0intnum1中断,定时100ms检查是否有光电信号输出,若没有了就清除新笔画
;结束笔画,笔画点标志,防止在没有信号时按下笔尖再有信号时会随机出现一个笔划
;*******************************************************************
addata                        equ        p1.0
adclk                        equ        p1.1
adcs                        equ        p1.2
upkey                        equ        p1.3
downkey                        equ        p1.4
usbcheck                equ        p3.3
blue                        equ        p3.4
red                        equ        p3.5
cs1                        equ        p3.6
cs2                        equ        p3.7
;*******************************************************************
initflag                EQU        00h                ;;初始化标志
toutflag                EQU        01h                ;;通信超时标志,0为不超时,1超时
newflag                        EQU        02h                ;;笔画头标志,0非,1是
overflag                EQU        03h                ;;笔画尾标志,0非,1是
penmouse                EQU        04h                ;为0时是笔画点,为1时是鼠标点
usbok                        EQU        05h                ;0为usb正常,1不正常
;*******************************************************************
time1                        EQU        40h
time2                        EQU        time1+1
time3                        EQU        time2+1
dba                        EQU        time3+1                ;;dba
s1                        EQU        dba+1                ;;s1
dbb                        EQU        s1+1                ;;dbb
s2                        EQU        dbb+1                ;;s2
pointnum                EQU        s2+1
zt0                        EQU        pointnum+1        ;;数据头0ffh
b7                        EQU        zt0+1                ;数据包类型
b0                        EQU        b7+1
b1                        EQU        b0+1
b2                        EQU        b1+1
b3                        EQU        b2+1
b4                        EQU        b3+1
b5                        EQU        b4+1
b6                        EQU        b5+1
zw0                        EQU        b6+1                ;;数据尾0f0h
xyh                        EQU        zw0+1                ;;前10个字节的校验和
sendnum                        EQU        xyh+1                ;;发送次数
cout                        EQU        sendnum+1
cout1                        EQU        cout+1
cout2                        EQU        cout1+1
cout3                        EQU        cout2+1
cout4                        EQU        cout3+1
t0intnum                EQU        cout4+1                ;t0中断次数
t0intnum1                EQU        t0intnum+1        ;100ms检查是否有光电信号
overnum                        EQU        t0intnum1+1
adresult                EQU        overnum+1
mouseupkeynum                EQU        adresult+1        ;为1时才是一次有效的按键
mousedokeynum                EQU        mouseupkeynum+1        ;为1时才是一次有效的按键
setpress0                EQU        mousedokeynum+1        ;设定的落笔压力值高
setpress1                EQU        setpress0+1        ;设定的落笔压力值低
commbuf0                EQU        setpress1+1
commbuf1                EQU        commbuf0+1
commbuf2                EQU        commbuf1+1
commbuf3                EQU        commbuf2+1
ramcheck                EQU        commbuf3+1
temp0                        EQU        ramcheck+1
temp1                        EQU        temp0+1
xy                        EQU        80h                ;间接寻址
;*******************************************************************
wdtrst                        EQU        0a6h
;*******************************************************************
;pc机控制指令和回应字
divchk                        EQU        10h                ;设备检测命令
setpress                EQU        12h                ;设置落笔压力值命令
wakeup                        EQU        16h                ;激活命令
vercheck                EQU        17h                ;读版本命令
cmdok                        EQU        20h
cmdfail                        EQU        21h
;*******************************************************************
               org 0000h
               ljmp main
               org 0003h
               ljmp int_0
               org 000bh
               ljmp t0_int                                ;;定时器0中断(20ms)
               org 0013h
               reti
        org 001bh
               reti
               org 0023h
               ljmp ser_int
;----------------------------------------------------------------------------
;
;
;
        org 0100h
main:
        clr ea
        mov sp,#28h
        clr initflag                                ;初始化开始
        lcall sys_init
        lcall timestart                                ;起动定时器
        lcall adcov0                                ;开始时ad转换是假值,把它放掉
        setb initflag                                ;初始化完成
main1:
        mov wdtrst,#1eh                                ;清看门狗
        mov wdtrst,#0e1h
        ljmp main1
;*******************************************************************
sys_init:
        MOV TMOD,#21H
        MOV TH1,#0ffH                                ;57600b/s(11.0592M)
        MOV TL1,#0ffH
        mov th0,#0b8h                                ;定时20ms
        mov tl0,#00h
        MOV SCON,#50H                                ;格式n81
        MOV PCON,#80H
        mov ip,#00000011b                        ;int0中断和t0中断优先
        setb it0                                ;int0下降沿中断
        setb ex0
        setb et0
        clr ex1
        clr et1
        setb es
        clr ie0
        clr tf0
        clr ie1
        clr tf1
        CLR TI
        CLR RI
        setb p3.0
        setb p3.1
        setb adcs
        setb adclk
        setb addata
        setb upkey
        setb downkey
        setb usbcheck
        setb cs1
        setb cs2
        clr psw.3
        clr psw.4
        clr newflag
        clr overflag
        setb penmouse                                ;鼠标点
        mov t0intnum,#50                        ;1s
        mov t0intnum1,#5                        ;100ms
        mov overnum,#1
        setb usbok                                ;usb不正常
        mov mouseupkeynum,#0                        ;上按键次数清零
        mov mousedokeynum,#0                        ;下按键次数清零
        mov setpress0,#00h                        ;设定的落笔压力值初始值为15
        ;mov setpress1,#15
        mov pointnum,#0                                ;点数为0
        setb ea
        ret
;*******************************************************************
timestart:
        SETB TR0
        setb tr1
        ret
;*******************************************************************
dt20ms:
        mov r6,#37
dt1:
        mov r7,#250
        djnz r7,$
        djnz r6,dt1
        ret
;*******************************************************************
rev_bytes:
        mov r0,#commbuf1
rev_bytes1:
        lcall rev
        jb toutflag,rev_bytes2                        ;是否3秒超时?
        mov @r0,sbuf
        inc r0
        djnz sendnum,rev_bytes1
rev_bytes2:
        ret
;----------------------------------------------------------------------------
;接收一字节子程序
rev:
               mov time1,#5
rev1:
               mov time2,#100
rev2:
               jnb ri,rev3                                ;;jsflag=1?
               clr ri                                        ;;clear jsflag
               clr toutflag                                ;;清超时标志
               ljmp rev4
rev3:
               djnz time2,rev2
               djnz time1,rev1
               setb toutflag                                ;;置超时标志
rev4:
               ret
;----------------------------------------------------------------------------
ser_int:
        push acc
        push b
        push psw
        setb psw.3
        setb psw.4
        clr ri                                        ;;clear jsflag
        mov a,sbuf
        mov b,a
        mov commbuf0,a
        mov sendnum,#3
        lcall rev_bytes
        jb toutflag,ser_int1                        ;是否5秒超时?
        mov r0,#commbuf0
        inc r0
        mov a,@r0
        add a,b
        mov b,a
        inc r0
        mov a,@r0
        add a,b
        mov b,a
        inc r0
        mov a,@r0
        cjne a,b,ser_int1
        ljmp ser_int2                                ;命令是否正确?
ser_int1:
        clr ri
        clr ti
        pop psw
        pop b
        pop acc
        reti
ser_int2:
        mov a,commbuf0
        cjne a,#divchk,ser_int3                        ;是设备检测命令吗?
        ljmp devicecheck1
ser_int3:
        ljmp ser_int4
devicecheck1:                                        ;设备检测
        mov xyh,#0ffh
        mov sbuf,#0ffh                                ;发应答数据‘0ffH’
        lcall send
        mov a,xyh
        add a,#divchk
        mov xyh,a
        mov sbuf,#divchk                        ;发应答数据‘10H’
        lcall send
        mov ramcheck,#55h                        ;检查内存
        mov a,ramcheck
        cjne a,#55h,devicecheck2
        mov ramcheck,#0aah
        mov a,ramcheck
        cjne a,#0aah,devicecheck2
        ljmp devicecheck3
devicecheck2:
        mov a,xyh
        add a,#cmdfail
        mov xyh,a
        mov sbuf,#cmdfail                        ;发应答数据‘21H’
        lcall send
        mov a,xyh
        add a,#00h
        mov xyh,a
        mov sbuf,#00h                                ;发应答数据‘00H’
        lcall send
        mov a,xyh
        add a,#7fh
        mov xyh,a
        mov sbuf,#7fh                                ;发应答数据‘7fH’
        lcall send
        ljmp devicecheck4
devicecheck3:
        mov a,xyh
        add a,#cmdok
        mov xyh,a
        mov sbuf,#cmdok                                ;发应答数据‘20H’
        lcall send
        mov a,xyh
        add a,#00h
        mov xyh,a
        mov sbuf,#00h                                ;发应答数据‘00H’
        lcall send
        mov a,xyh
        add a,#00h
        mov xyh,a
        mov sbuf,#00h                                ;发应答数据‘00H’
        lcall send
devicecheck4:
        mov a,xyh
        add a,#0f0h
        mov xyh,a
        mov sbuf,#0f0h                                ;发应答数据‘0f0H’
        lcall send
        mov a,xyh
        mov sbuf,a                                ;发校验和
        lcall send
        ljmp ser_int7
ser_int4:
        cjne a,#wakeup,ser_int5                        ;是激活命令吗?
        mov xyh,#0ffh
        mov sbuf,#0ffh                                ;发应答数据‘0ffH’
        lcall send
        mov a,xyh
        add a,#wakeup
        mov xyh,a
        mov sbuf,#wakeup                        ;发应答数据‘16H’
        lcall send
        mov a,xyh
        add a,#cmdok
        mov xyh,a
        mov sbuf,#cmdok                                ;发应答数据‘20H’
        lcall send
        mov a,xyh
        add a,#00h
        mov xyh,a
        mov sbuf,#00h                                ;发应答数据‘00H’
        lcall send
        mov a,xyh
        add a,#0f0h
        mov xyh,a
        mov sbuf,#0f0h                                ;发应答数据‘0f0H’
        lcall send
        mov a,xyh
        mov sbuf,a                                ;发校验和
        lcall send
        ljmp ser_int7
ser_int5:
        cjne a,#vercheck,ser_int6                ;是读生产模式,日期,版本命令吗?
        mov xyh,#0ffh
        mov sbuf,#0ffh                                ;发应答数据‘0ffH’
        lcall send
        mov a,xyh
        add a,#vercheck
        mov xyh,a
        mov sbuf,#vercheck                        ;发应答数据‘17H’
        lcall send
        mov dptr,#vertab
        mov sendnum,#14                                ;发14字节
vercheck1:
        clr a
        movc a,@a+dptr
        mov sbuf,a
        add a,xyh
        mov xyh,a
        lcall send
        inc dptr
        djnz sendnum,vercheck1
        mov a,xyh
        add a,#0f0h
        mov xyh,a
        mov sbuf,#0f0h                                ;发应答数据‘0f0H’
        lcall send
        mov a,xyh
        mov sbuf,a                                ;发校验和
        lcall send
        ljmp ser_int7
ser_int6:
        cjne a,#setpress,ser_int8                ;是设置落笔压力值命令吗?
        mov a,commbuf1
        mov setpress1,a                                ;保存设定的落笔压力值
        mov a,commbuf2
        mov setpress0,a
        mov xyh,#0ffh
        mov sbuf,#0ffh                                ;发应答数据‘0ffH’
        lcall send
        mov a,xyh
        add a,#setpress
        mov xyh,a
        mov sbuf,#setpress                        ;发应答数据‘12H’
        lcall send
        mov a,xyh
        add a,#cmdok
        mov xyh,a
        mov sbuf,#cmdok                                ;发应答数据‘20H’
        lcall send
        mov a,xyh
        add a,#00h
        mov xyh,a
        mov sbuf,#00h                                ;发应答数据‘00H’
        lcall send
        mov a,xyh
        add a,#0f0h
        mov xyh,a
        mov sbuf,#0f0h                                ;发应答数据‘0f0H’
        lcall send
        mov a,xyh
        mov sbuf,a                                ;发校验和
        lcall send
        ljmp ser_int7
ser_int8:
        nop                                        ;pc的其它命令
        nop
        nop
ser_int7:
        clr ri
        clr ti
        pop psw
        pop b
        pop acc
        reti
;*******************************************************************
;定时器0中断
;功能:20ms定时检测是否抬笔
t0_int:
        push acc
        push b
        push psw
        clr psw.3
        setb psw.4
        jnb initflag,t0_int3
        djnz t0intnum,t0_int2                        ;到一秒了吗?
        mov t0intnum,#50                        ;1s
        jb usbcheck,t0_int1                        ;usb正常吗?
        setb blue                                ;兰灯熄灭
        clr ex0                                        ;关中断
        clr es
        cpl red                                        ;红灯闪烁
        setb usbok                                ;usb不正常
        ljmp t0_int2
t0_int1:
        clr ti
        clr ri
        setb ex0                                ;开中断
        setb es
        jnb usbok,t0_int2
        clr blue                                ;点亮兰灯
        setb red                                ;红灯熄灭
        clr usbok                                ;usb正常
t0_int2:
        djnz t0intnum1,t0_int3                        ;到100ms了吗?
        mov t0intnum1,#5                        ;100ms
        clr newflag
        clr overflag
        setb penmouse                                ;鼠标点
        mov pointnum,#0                                ;点数为0
t0_int3:
        mov th0,#0b8h                                ;定时20ms
        mov tl0,#00h
        clr tf0
        pop psw
        pop b
        pop acc
        reti
;*******************************************************************
;int0中断
;功能:数据处理
int_0:
        push acc
        push b
        push psw
        setb psw.3
        clr psw.4
        jnb initflag,int_11
        mov t0intnum1,#5                        ;100ms
        clr red                                        ;点亮红灯
        lcall adcov
        mov a,adresult
        cjne a,setpress1,int_01                        ;笔尖压力值>=设定压力吗?
        ljmp int_02
int_01:
        jc int_04                                ;有落笔吗?
int_02:
        jnb penmouse,int_03                        ;是笔画点吗?
        setb newflag                                ;起始点
        clr penmouse                                ;笔画点
        mov pointnum,#4                                ;点数为4
int_03:
        mov overnum,#1
        ljmp int_05
int_04:
        jb penmouse,int_05                        ;是笔画点吗?
        jb newflag,int_05                        ;起始点处理完了吗?
        djnz overnum,int_05                        ;起始点处理完了才能处理结束点
        setb overflag                                ;结束点
int_05:
        lcall getdat                                ;读取CPLD的数据
        mov a,pointnum
        cjne a,#8,int_07                        ;大于8点吗?
        ljmp int_08
int_07:
        inc pointnum
        mov a,pointnum
        cjne a,#8,int_10                        ;到new后第4点了吗?
int_08:
        lcall pjz                                ;求8点平均
int_09:
        lcall datcov                                ;组织数据
        lcall txy                                ;向PC机发X,Y
int_10:
        lcall newtoold                                ;保存上一次的坐标
        setb red                                ;熄灭红灯
int_11:
        clr ie0
        pop psw
        pop b
        pop acc
        reti
;*******************************************************************
;发送一字节子程序
send:
        mov time1,#200
send0:
        mov time2,#200
send1:
        jnb ti,send2                                      ;;ti=1?
        clr ti                                        ;;clear ti
        clr toutflag                                ;;清超时标志
        ljmp send3
send2:
        mov wdtrst,#1eh                                ;清看门狗
        mov wdtrst,#0e1h
        djnz time2,send1
        djnz time1,send0
        setb toutflag                                ;;置超时标志
send3:
        ret
;*******************************************************************
;向PC机发数据
txy:
        clr es                                        ;禁止串口中断
        mov zt0,#0ffh                                ;帧头
        mov zw0,#0f0h                                ;帧尾
        mov sendnum,#1
txy1:
        mov xyh,#0
        mov cout,#11
        mov r0,#zt0
txy2:
        mov sbuf,@r0
        lcall send
        djnz cout,txy3
        ljmp txy4
txy3:
        mov a,@r0
        add a,xyh
        mov xyh,a                                ;校验和
        inc r0
        ljmp txy2
txy4:
        djnz sendnum,txy1
        clr ti                                        ;清串口中断标志
        clr ri
        setb es                                        ;允许串口中断
        ret
;*******************************************************************
;ad转换值在adresult中,ad转换器用的tlc549
adcov:
        nop                                        ;送第8个clk脉冲将启动ad转换
        setb adclk                                ;adclk=1
        nop
        nop
        clr adclk                                ;adclk=0
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        setb adcs                                ;adcs=1
        mov r7,#20                                ;ad转换时间大于17us
        djnz r7,$
adcov0:
        clr adclk                                ;adclk=0
        nop
        nop
        clr adcs                                ;adcs=0
        nop
        nop
        mov r3,#7
adcov1:
        mov c,addata
        rlc a
        nop
        setb adclk                                ;adclk=1
        nop
        nop
        clr adclk                                ;adclk=0
        nop
        djnz r3,adcov1
        mov c,addata
        rlc a
        mov adresult,a
        ret
;*******************************************************************
;在CPLD取得原始数据
;输出:s1, s2, dba, dbb
getdat:
        clr cs1                                             ;select s2
        nop
        nop
        nop
        nop
        nop
        mov a,p0
        anl a,#00111111b
        mov s2,a
        clr cs2                                             ;select dbb
        nop
        nop
        nop
        nop
        nop
        mov a,p0
        anl a,#00111111b
        mov dbb,a
        setb cs1                                     ;select dba
        nop
        nop
        nop
        nop
        nop
        mov a,p0
        anl a,#00111111b
        mov dba,a
        setb cs2                                     ;select s1
        nop
        nop
        nop
        nop
        nop
        mov a,p0
        anl a,#00111111b
        rlc a
        rlc a
        mov s1,a
        mov a,dba
        rrc a
        mov dba,a
        mov a,s1
        rrc a
        mov s1,a
        mov a,dba
        rrc a
        mov dba,a
        mov a,s1
        rrc a
        mov s1,a
        mov a,dba
        anl a,#00001111b
        mov dba,a
        mov a,s2
        rlc a
        rlc a
        mov s2,a
        mov a,dbb
        rrc a
        mov dbb,a
        mov a,s2
        rrc a
        mov s2,a
        mov a,dbb
        rrc a
        mov dbb,a
        mov a,s2
        rrc a
        mov s2,a
        mov a,dbb
        anl a,#00001111b
        mov dbb,a
        mov r0,#xy
        mov @r0,dba
        inc r0
        mov @r0,s1
        inc r0
        mov @r0,dbb
        inc r0
        mov @r0,s2
        ret
;*******************************************************************
;求8点平均值,dbas1=(x+x1+x2+x3+x4+x5+x6+x7)/8,dbbs2=(y+y1+y2+y3+y5+y6+y7)/8
pjz:
        mov a,#xy
        add a,#5                                ;指到x1l
        mov r0,a
        mov a,#xy
        add a,#7                                ;指到y1l
        mov r1,a
        mov cout,#7
pjz1:
        mov a,s1
        add a,@r0
        mov s1,a
        dec r0                                        ;指到x?h
        mov a,dba
        addc a,@r0
        mov dba,a
        mov a,s2
        add a,@r1
        mov s2,a
        dec r1                                        ;指到y?h
        mov a,dbb
        addc a,@r1
        mov dbb,a
        mov a,r0
        add a,#5                                ;指到下一个x?l
        mov r0,a
        mov a,r1
        add a,#5                                ;指到下一个y?l
        mov r1,a
        djnz cout,pjz1
        mov a,dba                                ;dbas1=dbas1/8
        rrc a
        mov dba,a
        mov a,s1
        rrc a
        mov s1,a
        mov a,dba
        rrc a
        mov dba,a
        mov a,s1
        rrc a
        mov s1,a
        mov a,dba
        rrc a
        mov dba,a
        mov a,s1
        rrc a
        mov s1,a
        anl dba,#00001111b
        mov a,dbb                                ;dbbs2=dbbs2/8
        rrc a
        mov dbb,a
        mov a,s2
        rrc a
        mov s2,a
        mov a,dbb
        rrc a
        mov dbb,a
        mov a,s2
        rrc a
        mov s2,a
        mov a,dbb
        rrc a
        mov dbb,a
        mov a,s2
        rrc a
        mov s2,a
        anl dbb,#00001111b
        ret
;*******************************************************************
newtoold:
        mov cout,#28
        mov a,#xy
        add a,#31                                ;指到y7l
        mov r0,a
        clr c
        subb a,#4                                ;指到y6l
        mov r1,a
newtoold1:
        mov a,@r1
        mov @r0,a
        dec r0
        dec r1
        djnz cout,newtoold1
        ret
;*******************************************************************
;按协议组织数据并清除和设置一些标志
;输入:newflag,overflag,adresult,s1,dba,s2,dbb
;输出:b0-b6
datcov:
        mov b7,#7fh                                ;普通数据包
        mov b0,#60h
        jnb overflag,datcov0                        ;是否为结束笔画?
        orl b0,#00000100b
        clr overflag                                ;清结束笔画标志
        setb penmouse                                ;鼠标点标志
        clr blue                                ;点亮兰灯
        ljmp datcov2
datcov0:
        jnb newflag,datcov1                        ;是否为新笔画?
        orl b0,#00000001b
        clr newflag                                ;清新笔画标志
        clr penmouse                                ;笔画点
        setb blue                                ;兰灯熄灭
        ljmp datcov2
datcov1:
        jnb penmouse,datcov2                        ;是鼠标点吗?
        orl b0,#00000010b                        ;加鼠标点标志
        clr blue                                ;点亮兰灯
datcov2:
        jb upkey,datcov3                        ;鼠标上键按下吗?
        mov a,mouseupkeynum
        jz datcov4
        orl b0,#00001000b
        ljmp datcov5
datcov3:
        mov a,mouseupkeynum
        jz datcov5
        dec mouseupkeynum
        ljmp datcov5
datcov4:
        inc mouseupkeynum
datcov5:
        jb downkey,datcov6                        ;鼠标下键按下吗?
        mov a,mousedokeynum
        jz datcov7
        orl b0,#00010000b
        ljmp datcov8
datcov6:
        mov a,mousedokeynum
        jz datcov8
        dec mousedokeynum
        ljmp datcov8
datcov7:
        inc mousedokeynum
datcov8:
        mov a,adresult
        cjne a,setpress1,datcov9
        ljmp datcov10
datcov9:
        jnc datcov10
        mov a,#0
        ljmp datcov11
datcov10:
        subb a,setpress1                        ;由于落笔时的最小压力值是setpress1,故要减setpress1
datcov11:
        mov b2,a
        rlc a
        mov a,b1
        rlc a
        anl a,#00000001b                        ;8位ad转换
        orl a,#01111000b
        mov b1,a
        anl b2,#01111111b
        mov a,s1
        mov b4,a
        rlc a
        mov a,dba
        rlc a
        mov b3,a
        anl b3,#00011111b
        anl b4,#01111111b
        mov a,s2
        mov b6,a
        rlc a
        mov a,dbb
        rlc a
        mov b5,a
        anl b5,#00011111b
        anl b6,#01111111b
        ret
;*******************************************************************
        org 0efdh
        ljmp main                                ;软件陷阱
;*******************************************************************
        org 0f00h
vertab:
        db '0','0','0','0'                        ;生产模式
        db '0','3','0','9','2','8'                ;日期
        db '1','0','3','6'                        ;版本
;*******************************************************************
        org 1ffdh
        ljmp main                                ;软件陷阱
;*******************************************************************
        end
xxdcq 发表于 2011-10-28 10:02 | 显示全部楼层
我的反汇编把没有调用过的,没有跳转过的,没有散转过的向量会作为数据段地址
比如X0188:
我翻译成了数据
       db        7eh                ;1
          db        25h                ;1

菜农的翻译成的程序
       L0188: MOV R6,#025H

看来还有高明之处!
flywater2010 发表于 2011-10-28 12:11 | 显示全部楼层
的确比其它的51反汇编工具强上很多,很智能,强赞一个!
 楼主| hotpower 发表于 2011-10-28 15:34 | 显示全部楼层
这个算法俺已经淘汰,因为毕竟是20多年前的产物。
新算法将对每个分支进行人为的设置,这样可以彻底对付“无賊论”。

新算法全面支持命令行,几乎所有的运算都移入内存,速度大为提升。

这种批量的做法将在disasm51内部一次完成。
各种设置都可以通过命令行外部设置,而目前必须由用户定义文件来传递。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部