fef 发表于 2006-3-5 00:00:59

怎么用汇编实现在ram里查找数据?

想在RAM某一特定的数据区域查找某个数值并匹配

汇编应该怎么实现


双字例子

161A04:3200 3200 2100 0000

从161A04开始查找0000,并返回00前那个数的地址和值

例子中数值是2100 地址为161A08
应该怎么实现

付上自己写的这个程序
返回的不是数值老是出错
机子死机 开机后发现是运行到 2e就crash了

610022: E6 F2 0A 1A :   mov   r2, #1A04h
610026: D7 40 58 00 : loc_610026:
610026: D7 40 58 00 :   extp    #58h, #1
61002A: D4 12 02 00 :   mov   r1,
61002E: 48 10       :   cmp    r1, #0
610030: 2D 03       :   jmpr    cc_Z, loc_610038
610032: 08 21       :   add   r2, #1
610034: F0 C1       :   mov   r12, r1
610036: 0D F7       :   jmpr    cc_UC, loc_610026

单字节也试过

31323500
查找00

movb rl4
movbz r14 r14
cmp r14 #1

也是死机

[ 本帖最后由 fef 于 2006-3-15 22:51 编辑 ]

下午四点半 发表于 2006-3-6 14:11:37

介个.....8懂呀。帮顶啦

fef 发表于 2006-3-6 22:04:15

每人回答
郁闷啊
多谢四点半

nj528 发表于 2006-3-7 22:43:35

二个工具:ATCGSNDebug         开机找
               SEDebugger             可开机、关机找,MC60没办法用。6688可行,觉得这个安逸

fef 发表于 2006-3-9 23:31:29

nj528你误会了呵呵

我是说我的那段程序在手机里运行出错

程序的功能是在ram查找数据

61002E: 48 01       :   cmp   r0, #1

出错位置在这里

wwssff 发表于 2006-3-10 09:29:30

你要找的是单字节, 但却用了双字节寄存器啊, 试试movb,compb函数.

fef 发表于 2006-3-10 11:18:22

多谢wwssff兄

单字节我也试过


程序不出错但是感觉直接跳过这个不运行

wwssff帮我看看这样写有什么地方错


movb rl4
movbzr14 rl4 --?零转化 高位补0转双字节
cmp r14 #0

[ 本帖最后由 fef 于 2006-3-10 11:23 编辑 ]

wwssff 发表于 2006-3-10 14:45:14

这儿估计没问题, 前后再拿出来看看.

wwssff 发表于 2006-3-11 11:06:11

610022: E6 F2 0A 1A :   mov   r2, #1A04h
610026: D7 40 58 00 : loc_610026:
610026: D7 40 58 00 :   extp    #58h, #1
61002A: D4 12 02 00 :   mov   r1,
61002E: 48 01       :   cmp    r1, #1
610030: 2D 03       :   jmpr    cc_Z, loc_610038
610032: 08 21       :   add   r2, #1
610034: F0 C1       :   mov   r12, r1
610036: 0D F7       :   jmpr    cc_UC, loc_610026

fef 发表于 2006-3-15 22:53:21

原帖由 wwssff 于 2006-3-11 11:06 发表
610022: E6 F2 0A 1A :   mov   r2, #1A04h
610026: D7 40 58 00 : loc_610026:
610026: D7 40 58 00 :   extp    #58h, #1
61002A: D4 12 02 00 :   mov   r1,
61002E: 48 01       :   cmp   r1, #1 ...

多谢 wwssff 这个是我笔误

原来是R1 #0

待会找找原程序
给你看看

fef 发表于 2006-3-15 23:00:10

