lzuzyy 发表于 2005-8-10 00:00:00

[求助]大家帮忙看一下

以下是待机是处理按键的一部分
D5000:E8F4               mov   [-r0], r9
D5000:E8F6               mov   [-r0], r8
D5000:E8F8               mov   [-r0], r6
D5000:E8FA               mov   r6, #0FFFFh
D5000:E8FE               mov   r8, r14
D5000:E900               mov   r9, r15

D5000:E902               calls   0A3h, sub_A37780      //取得键盘锁闭状态
D5000:E906               mov   r15, r9
D5000:E908               mov   r14, r8
D5000:E90A               cmp   r4, #0                     //判断键盘是否锁闭
D5000:E90C               jmpa    cc_Z, loc_D5ED5E

由于本人的对汇编几乎一无所知,大家帮忙看看在“取得状态”和“判断状态”中间的两行是干什么用的?谢谢!

XP3200+ 发表于 2005-8-10 00:01:00

我是这样理解的,不知对不对
r14,r15是两个重要的寄存器,在子程序中可能会被修改,所以需要保存现场

D5000:E8FE               mov   r8, r14         //调用子程序前保存现场
D5000:E900               mov   r9, r15

D5000:E902               calls   0A3h, sub_A37780      //取得键盘锁闭状态
D5000:E906               mov   r15, r9       //子程序返回后恢复现场
D5000:E908               mov   r14, r8

lzuzyy 发表于 2005-8-10 00:02:00

谢谢!

coollang 发表于 2005-8-10 00:03:00

差不多,我在进阶里写过。R12,R13,R14,R15在调用函数时是用来传递参数的(调用次序是_cdecl,从右到左参数压栈,不同的是最左面是用这几个寄存器来传递的),默认在子函数里不会被保护,所以可能会被修改,需要在主函数里保护!

页: [1]
查看完整版本: [求助]大家帮忙看一下