3.1 指令系统简介 一、几个概念 二、汇编语言指令格式 三、指令的分类 四、指令的符号说明 主讲:吴政江 下一页
几个概念 指令:要求计算机完成某种特定操作的命令。由操作码和操作数两部分组成。操作码用来规指令完成的具体操作。操作数表示操作的对象,可能是一个具体的数据,也可能是数据的地址。 指令系统:计算机能够执行的所有指令的集合。不同的CPU有不同的指令系统,MCS-51共有111条指令。 程序:为解决某一特定问题而用某一种语言编写的指令的有序集合。 计算机语言:人与计算机进行交流的工具。按其与计算机硬件的接近程度可分为两大类:低级语言,与硬件最接近,即能直接操作硬件。如:机器语言、汇编语言等。高级语言,不能直接操作硬件,必须有操作系统的支持。如:C、QBASIC、PASCAL、FORTRAN语言等等。 机器语言:一种能被机器直接识别和执行的语言,用二进制数“0”和“1”形式表示。它存在于计算机存储器内,直接指挥机器的运行。为了阅读和书写的方便,机器语言常写成十六进制形式。 汇编语言:一种面向机器的程序设计语言,用助记符形式表示,能直接操作硬件,属于低级语言。 汇编语言源程序:用汇编语言编写的程序。不能被机器直接执行,必须由“汇编程序”翻译成机器语言的目标程序。 汇编程序:由计算机公司提供的,用于将汇编语言源程序翻译成目标程序(机器语言)的系统程序。如微机的MASM、ASM等。 下一页 上一页 返回
汇编语言指令格式 上一页 下一页 返回 [标号:]〈操作码助记符〉 [第一操作数] [,第二操作数] [,第三操作数] [;注释] [标号:]〈操作码助记符〉 [第一操作数] [,第二操作数] [,第三操作数] [;注释] 1、标号:表示该指令位置的符号地址,在程序汇编时,它被赋以该指令在ROM中存放的具体地址。它是以英文字母开头的1~6个字母或数字组成的字符串,并以“:”结尾。通常在子程序的入口或转移指令的目标地址处才赋予标号。 2、操作码助记符:由助记符表示的字符串,它规定了指令的功能(如加、减等),是指令的核心部分,不可缺省。 3、操作数:指参加操作的数据或数据的地址,即指令的操作对象。可以是1个、2个或3个也可以没有。操作数之间以“,”分隔,操作码与操作数之间以空格分隔。 4、注释:是对该条指令功能的解释,以便人们交流、阅读、修改和调试程序。注释以“;”开始。它不是程序的功能部分,不影响指令的执行,但最好养成附带注释的习惯。 例: WZJ:MOV 20H,A ;(20H)←A 上一页 下一页 返回
指令的分类 上一页 下一页 返回 1、按指令的长度分 2、按指令的执行时间分(以机器周期计算) 3、按指令的功能分 单字节指令(50条):只占一个字节的存储单元,操作码和操作数同存储在一个字节中。 双字节指令(45条):占有二个字节的存储单元,其中第一字节为操作码,第二字节为操作数或操作数的地址。 三字节指令(16条):占有三个字节的存储单元,操作码占一个单元,操作数占两个单元。操作数既可以是数据,也可以是数据的地址。 2、按指令的执行时间分(以机器周期计算) 单周期指令(64条):执行时需一个机器周期。 双周期指令(45条):执行时需二个机器周期。 四周期指令(乘、除法2条):执行时需四个机器周期。 3、按指令的功能分 数据传送类指令(29条) 算术运算类指令(24条) 逻辑运算类指令(24条) 控制转移类指令(17条) 位操作(布尔操作)类指令(17条) 上一页 下一页 返回
指令的符号说明 1、44种助记符及其意义(基本上是英文单词的缩写) 2、指令描述中的符号及其意义(见教材27页~28页) MOV、MOVC、MOVX、PUSH、POP、XCH、XCHD、ANL、ORL、XRL|SETB、CLR、CPL、RL、RLC、RR、RRC、SWAP、ADD、ADDC、INC、MUL、DIV、DA、AJMP、LJMP、SJMP、JMP、JZ、JNZ、JB、JNB、JBC、CJNE、DJNZ、ACALL、LCALL、RET、RETI、NOP、DEC。 2、指令描述中的符号及其意义(见教材27页~28页) Rn、Ri、@Ri、@DPTR、#DATA、#DATA16、direct、addr16、addr11、rel、bit、A、B、C、/、X、(X)、((X))、← 例:MOV A,@R1;A ←((R1)) 上一页 返回
3.2 寻址方式 寻址方式:取得操作数的方式,即如何找到了操作数。MCS-51共有七种寻址方式。 3.2 寻址方式 寻址方式:取得操作数的方式,即如何找到了操作数。MCS-51共有七种寻址方式。 一、立即寻址:操作码后直接给出操作数(立即数)。采用立即寻址的指令是双字节或三字节指令,第一字节为指令的操作码,第二、三字节是立即数。立即数前必须加“#”标志。例:MOV A,#40H;将立即数40H送至A中 MOV DPTR,#3456H;DPTR←3456H 00110100 01010110 片内SFR 01000000 片内SFR DPH 高位立即数34H A DPL 低位立即数56H 立即数40H
直接寻址与寄存器寻址 二、直接寻址:在操作码后面直接给出操作数所在单元的地址。采用直接寻址的指令一般是双字节或三字节,第一字节为操作码,第二、三字节为操作数的地址码。这种寻址方式可进行内数据存储器的访问。 1、访问SFR,指令中direct以单元地址或寄存储器符号形式表示 。 例:MOV A,81H;两条指令的功能完全相同,SP的地址为81H MOV A,SP 2、访问内部RAM的低128B,指令中direct以单元地址形式表示。 例:MOV A,35H;A←(35H),设35H单元的内容为55H,则指令 执行后A的内容为55H 三、寄存器寻址:操作数存放在某一寄存器中,指令中指出相应的寄存器。即寄存器的内容就是操作数。可用于访问选定的工作寄存器R0~R7,累加器A,寄存器B和位累加器C中的数。 例:MOV R0,#55H;将数据55H送至A中 MOV A,R0
四、寄存器间接寻址 用寄存器的内容作为操作数的地址,该地址对应的单元的内容才是操作数。用符号@作为间址标志。用于访问片内RAM或片外RAM。 1、当访问片内RAM或片外RAM的低256B空间时,可用R0或R1作为间址寄存器。 例:MOV R0,#25H MOV A,@R0 设25H单元的内容为73H,则执行结果:以R0的内容25H为地址,把25H地址单元的内容73H送到累加器A中,A的内容为73H。 2、当访问片外RAM时,用DPTR作间址寄存器。由于DPTR是16位寄存器,所以它可访问片外RAM整个64KB的地址空间。 例:MOV DPTR,#2345H;将片外RAM2345H单元中的内容送入A中 MOV A,@DPTR 3、堆栈指令PUSH、POP也可算寄存器间接寻址,其间址寄存器为SP。即以SP的内容为地址,把该地址单元中的内容压入堆栈或弹出到目标地址。
五、基址加变址寻址 以DPTR或PC为基址寄存器,以A作为变址寄存器,两者内容之和为操作数的地址。MCS-51中有两条基址加变址寻址指令,用于访问固化在ROM中的常数,称为查表指令。 1、以PC作基地址加变址形成操作数地址(@A+PC )指令 MOVC A,@A+PC 2、以DPTR作基地址,A作变址,由@A+DPTR形成操作数地址指令 MOVC A,@A+DDPTR 例:MOV DPTR,#0300H;DPTR←0300H MOV A,#02H ;A←02H MOVC A,@A+DPTR;A←(0300H+02H) 将ROM中0302H单元的数(设为55H)取出送A中。
六、相对寻址 以PC作为基址寄存器,将其当前值(执行完转移指令后的PC值)与指令中给出的偏移量(rel)相加,所得的和即为转移的目标地址。即目标地址=转移指令地址+转移指令字节数+偏移量rel=PC当前值+偏移量rel。rel为补码表示的8位带符号数,其值为-128~+127,故转移的范围为PC-128~PC+127。 在MCS-51中有两类转移指令:二、三字节。在计算PC当前值 时要注意指令的字节数。(除非手工汇编,编程时只要在目标地址处打上标号即可,然后由汇编程序自动计算) 例:SJMP 08H;指令代码为双字节,即80 08H 现设PC=2000H为本指令地址,则转移目标地址=(2000H+2)+08H=200AH 将偏量08H送入A,再与PC当前值 2002H相加,结果就是目的地址。
七、位寻址 位寻址是指对片内RAM的位寻址区(20H~2FH)和可位寻址的SFR进行位操作时的寻址方式。 在进行位操作时,借助于进位C作为位累加器,操作数直接给出该位的地址或位名称,然后再根据操作的性质进行操作。注意:位寻址的位地址与直接寻址的字节地址形式完全一样,主要由指令码来区分,应注意区分。 例:MOV C,20H;C←(20H),20H是位寻址的位地址 MOV A,20H;A←(20H),20H是直接寻址的字节地址 SETB RS0 ;(RS0)←1 位地址的表示方法: 1、直接地址形式。如:MOV C,35H;Cy←(35H) MOV C,20H; Cy←(20H) 2、位名称表示法。如:MOV C,RS1;Cy←(RS1) RS0、RS1、Cy、Ac、F0、F1、P、Ov等等。 3、加位表示法。 如:MOV C,Acc.5;Cy←( Acc.5) P0.0~P0.7、P1.0~P1.7、25H.4、 Acc.0~ Acc.7等等。