nj528 发表于 2005-8-13 00:00:00

请教两个命令的用法

ROM:0048               extp    #42h, #1 ; 'B'         
ROM:004C               mov   r2, 3EFCh ;
extp # A,#1
mov rB,C
请教以上两个命令的用法
A 与 C 是什么关系呢?

llhn 发表于 2005-8-13 00:01:00

以下是引用nj528在2004-12-20 19:07:00的发言:

ROM:0048               extp    #42h, #1 ; 'B'         
ROM:004C               mov   r2, 3EFCh ;
extp # A,#1
mov rB,C
请教以上两个命令的用法
A 与 C 是什么关系呢?

若address = 0x10BEFC
pof(address) = 3EFCh, pag(address) = 10*4+2 = 42h
extp pag(address), #1;当前操作页临时改为pag(address),作用范围:以下的一条语句。
mov r12, pof(address);将pag(address)页中,偏移量为pof(address)地址中的数据放到r12中;也就是将0x10BEFC中的数据考到r12中。
具体可以看c166/167得指令集手册。

nj528 发表于 2005-8-13 00:02:00

能提供一个中文的手册吗?我找不到

dingol 发表于 2005-8-13 00:03:00

这个东西开始也搞得我头挺大,不过现在总算有点了解了。
其实一般就是提取数据用的。比如有时候需要在补丁里面用到年、月、日这些数据,这个时候用的就是EXTP指令,如下:
extp #0dh,#1
mov r12,25dch
上面这句的作用就是到d:25dc这个地址取得数据存到r12里面。(当然这里要注意数据和代码的寻址区别,狼大的入门教材里面说得很清楚,我就不多说了。)中文的教材不好找,我一直看英文版,其实我觉得不一定要看汇编指令手册,你看一下狼大的“更改网络服务商为星期”这个补丁的原代码吧,很有用。
[此贴子已经被作者于2004-12-30 17:29:32编辑过]

xhjjxm 发表于 2005-8-13 00:04:00

以下是引用nj528在2004-12-20 19:07:00的发言:

ROM:0048               extp    #42h, #1 ; 'B'         
ROM:004C               mov   r2, 3EFCh ;
extp # A,#1
mov rB,C
请教以上两个命令的用法
A 与 C 是什么关系呢?
Flash中的地址为:(42*3FFF + 3EFC)
如果你想取一FLASH地址中的数据,则EXTP 后的第一个数为 FLASH地址 除 3FFF 后所得的商,
余数为 MOV 指令后的第二个数!

nj528 发表于 2005-8-13 00:05:00

pag(address) :pof(address)是怎样算的呢,PAG*3FF + POF 这个好像不是很准确
页: [1]
查看完整版本: 请教两个命令的用法