|
发表于 2008-7-26 03:18:44
|
显示全部楼层
就是这样的。下面是在AVR STUDIO中指令CP R17,R18的机器码:
1712 CP R17,R18 Compare
前面的1712是机器码(十六进制数)0001 0111 0001 0010
因为r17寄存器的地址是10001(Rd),而r18的地址是10010(Rr),CP指令的操作码是0001 01(OP)。
因此按0001 01rd dddd rrrr格式为:
000101 1 10001 0010
000101 r ddddd rrrr
不过从你写的“难道将R17中的17对应的二进制代码10001插到R17中的17的二进制代码10001第一位和第二位之间?”感到你概念上可能还不清楚。
指令中的rrrrr,ddddd表示的是寄存器的地址(不是寄存器中的数),所以10001是r17寄存器的地址(不是r17寄存器里存放的数)。
指令000101 r ddddd rrrr表示将地址为ddddd的寄存器中的数与地址为rrrrr的寄存器中的数做比较。当CPU执行这条指令时,就会从地址为ddddd和rrrrr的两个寄存器中的数取出来进行比较,然后根据比较的结果设定相应的标志位。
换句话讲,不管r17和r18两个寄存器中存放的是什么数,汇编指令“CP R17,R18”的机器码永远是“0001 0111 0001 0010”
在AVR中,工作寄存器组一共有32个8位寄存器,r0-r31,对应的地址00000-11111(二进制),因此rrrrr,ddddd都只要5位,就可以代表任何32个寄存器中的一个了。
是否是你这里的概念不清楚? |
|