您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 模板/表格 > 51单片机汇编345
第三章指令系统及程序设计第一节MCS-51指令系统第三节指令系统第四节汇编语言程序概述第五节汇编语言程序设计第二节寻址方式返回总目录第一节MCS-51指令系统一.指令数量指令系统111条指令单字节指令49条双字节指令45条三字节指令17条单周期指令64条双周期指令45条四周期指令2条按字节分按速度分二.指令结构:操作码[操作数];[注解]格式:操作码:是由助记符表示的字符串,规定了指令的操作功能操作数:是参加操作的数据或数据的地址。MOVA,#23H操作源操作数两字节一个机器周期例:注:目标操作数码1.操作数可以是1、2、3个,也可以没有。2.操作码与操作数之间必须用空格分隔,操作数与操作数之间必须用逗号“,”分开。一.符号注释1.Rn当前选中的工作寄存器组R0~R72.Ri当前选中的工作寄存器组中可作为地址指针的两个工作寄存器R0和R13.#data8位立即数4.#data1616位立即数5.direct片内RAM单元(包括SFR)的直接地址第二节寻址方式二.寻址方式1.立即寻址在这种寻址方式中,指令多是双字节。一般第一个字节位为操作码,第二个字节为操作数。该操作数直接参与操作,所以又称立即数,用“#”表示。立即数是存放在程序存储器中的常数例1指令助记符:MOVA,#3AH程序存储器2000H2001H0111010000111010操作码立即数ACC00111010例2指令助记符:MOVDPTR,#3FA6H该指令为三字节,两机器周期的传输指令指令代码为:90H、3FH、A6H程序存储器1000H1001H1001000000111111操作码片内RAM区001110101002H1010011000111010立即数高位立即数低位DPHDPL2.直接寻址在这种寻址方式中,操作数项给出的是参加运算的操作数的地址。在AT89S51单片机中,直接地址只能用来表示特殊功能寄存器、内部数据存储器及位地址空间。例3指令助记符:MOVA,3AH该指令为两字节,单机器周期的传输指令指令代码为:E5H、3AH程序存储器1000H1001HE53A片内RAM区103A10ACC3.寄存器寻址寄存器寻址是对选定的工作寄存器R0~R7、A、B、DPTR和进位CY中的数进行操作。工作寄存器组的选择由状态标志寄存器PSW中的RS1和RS0来确定(00)。例4指令助记符:MOVA,R2该指令为单字节,单机器周期的传输指令指令代码为:EAH即,11101010程序存储器2020HEA片内RAM区4AACC4A02H4.寄存器间接寻址寄存器(R0或R1)中的内容为地址。这种寻址的方式用于访问片内数据存储器或片外数据存储器。例5指令助记符:MOVA,@R0该指令为单字节,单机器周期的传输指令指令代码为:E6H即,11100110程序存储器2020HE6片内RAM区5000H片内RAM区4AACC4A50H(R0)例6指令助记符:MOVXA,@R1该指令为单字节,双机器周期的传输指令指令代码为:E3H即,11100011程序存储器2020HE3片内RAM区5000H片外RAM区30ACC3050H(R0)007F80FFRAMSFR0FFF00004KBROMEA80C51片内存储器=1EA=0())(00000FFF1000FFFF64KROM0000FFFF64KRAM片外扩展存储器5.变址寻址这种寻址方式以DPTR或PC为基址寄存器,A为变址寄存器两寄存器的内容相加之和作为操作数的地址。例7指令助记符:MOVCA,@A+DPTR该指令为单字节,双机器周期的传输指令指令代码为:93H即,10010011程序存储器2040H9320E0H66AE02000DPHDPLALU6.位寻址位寻址是指对片内RAM的位寻址区和某些可进行位寻址的特殊功能寄存器种的任一二进制位操作时的寻址方式。例8指令助记符:SETB00H该指令为双字节,单机器周期的传输指令指令代码为:D2H、93H第三节指令系统指令系统传输指令算术运算指令逻辑运算指令转移控制指令位操作指令难点外部传输指令加减法中溢出含义标志的转移控制指令一.数据传送指令(一)内部RAM数据传送指令1.累加器为目的操作数的指令MOVA,RnMOVA,directMOVA,@RiMOVA,#dataMOVR1,#60HMOVA,@R160HBA2.以寄存器Rn为目的操作数的指令MOVRn,AMOVRn,directMOVRn,#data例1:A=5BH,R1=10H,R2=20H,R3=30H,(30H)=4FH求:执行以下指令后R1,R2,R3中的内容MOVR1,AMOVR2,30HMOVR3,#83HR1=5BHR2=4FHR3=83H3.以直接地址为目的操作数的指令MOVdirect,AMOVdirect,RnMOVdirect,directMOVdirect,@RiMOVdirect,#dataMOV66H,AMOV67H,R6MOV66H,67HMOV68H,@R1MOV69H,A已知:A=33H,R6=35H,R1=40H,40H5A片内RAM求:66H67H68H69H片内RAM33H35H40H5AH35H4.以间接地址为目的操作数的指令MOV@Ri,AMOV@Ri,directMOV@Ri,#dataMOV@R1,AMOV@R1,66HMOV@R1,#5BHMOVR1,#33HMOVA,#33HMOV66H,#7AHR1:A:66H:33H:33H:33H:33H33H7AH33H7AH5BH5.16位数据传送指令MOVDPTR,#data16例:MOVDPTR,#1234HDPHDPL12H34H(二)外部数据传送指令MOVXA,@DPTRMOVX@DPTR,AMOVX@Ri,AMOVXA,@Ri十六位寻址八位寻址读写③MOVX@DPTR,A①MOVDPTR,#1234HP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7XTAL1XTAL2存储器P2.0/AD8P2.1/AD9P2.2/AD10P2.4/AD12P2.5/AD13P2.6/AD14XTAL1XTAL2存储器P2.3/AD11P2.7/AD15DPTRACC任务:将66H存入片外数据存储器地址为1234H的单元1234HBA1234H66H00010010001101000001001000110100②MOVA,#66H任务:将66H存入片外数据存储器地址为0033H的单元③MOVX@DPTR,A①MOVDPTR,#0033HP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7XTAL1XTAL2存储器P2.0/AD8P2.1/AD9P2.2/AD10P2.4/AD12P2.5/AD13P2.6/AD14XTAL1XTAL2存储器P2.3/AD11P2.7/AD15DPTRACCBA0033H66H②MOVA,#66H1234H0033H0000000000110011方法一P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7XTAL1XTAL2存储器P2.0/AD8P2.1/AD9P2.2/AD10P2.4/AD12P2.5/AD13P2.6/AD14XTAL1XTAL2存储器P2.3/AD11P2.7/AD15ACCR1BA0033H66H③MOVX@R1,A①MOVR1,#33H②MOVA,#66H1234H0033H0000000000110011WRWR0方法二例:把外部数据存储器2040H单元中的数据取出,传送到2230H单元中去。MOVDPTR,#2040HMOVXA,@DPTRMOVDPTR,#2030HMOVX@DPTR,A(三)查表指令MOVCA,@A+PCMOVCA,@A+DPTR例:在程序存贮器中数据表格为:1010H:1011H:1012H:1013H:02H04H06H08H求:执行以下程序后A、R0、PC中的值。MOVA,#0DHMOVCA,@A+PCMOVR0,A1000H:1002H:1003H:双字节单字节单字节A=02H,R0=02H,PC=1004H读PSEN例:在程序存贮器中数据表格为:7010H:7011H:7012H:7013H:02H04H06H08H求:执行以下程序后A、PC中的值。MOVA,#10HMOVDPTR,#7000HMOVCA,@A+DPTR1004H:1006H:1009H:双字节三字节单字节A=02H,PC=100AH(四)堆栈操作指令PUSHdirectPOPdirect入栈指令出栈指令SPP0DPHDPLTCONPCONTL0TMOD80H81H82H83H87H88H89H8AH8BH8CH8DHFFHTL1TH0TH1P1SCONSBUFP2IEP3IPPSWACCB90H98H99HA0HA8HB0HB8HD0HE0HF0H专用寄存器区SFRR7R0第0组工作寄存器区第1组工作寄存器区第2组工作寄存器区第3组工作寄存器区R7R0R7R0R7R000H07H08H0FH10H17H18H1FH20H2FH30H7FH位寻址区位地址00H~7FH用户RAM区SP:堆栈指针,八位特殊功能寄存器,不能位寻址。SPSPORG1000HMOVA,#03HMOVR0,#06HMOVSP,#30HPUSHAPUSHR0LJMPL1MOVA,#33HMOVR0,#66HL1:POPAPOPR01.使用堆栈时,一般要重新设定SP的初始值。压入堆栈的第一个数必须SP+1所指出的单元。2.堆栈的特性是“后进先出”SP33H32H31H30H内部RAMSPSPAR003H06H练习:MOVSP,#30HPUSH50HPOP40H50H31H30HAA40H31H30HAAAAAA(四)交换指令XCHA,RnXCHA,directXCHA,@RiXCHDA,@RiSWAPAA::direct16A7A6A5A4A3A2A1A0A:A:A7A6A5A4A3A2A1A032A7A6A5A4D7D6D5D4A3A2A1A0D3D2D1D0A:@Ri:D3D2D1D0A3A2A1A0(六)传送指令小结007F80FFRAMSFR0FFF00004KBROMEA80C51片内存储器=1EA=0())(00000FFF1000FFFF64KROM0000FFFF64KRAM片外扩展存储器数据传送实质上是数据在存储器各单元之间得流动,但必须遵守一定得规则。MOVA,RnMOVA,directMOVA,@RiMOVA,#dataMOVRn,AMOVRn,directMOVRn,#dataMOVdirect,AMOVdirect,RnMOVdirect,directMOVdirect,@RiMOVdirect,#dataMOV@Ri,AMOV@Ri,directMOV@Ri,#dataMOVX@Ri,AMOVXA,@DPTRMOVX@DPTR,AMOVXA,@RiMOVCA,@A+PCMOVCA,@A+DPTRPUSHdirectPOPdirectXCHA,RnXCHA,directXCHA,@RiXCHDA,@RiSWAPA1.正确格式2.错误格式MOVR1,R2改正MOVA,R2MOVR1,AMOVR1,@R0改正MOVA,@R0MOVR1,AMOV@R1,R2改正MOVA,R2MOV@R1,AMOVA,1234H改正MOVDPTR,#1234HMOVXA,@DPTRXCHR1,R2改正MOVA,R1XCHA,R2MOVR1,A交换指令的目的操作数必须是累加器ACC3.例题(课堂练习10分钟)(1)把累加器中的数传送到外部数据存储器3040H单元中去(2)把片内6AH单元中的数取出,传送到外部数据存储单元3000H单元中去。(3)试说明下述程序中每一条
本文标题:51单片机汇编345
链接地址:https://www.777doc.com/doc-3826485 .html