资源描述:
《精通8051程序设计--田玉敏等译--指令集部分》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、精通8051程序设计--田玉敏等译--指令集部分飘风——精通8051程序设计-指令集部分1、nop指令。nop指令仅仅占用一个字节,执行一个指令周期。尽管它等于00h,但在调试应用程序的时候,可以使用原来指令代替错误的指令,而不是擦出和重新编程器件。2、djnz指令可用于计数循环,当计数值不为0时,它将计数值减1并转移。指令:djnzRn,Label执行:Operand<-Operand-1ifOperand!=0PC<-Address例:MCU:8051movR0,8;Loop8xLoop::dj
2、nzR0.Loop;Skip"Label"jump;if--R0==0movR2,#7Loop::djnzR2,Loop;Decrementcounterandjumpifnotzero本例的代码循环7次之后才向下执行。3、条件转移指令cjne。cjne进行一次比较操作并在结果等于0时转移。这些指令可以用来测试用于转移指令的寄存器(累加器或其他的寄存器)是否已设置为0或某个值。cjneA,Operand指令指令:cjneA,#37,Label执行:ifAcc!=OperandPC<-Address例
3、:MCU:8051cjneA,#37,Label;Jumpto"Label"if:;Acc!=37Label:cjneRegister,#Data指令指令:cjneReg,Operand,Label执行:ifReg!=OperandPC<-Address例:MCU:8051cjneR2,#37,Label;Jumpto"Label"if:;R2!=37Label:4、零转移/非零转移指令测试累加器的内容是否为零作为转移条件。这意味着,如果使用这些指令,则在某一操作影响一个值之后,累加器的内容不能改变
4、。指令:jnzLabel执行:JZ:ifAcc==0PC<-AddressJNZ:ifAcc!=0PC<-Address例:MCU:8051jzLabel;Jumpto"Label"ifAcc==0:Label:5、对于8051的间接寻址指令,用一个“i”来表示其索引寄存器(当前工作寄存器的R0或R1)(i=0表示R0,i=1表示R1)。对于寄存器寻址,用“rrr”表示要访问工作寄存器中的哪一个。6、典型的数据传送(或算术运算)指令的格式如下:insParm1,Parm2Parm1是操作结果的目标,
5、也是操作的第1个可选参数。Parm2通常是指令要读取的一个值。这意味着:movA,R0其执行结果为:A=R0,而:addA,R0其执行结果为A=A+R0在8051指令集的“A”表示累加器(位于地址0E0h的ACC)。A寄存器实际上是指令的一部分,不能用其他寄存器来代替。如果指令中只有一个直接地址参数,“ACC”必须隐式指定而不是用“A”来指定(用A作参数会导致汇编代码时产生语法错误)。7、对于4中寻址方式中的每一种,操作数都将被复制到累加器中。在movoperand中,A指令的作用相同。累加器的内容
6、将被复制到操作数中【作为寄存器寻址、或作为8位的直接地址或间接地址寻址】。在不使用累加器作为中间步骤【即,使用两条指令movA,Operand2/movOperand1,A】的情况下,可以使用movOperand1,Operand2传递数据。movC,bit和movbit,C指令是在不影响寄存器中其他位的情况下,存取单个位非常有用的指令。指令:movA,Operand,A执行:Operand<-A例:MCU:8051movA,#123;Put123intothe"R2"movR2,A8、指令:mov
7、Direct,Operand执行:Destination<-Operand例:MCU:8051movB,#123;Put123into"B"9、指令:movRn,Oprnd执行:目标操作数<-原操作数例:movR2,#123;Put123intoR210、指令movC,Bit执行:C<-Bit例:movC,P0.7;MoveP0.7toP2.6movP2.6,C11、如果要查看位模式,则会注意有8位可供寻址。但在论述8051的体系结构时,曾指出位于地址020h到02fh(只需要7位用于寻址)共有12
8、8个通用位。当位地址的位7被置位时(在这些和位指令中),将访问特殊功能寄存器空间中的位。这些位分别在ACC、PSW、B、P0、P1、P2和P3寄存器中。指令:movBit,C执行:位<-C例:movC,P0.7;MoveP0.7toP2.6movP2.6,C12、要获取P1的最低有效位,应使用指令:movC,P1.013、对64K数据空间的变址寻址可以利用mov和movx指令,使用工作组寄存器中的索引寄存器(当前8个字节工作寄存器组中的R0或R1),或者DPTR寄存器