611200: 88 10       :   mov   [-r0], r1
611202: 88 C0       :   mov   [-r0], r12
611204: 88 D0       :   mov   [-r0], r13
611206: 88 E0       :   mov   [-r0], r14
611208: E6 F1 00 00 :   mov   r1, #0
61120C: E6 FC 12 00 :   mov   r12, #12h
611210: E6 FD 12 00 :   mov   r13, #12h
611214: D7 40 05 00 : loc_611214:
611214: D7 40 05 00 :   extp    #5, #1
611218: D4 E1 60 33 :   mov   r14,
61121C: 46 FE 00 00 :   cmp   r14, #0
611220: 3D 05       :   jmpr    cc_NZ, loc_61122C
611222: 98 E0       :   mov   r14,
611224: 98 D0       :   mov   r13,
611226: 98 C0       :   mov   r12,
611228: 98 10       :   mov   r1,
61122A: DB 00       :   rets
;------------------------------------------------------------
61122C: 06 FC 12 00 : loc_61122C:
61122C: 06 FC 12 00 :   add   r12, #12h
611230: 06 FD 12 00 :   add   r13, #12h
611234: 06 F1 01 00 :   add   r1, #1
611238: 06 FE BE 01 :   add   r14, #1BEh
61123C: DA 91 44 C0 :   calls   91h, loc_91C044
611240: 0D E9       :   jmpr    cc_UC, loc_611214
;------------------------------------------------------------


出错是91cd00
本来怀疑是
611238: 06 FE BE 01 :   add   r14, #1BEh
61123C: DA 91 44 C0 :   calls   91h, loc_91C044


DA 91 44 C0 是 画图函数
传入参数三个
R12 X
R13y 坐标
R14 图标id

怀疑是传入的R14出的问题,改了改程序发现还是出错

[ 本帖最后由 fef 于 2006-3-16 00:42 编辑 ]

fef 发表于 2006-3-16 00:36:58

611200: 88 10       :   mov   [-r0], r1
611202: 88 C0       :   mov   [-r0], r12
611204: 88 D0       :   mov   [-r0], r13
611206: 88 E0       :   mov   [-r0], r14
611208: E6 F1 00 00 :   mov   r1, #0
61120C: E6 FC 12 00 :   mov   r12, #12h
611210: E6 FD 12 00 :   mov   r13, #12h
611214: D7 40 05 00 : loc_611214:
611214: D7 40 05 00 :   extp    #5, #1
611218: D4 E1 60 33 :   mov   r14,
61121C: 46 FE 00 00 :   cmp   r14, #0
611220: 3D 05       :   jmpr    cc_NZ, loc_61122C
611222: 98 E0       :   mov   r14,
611224: 98 D0       :   mov   r13,
611226: 98 C0       :   mov   r12,
611228: 98 10       :   mov   r1,
61122A: DB 00       :   rets
;------------------------------------------------------------
61122C: 06 FC 12 00 : loc_61122C:
61122C: 06 FC 12 00 :   add   r12, #12h
611230: 06 FD 12 00 :   add   r13, #12h
611234: 06 F1 01 00 :   add   r1, #1
611238: 06 FE BE 01 :   add   r14, #1BEh
61123C: D7 40 05 00 :   extp    #5, #1
611240: C4 E1 80 33 :   mov   , r14
611244: 0D E7       :   jmpr    cc_UC, loc_611214

改成这样,当机提示 611244: 0D E7出错
;------------------------------------------------------------

wwssff 发表于 2006-3-16 08:48:42

你用什么来发现出错地方的?

wwssff 发表于 2006-3-16 09:18:57

原帖由 fef 于 2006-3-15 23:00 发表
611200: 88 10       :   mov   , r1
611202: 88 C0       :   mov   , r12
611204: 88 D0       :   mov   , r13
611206: 88 E0       :   mov   , r14
611208: E6 F1 00 00 :   mov   r1, #0
61 ...
611238: 06 FE BE 01 :   add   r14, #1BEh
这儿可能会让图号加出范围, 另外坐标为零比较好, 不然大尺寸的图显示可能有问题.

ttyy6 发表于 2007-8-23 05:45:35

实现读取固定位置数据的函数了吗?能不能分享一下。

另外你是怎么调试的?



关于写二进制文件到文件管理器的问题

怎样写这个函数呢? 6618最多能存多大的文件?其他图片铃声都删掉

[ 本帖最后由 ttyy6 于 2007-8-23 06:11 编辑 ]
页: [1]
查看完整版本: 怎么用汇编实现在ram里查找数据?