关于比较指令CMP的用法
请问下,汇编里面的指令CMPADTimeCount EQU 0X212
CLR.W &ADTimeCount
CMP.W #65530,&ADTimeCount
JGE aaaaa
结果怎么都是跳到aaaaa?刚刚学用,不知哪位说下
是不是在MSP汇编里面,定义的变量是带符号?如果我把其改为
CMP.W #32767,&ADTimeCount就正常
但如果改为
CMP.W #32768,&ADTimeCount 就都是跳到aaaaa
变量的最高位感觉是个符号位,可是在51,或者AVR里面不是这样的啊 另外发现如果是byte比较,也是,比较的立即数在#127以下还正常,超过就不行, 等待中 回复【楼主位】lbheibai
-----------------------------------------------------------------------
CMP指令是不是不支持16位的立即数寻址啊?
你用软件仿真看看反汇编的是什么指令 仔细看汇编指令,JGE是有符号比较跳转,你可以试试JHS或者其他跳转指令 回复【3楼】20061002838
-----------------------------------------------------------------------
CMP指令是支持16位的立即数寻址的,如我上面的例子:
CMP.W #32767,&ADTimeCount ;即0x7fff
JGE aaaaa
这个是能正常工作的,但改为
CMP.W #32768,&ADTimeCount ;0x8000
JGE aaaaa
就不行
回复【4楼】lcofjpC语言砖家
-----------------------------------------------------------------------
你指的有符号比较,意思是会把比较数的最高位当作是符号位?可否讲解下 可以这么理解,用JGE的时候就把CMP中的数当有符号数处理。啥叫有符号数,就是最高位是符号位。
具体的跳转指令都是根据状态寄存器中的标志位决定的,怎么不仔细的看下user's guide中的指令详解呢?里面讲的清清楚楚,经过CMP后哪个标志位会变化,就决定怎么跳转,其实说有符号无符号都是人的理解,而处理器只认识标志位。 明白了,我本来以为它是跟AVR里面的一样的,没想到这个符号位的问题,谢谢你的解答,我再仔细看下影响到的相关标志位
页:
[1]