怎么用汇编实现在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 编辑 ] 介个.....8懂呀。帮顶啦 每人回答
郁闷啊
多谢四点半 二个工具:ATCGSNDebug 开机找
SEDebugger 可开机、关机找,MC60没办法用。6688可行,觉得这个安逸 nj528你误会了呵呵
我是说我的那段程序在手机里运行出错
程序的功能是在ram查找数据
61002E: 48 01 : cmp r0, #1
出错位置在这里 你要找的是单字节, 但却用了双字节寄存器啊, 试试movb,compb函数. 多谢wwssff兄
单字节我也试过
程序不出错但是感觉直接跳过这个不运行
wwssff帮我看看这样写有什么地方错
movb rl4
movbzr14 rl4 --?零转化 高位补0转双字节
cmp r14 #0
[ 本帖最后由 fef 于 2006-3-10 11:23 编辑 ] 这儿估计没问题, 前后再拿出来看看. 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 原帖由 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
待会找找原程序
给你看看 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 编辑 ] 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出错
;------------------------------------------------------------ 你用什么来发现出错地方的? 原帖由 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
这儿可能会让图号加出范围, 另外坐标为零比较好, 不然大尺寸的图显示可能有问题. 实现读取固定位置数据的函数了吗?能不能分享一下。
另外你是怎么调试的?
关于写二进制文件到文件管理器的问题
怎样写这个函数呢? 6618最多能存多大的文件?其他图片铃声都删掉
[ 本帖最后由 ttyy6 于 2007-8-23 06:11 编辑 ]
页:
[1]