资源预览内容
第1页 / 共56页
第2页 / 共56页
第3页 / 共56页
第4页 / 共56页
第5页 / 共56页
第6页 / 共56页
第7页 / 共56页
第8页 / 共56页
第9页 / 共56页
第10页 / 共56页
亲,该文档总共56页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第4章 MCS-51的指令系统 4.1 指令系统概述 指令和助记符: 指令本身是一组二进制数代码,为了便于记忆,将这些代码 用具有一定含义的指令助记符来表示,助记符一般采用英文 单词的缩写。 指令代码 助记符 功能 740A MOV A,#0AH 将十六进制数0AH 放入累加器A中 指令分类说明: MCS-51的基本指令共111条 按功能分类 (1)数据传送类(28条) (2)算术操作类(24条 (3)逻辑运算类(25条) (4)控制转移类(17条) (5)位操作类(17条) 按指令所占的字节来分 (1) 单字节指令(49条) (2) 双字节指令(45条) (3) 三字节指令(17条) 按指令的执行时间来分 (1) 1个机器周期(64条) (2) 2个机器周期(45条) (3) 乘、除两条指令的执行 时间为4个机器周期 4.2 数据传送类指令 通用格式: MOV , (属“复制”性质,而不是“搬家”) (数据传送类指令不影响标志位:Cy、Ac和OV,影响奇偶标志位P) 1、以累加器为目的操作数的指令 MOV A,Rn ; (Rn)A,n=07 MOV A,Ri ; (Ri)A,i=0,1 MOV A,direct ; (direct)A MOV A,#data ; #dataA 例: MOV A,R6 ;(R6)A,寄存器寻址 MOV A,70H ;(70H)A,直接寻址 MOV A,R0 ;(R0)A,间接寻址 MOV A,#78H ;78HA,立即寻址 2、以Rn为目的操作数的指令 MOV Rn,A ; (A)Rn, n=07 MOV Rn,direct ; (direct)Rn, n=07 MOV Rn,#dat ; #dataRn, n=07 功能:把源操作数的内容送入当前一组工作寄存器区 的R0R7中的某一个寄存器。 3、以直接地址direct为目的操作数的指令 MOV direct,A ;(A)direct MOV direct,Rn ;(Rn)direct, n=07 MOV direct1,direct2 ;direct2direct1 MOV direct,Ri ;(Ri)direct MOVdirect,#data ;#datadirect 功能:把源操作数送入直接地址指出的存储单元。 direct指的是内部RAM或SFR的地址。 4、以寄存器间接地址为目的操作数的指令 MOV Ri,A ;(A)(Ri), i=0,1 MOV Ri,direct ;(direct)(Ri) MOV Ri,#data ;#data(Ri) 功能:把源操作数指定的内容送入以R0或R1中内容 为地址的片内存储单元。 例: MOV R0,A MOV R1,20H MOV R0,#34H 5、16位数传送指令 MOV DPTR,#data16 ; #data16DPTR 唯一的16位数据的传送指令 立即数的高8位送入DPH,立即数的低8位送入DPL。 例:MOV DPTR,#1234H 执行后DPH中的值为12H,DPL中的值为34H。 如果我们分别向DPH,DPL送数,则结果也一样。 如下面两条指令 MOV DPH,#35H MOV DPL,#12H。 相当于执行了 MOV DPTR,#3512H。 6、堆栈操作指令 堆栈区 先进后出 堆栈指针SP (1)进栈指令 PUSH direct 先将栈指针SP加1,然后把direct中的内容 送到栈指针SP指示的内部RAM单元中 例如: 当(SP)=60H,(A)=30H,(B)=70H时 PUSH ACC ;(SP)+1=61HSP,(A)61H PUSH B ;(SP)+1=62HSP,(B)62H 结果:(61H)=30H,(62H)=70H,(SP)=62H (2)出栈指令 POP direct SP指示的单元内容送入direct字节 单元中,栈指针SP减1。 例如: 当 (SP)=62H,(62H)=70H,(61H)=30H时 POP DPH ;(SP)DPH,(SP)-1SP POP DPL ;(SP)DPL,(SP)-1SP 结果:(DPTR)=7030H,(SP)=60H 7、累加器A与外部数据存储器传送指令 MOVX A,DPTR ;(DPTR)A,读外部RAM或I/O MOVX A,Ri ;(Ri)A,读外部RAM或I/O MOVX DPTR,A ;(A)(DPTR),写外部RAM或I/O MOVX Ri,A ;(A)(Ri),写外部RAM或I/O 功能:读外部RAM存储器或I/O中的一个字节,或把A中 一个字节的数据写到外部RAM存储器或I/O中。 注意:/RD或/WR信号有效 采用DPTR间接寻址,高8位地址(DPH)由P2口输出 , 低8位地址(DPL)由P0口输出。 采用Ri(i=0,1)间接寻址,可寻址片外RAM的256个 单元范围。高8位地址为P2口上一次锁存输出,低8 位 地址(Ri)由P0口输出。 8、查表指令 共两条,用于读程序存储器中的数据表格的指令 (1) MOVC A,A+PC 以PC作基址寄存器,A的内容和PC中的内容(下一条 指 令的起始地址)相加后得到一个16位的地址,该地址 指出的程序存储单元的内容送到累加器A。 注意:/PSEN信号有效。 例如: (A)=30H时,执行地址1000H处的指令 1000H: MOVC A,A+PC (本条指令为1字节指令),执行结果将程序存储 器中1031H的内容送入A 表格只能存放在该条查表指令后面的256个单元之内, 表格的大小受到限制,且表格只能被一段程序所利用 。 (2) MOVC A,A+DPTR 以DPTR作为基址寄存器,A的内容和DPTR的内容相加得到 一个16位的地址,把由该地址指出的程序存储器单元的 内 容送到累加器A. 例如:(DPTR)=8100H,(A)=40H,执行指令 MOVC A,A+DPTR 执行结果只和指针DPTR及累加器A的内容有关,与 该指令存放的地址,表格的大小和位置可以在64K 程序存储器中任意安排,一个表格可为各个程序 块 公用。 9、字节交换指令 XCH A,Rn XCH A,direct XCH A,Ri 例如:(A)=80H,(R7)=08H,(40H)=F0H,(R0)=30H,(30H)=OFH 执行下列指令 XCH A,R7 ;(A)与(R7)互换 XCH A,40H ;(A)与(40H)互换 XCH A,R0 ;(A)与(R0)互换 结果 (A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H 10、半字节交换指令 XCHD A,Ri 累加器的低4位与内部RAM低4位交换。 例如: (R0)=60H,(60H)=3EH,(A)=59H 执行 XCHD A,RO 则(A)=5EH,(60H)=39H。 11、累加器A半字节交换指令 SWAP A ;A47 A03 4.3 算术运算类指令 主要用于8位无符号数运算;也可用于带符号数运算。 包括:加、减、乘、除、加1、减1运算指令. 指令操作将影响PSW中有关状态位。 1、加法指令 ADD A,#data ; AdataA ADD A,direct ; A(direct )A ADD A,Rn ; ARnA ADD A,Ri ; A(Ri)A 用途:将A中的值与源操作数所指内容相加,最终 结果存在A中。 (1)不带进位位的加法指令 例1: ADD A,#47H ADD A,34H ADD A,R7 ADD A,R0 例2: MOV A,#0AEH ADD A,#81H 执行完,A中的值为2FH PSW中状态位 C=1,AC=0,OV=1,P=1 对无符号数:结果为12FH; 对带符号数:OV=1,有错。 (2)带进位位的加法指令 ADDC A,Rn; ARnCYA ADDC A,direct; A(direct )CYA ADDC A,Ri ; A(Ri)CYA ADDC A,#data; AdataCYA 用途:将A中的值和操作数的值以及进位位C中的值相 加,结果存在A。常用于多字节数运算中。 例1: 先做67H+A0H=107H,而107H显然超过了0FFH,因此最 终保存在A中的是07H,PSW中的CY=1 。换言之,CY就 相当于是100H。 然后再做10H + 30H + CY,结果是41H,所以最终的 结果是4107H。 1067H + 30A0H 0001 0000 0110 0111 0011 0000 1010 0000 0100 0001 0000 0111 1067H 30A0H 4107H 例2: 先做67H+20H=87H,没有超过0FFH,因此最终保存在A 中的是87H,而PSW中的CY=0。 然后再做10H + 30H + CY,结果是40H,所以最终的结 果是4087H。 1067H + 3020H 0001 0000 0110 0111 0011 0000 0010 0000 0100 0000 1000 0111 1067H 3020H 4087H (3) 加1指令 INC A;A+1A,影响P标志 INC Rn ;Rn+1Rn INC direct;(direct)+1(direct) INC Ri;(Rn)+1(Rn) INC DPTR;DPTR+1DPTR 例:A=12H,R0=33H,(21H)=32H,(34H)=22H,DPTR=1234H。 INC A ; A=13H INC R0 ; R0=34H INC 21H ;(21H)=33H INC R0 ;(34H)=23H INC DPTR ; DPTR=1235H DA A 在进行BCD码加法运算时,跟在ADD和ADDC指令之后, 用来对BCD码加法运算结果进行自动修正。 例:A=00010101 ADD A,#8 ; A=1DH,按二进制规律加 DA A ; A=23H,按十进制规律
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号