第四章汇编指令系统.ppt
- 文档编号:1351419
- 上传时间:2022-10-21
- 格式:PPT
- 页数:63
- 大小:1,000KB
第四章汇编指令系统.ppt
《第四章汇编指令系统.ppt》由会员分享,可在线阅读,更多相关《第四章汇编指令系统.ppt(63页珍藏版)》请在冰豆网上搜索。
1,2022/10/21,第四章80C51的指令系统,2022/10/21,2,4.1指令系统简介,7种寻址方式111条指令,2022/10/21,3,常用符号,Rn:
工作寄存器中的寄存器R0、R1R7之一,Ri:
工作寄存器中的寄存器R0或R1,#data:
8位立即数,#data16:
16位立即数,direct:
片内RAM或SFR的地址(8位),:
间接寻址寄存器,Bit:
片内RAM或SFR的位地址,addr11:
11位目的地址,addr16:
16位目的地址,2022/10/21,4,rel:
补码形式的8位地址偏移量。
偏移范围为-128127/:
位操作指令中,该位求反后参与操作,不影响该位X:
片内RAM的直接地址或寄存器(X):
相应地址单元中的内容:
箭头左边的内容送入箭头右边的单元内,2022/10/21,5,4.2寻址方式,1立即寻址ImmediateAddressing,操作数就包含在指令代码中,在操作码之后,称为立即数,用“”表示。
如:
MOVP1,#80HMOVR7,#0F5HMOVDPTR,#1245H,操作数存在程序存储器中,2022/10/21,6,2直接寻址DirectAddressing直接使用操作数所在单元的地址找到了操作数,所以称这种方法为直接寻址。
操作数在SFR、内部RAM、位地址空间。
如:
MOVA,00HMOVC,60HMOVA,0F0H,2022/10/21,7,3寄存器寻址RegisterAddressing,对选定的工作寄存器R0R7、累加器A、通用寄存器B、地址寄存器DPTR中的数进行操作。
例:
MOVA,R0功能:
将R0中数据送累加器A中。
问题:
工作寄存器就是内存单元的一部分,如果选择工作寄存器组0,实际R0就是RAM的00H单元,那么“MOVA,00H”和“MOVA,R0”不就没什么区别了吗?
的确,这两条指令都是将00H单元中的内容送A,但执行的过程不同,执行第一条指令需2个机器周期,而第二条则只需1个机器周期,第一条指令变成最终目标码要两个字节(E5H00H),而第二条则只一个字节(E8H)就可以。
2022/10/21,8,4.2.4寄存器间接寻址RegisterIndirectAddressing,把地址放在另外一个寄存器中,根据这个寄存器中的数值决定该到哪个单元中取数据。
R0,R1-8位地址,片内低128字节或片外DPTR-16位,片外64KBMCS-51如:
MOVA,R0MOVXA,R0MOVXA,DPTR,操作数在片内RAM中,操作数在片外RAM中,操作数在片外RAM中,2022/10/21,9,以DPTR或PC为基址寄存器,累加器A为变址寄存器。
把两者内容相加,结果作为操作数的地址。
常用于查表操作。
MCS-51MOVCA,A+DPTR;(A+DPTR)AMOVCA,A+PC;PC+1PC,(A+PC)A,4.2.5变址寻址(基址+变址),Base-Register-plus-Index-Register-IndirectAddressing,操作数在程序存储器中,2022/10/21,10,E0,A,如:
MOVCA,A+DPTR设DPTR=2000H,A=E0H,20E0H,47,指令代码,2022/10/21,11,4.2.6相对寻址,将PC中的当前内容与指令第二字节给出的数相加,结果作为跳转指令的转移地址(转移目的地址)。
PC中的当前内容称为基地址(本指令后的字节地址)指令第二字节给出的数据称为偏移量,1字节带符号数.常用于跳转指令。
如:
JC23H若C=0,不跳转;C=1,跳转.,RelativeAddressing,改变PC,2022/10/21,12,如:
JC23,1025H,23H,1002H,指令代码,当前PC,2022/10/21,13,对片内RAM的位寻址区和某些可位寻址的特殊功能寄存器进行位操作时的寻址方式。
如:
SETB3DH;将27H.5位置1CLRC;Cy位清0,4.2.7位寻址BitAddressing,操作数在片内RAM位地址区或SFR某些位中,2022/10/21,14,小结:
寻址方式涉及的存储器空间,2022/10/21,15,4.3.1数据传送类指令(29条)DataTransferInstruction,MCS-51助记符:
MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP源操作数寻址方式(5种):
立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址。
目的操作数寻址方式(3种):
直接寻址、寄存器寻址、寄存器间接寻址注意:
除了目的操作数为ACC的指令影响奇偶标志P外,一般不影响标志位。
2022/10/21,16,4.3.1数据传送类指令,1、累加器A为目的操作数的指令MOVA,data;dataAMOVA,direct;(direct)AMOVA,Rn;RnAMOVA,Ri;(Ri)A,内部RAM数据传送指令,2022/10/21,17,内部RAM数据传送指令,2、以寄存器Rn为目的操作数的指令MOVRn,#data;dataRnMOVRn,direct;(direct)RnMOVRn,A;ARn,例1A5BH,R110HR220H,R330H,(30H)4FH执行指令:
MOVR1,A;AR1MOVR2,30H;(30H)R2MOVR3,#83H;83HR3执行后:
R15BH,R24FH,R383H。
2022/10/21,18,3、十六位数的传递指令(1条),MOVDPTR,#data168051是一种8位机,这是唯一的一条16位立即数传递指令。
功能:
将一个16位的立即数送入DPTR中去。
其中高8位送入DPH,低8位送入DPL。
例:
MOVDPTR,#1234H执行完了之后DPH中的值为12H,DPL中的值为34H。
如果我们分别向DPH,DPL送数,则结果也一样。
如下面两条指令:
MOVDPH,#35HMOVDPL,#12H。
则就相当于执行了MOVDPTR,#3512H。
2022/10/21,19,累加器A与片外RAM之间的数据传递类指令(4条),MOVXA,RiMOVXRi,AMOVXA,DPTRMOVXDPTR,A说明:
1.在51中,与外部存储器RAM打交道的只可以是A累加器。
所有需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。
在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进行数据的传递,而外部则不行。
2022/10/21,20,2.要读或写外部的RAM,当然也必须要知道RAM的地址,在后两条指令中,地址是被直接放在DPTR中的。
而前两条指令,由于Ri(即R0或R1)只是8位的寄存器,所以只提供低8位地址。
高8位地址由P2口来提供。
3.使用时应先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。
例:
将外部RAM中100H单元中的内容送入外部RAM中200H单元中。
MOVDPTR,#0100HMOVXA,DPTRMOVDPTR,#0200HMOVXDPTR,A,2022/10/21,21,读程序存储器指令(2条),MOVCA,A+DPTRMOVCA,A+PC例:
有一个数在R0中,要求用查表的方法确定它的平方值(此数的取值范围是0-5)MOVDPTR,#100HMOVA,R0MOVCA,A+DPTR.ORG0100HDB0,1,4,9,16,25,如果R0中的值为2,则最终地址为100H+2为102H,到102H单元中找到的是4。
本组指令是将ROM中的数送入A中。
本组指令也被称为查表指令,常用此指令来查一个已做好在ROM中的表格说明:
查找到的结果被放在A中,因此,本条指令执行前后,A中的值不一定相同。
2022/10/21,22,堆栈操作(2条),PUSHdirect;SPSP+1,(SP)(direct)POPdirect;(direct)(SP),SPSP-1第一条为压入指令,就是将direct中的内容送入堆栈中;第二条为弹出指令,就是将堆栈中的内容送回到direct中。
例:
MOVSP,#5FHMOVA,#100MOVB,#20PUSHACCPUSHB,则执行第一条PUSHACC指令是这样的:
将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后,内存60H单元的值就是100,同样,执行PUSHB时,是将SP+1,即变为61H,然后将B中的值送入到61H单元中,即执行完本条指令后,61H单元中的值变为20。
2022/10/21,23,1.给出每条指令执行后的结果,MOV23H,#30HMOV12H,#34HMOVR0,#23HMOVR7,12HMOVR1,#12HMOVA,R0MOV34H,R1MOV45H,34HMOVDPTR,#6712HMOV12H,DPHMOVR0,DPLMOVA,R0,;(23H)=30H;(12H)=34H;R0=23H,;R7=34H;R1=12H;A=30H,;(34H)=34H;(45H)=34H;DPTR=6712H,;(12H)=67H;R0=12H;A=67H,内部RAM,2022/10/21,24,4.3.2算术运算类指令(24条)ArithmeticOperations,主要对8位无符号数;也可用于带符号数运算。
包括:
加、减、乘、除、加1、减1运算指令。
影响PSW有关位。
2022/10/21,25,4.3.2.1加法指令,ADDA,#data;AdataAADDA,direct;A(direct)AADDA,Rn;ARnAADDA,Ri;A(Ri)A用途:
将A中的值与源操作数所指内容相加,最终结果存在A中。
1.不带进位位的加法指令(4条),2022/10/21,26,2.带进位位的加法指令(4条),ADDCA,Rn;ARnCYAADDCA,direct;A(direct)CYAADDCA,Ri;A(Ri)CYAADDCA,#data;AdataCYA用途:
将A中的值和其后面的值以及进位位C中的值相加,最终结果存在A,常用于多字节数运算中。
说明:
由于51单片机是一种8位机,所以只能做8位的数学运算,但8位运算的范围只有0255,这在实际工作中是不够的,因此就要进行扩展,一般是将2个8位(两字节)的数学运算合起来,成为一个16位的运算,这样,可以表达的数的范围就可以达到065535。
2022/10/21,27,例:
先做67H+A0H=107H,而107H显然超过了0FFH,因此最终保存在A中的是07H,而1则到了PSW中的CY位了。
换言之,CY就相当于是100H。
然后再做10H+30H+CY,结果是41H,所以最终的结果是4107H。
1067H+30A0H,0001000001100111,0011000010100000,0100000100000111,1067H,30A0H,4107H,2022/10/21,28,设:
1067H存在R1R0中,30A0H存在R3R2中,计算R1R0+R3R2,结果存在R5R4中。
MOVA,R0ADDA,R2;R0+R2A和CYMOVR4,AMOVA,R1ADDCA,R3;R1+R3+CYA和CYMOVR5,A,2022/10/21,29,又例:
先做67H+20H=87H,没有超过0FFH,因此最终保存在A中的是87H,而PSW中的CY=0。
然后再做10H+30H+CY,结果是40H,所以最终的结果是4087H。
1067H+3020H,2022/10/21,30,DAA在进行BCD码加法运算时,跟在ADD和ADDC指令之后,用于对累加器A中刚进行的两个BCD码的加法的结果进行十进制调整。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 汇编 指令系统