330 likes | 450 Views
第 2 章 汇编语言和汇编程序. 2.1 指令的寻址方式. 符号指令的构成. 操作助记符 [ 目的操作数 ] [ 源操作数 ] 操作助记符,也称指令助记符。它以符合形式给出该指令 进行什么操作。 如,数据传送 MOV, 加 ADD, 逻辑与 ANL 。 操作数可以是操作数本身,可以是寄存器,也可以是操作数的地址。 有 0 , 1 , 2 个操作数多种情况 一条带操作数的指令要指明用什么方式寻找操作数,寻找操作数的方式称为 寻址方式 。. 常用符号. Rn: 工作寄存器中的寄存器 R0 、 R1…R7 之一;
E N D
2.1 指令的寻址方式 第二章 汇编语言和汇编程序
符号指令的构成 • 操作助记符 [目的操作数] [源操作数] • 操作助记符,也称指令助记符。它以符合形式给出该指令进行什么操作。如,数据传送MOV,加ADD,逻辑与ANL。 • 操作数可以是操作数本身,可以是寄存器,也可以是操作数的地址。 • 有0,1,2个操作数多种情况 • 一条带操作数的指令要指明用什么方式寻找操作数,寻找操作数的方式称为寻址方式。 第二章 汇编语言和汇编程序
常用符号 Rn: 工作寄存器中的寄存器R0、R1…R7之一; Ri: 工作寄存器中的寄存器R0或R1; #data: 8位立即数; #data16: 16位立即数; direct: 片内RAM或SFR的地址(8位); @: 寄存器间接寻址; Bit: 片内RAM或SFR的位地址; addr11: 11位目的地址; addr16: 16位目的地址; rel: 8位地址偏移量,偏移范围为-128~127; /: 该位求反后参与操作,不影响该位; (X): 地址单元中的内容 →: 箭头左边的内容送入箭头右边的单元内 第二章 汇编语言和汇编程序
2.1.1 立即寻址 指令中直接给出操作数的寻址方式,在操作码之后,称为立即数,用"#"表示。主要作用:赋初值。 如:MOV A, #80H MOV R7, #0F5H MOV DPTR,#1245H MOV PSW,#08H;选择通用寄存器组1(08H-0FH) 操作数存在程序存储器中 第二章 汇编语言和汇编程序
2.1.2 直接寻址 直接使用数所在单元的地址找到了操作数,所以称这种方法为直接寻址。 操作数在SFR、内部RAM、位地址(即操作数据在内部数据存储器或特殊功能寄存器中)空间。 如: MOV A,00H MOV C,20H.0;源操作数是位地址00H. MOV C,24H.0;源操作数是位地址20H. MOV A,0F0H ;B寄存器P24 第二章 汇编语言和汇编程序
2.1.3 寄存器寻址 对选定的工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR中的数进行操作。 例:MOV A,R0;将R0工作寄存器中的数据送到累加器A中去。 第二章 汇编语言和汇编程序
2.1.4 寄存器间接寻址 把地址放在另外一个寄存器中,根据这个寄存器中的数值决定该到哪个单元中取数据。 • R0,R1---8位地址,片内低128字节或片外 • DPTR---16位,片外64KB 如:MOV A,@R0 MOVX A, @R0;对片外RAM进行读操作 MOVX A, @DPTR 操作数在片内RAM中 操作数在片外RAM中 操作数在片外RAM中 第二章 汇编语言和汇编程序
2.1.5 变址寻址 以DPTR或PC为基址寄存器,累加器A为变址寄存器。把两者内容相加,结果作为操作数的地址。常用于查表操作。 MOVC A, @A+DPTR;(A+DPTR)→A MOVC A, @A+PC; PC+1→PC,(A+PC)→A 这是两条查找表指令,用于从程序存储器中读取数据。 第二章 汇编语言和汇编程序
2.2 常用指令 第二章 汇编语言和汇编程序
2.2.1 数据传送与交换类指令 助记符: MOV、MOVX、MOVC XCH、XCHD、SWAP PUSH、POP 源操作数寻址方式(5种): 立即寻址、直接寻址、寄存器寻址、 寄存器间接寻址、变址寻址。 目的操作数寻址方式(3种): 直接寻址、寄存器寻址、寄存器间接寻址 除了目的操作数为ACC的指令影响奇偶标志P外,一般不影响标志位。 第二章 MSC51单片机指令系统
2.2.1 数据传送与交换类指令 • 十六位数的传递指令(1条) MOV DPTR,#data16 8051是一种8位机,这是唯一的一条16位立即数传递指令。功能:将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。 第二章 汇编语言和汇编程序
2.2.1 数据传送与交换类指令 例: MOVDPTR,#1234H 执行完了之后DPH中的值为12H,DPL中的值为34H。 如果我们分别向DPH,DPL送数,则结果也一样。 如下面两条指令: MOVDPH,#12H MOVDPL,#34H。 则就相当于执行了 MOVDPTR,#1234H。 第二章 汇编语言和汇编程序
2.2.2 算数运算类指令 助记符: ADD、ADDC、INC SUBB、DEC、DA 源操作数寻址方式(4种): 立即寻址、直接寻址、寄存器寻址、 寄存器间接寻址。 目的操作数寻址方式(1种): 寄存器(A)寻址 影响PSW有关标志位。(如进位、溢出等等) 第二章 MSC51单片机指令系统
2.2.2 算数运算类指令 • BCD数(十进制)加法调整指令DA (加6调整) 在进行BCD码加法运算时,跟在ADD和ADDC指令之后,用于对累加器A中刚进行的两个BCD码的加法的结果进行十进制调整。 例:A=0001 0101BCD(代表十进制数15) ADD A,#8 ; A=1DH,按二进制规律加 DA A ; A=23H,按十进制规律加 第二章 汇编语言和汇编程序
2.2.3 逻辑运算及移位类指令 助记符: ANL、ORL、XRL、CPL RR、RL、RRC、RLC,CLR 主要用于对2个操作数按位进行逻辑操作或对A进行循环移位操作,将结果送到A或直接寻址单元。 • 主要操作 与、或、异或、移位、取反、清零等。 • 对标志位的影响 除了目的操作数为A的指令影响奇偶标志P,CY外,一般不影响标志位。 第二章 MSC51单片机指令系统
2.2.3 逻辑运算及移位类指令 RR A A.7 A.6 A.5 A.4 A.3 A.2 A.1 A.0 RL A A.7 A.6 A.5 A.4 A.3 A.2 A.1 A.0 RRC A CY A.7 A.6 A.5 A.4 A.3 A.2 A.1 A.0 RLC A CY A.7 A.6 A.5 A.4 A.3 A.2 A.1 A.0 说明:后两条指令,影响P标志和CY。 第二章 汇编语言和汇编程序
2.2.5 控制转移指令 MCS -51 提供了较丰富的控制转移指令, 因此在编程上相当灵活方便。 包括以下类型: • 无条件转移和条件转移 • 相对转移和绝对转移 • 长转移和短转移 • 调用与返回指令 助记符: AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNZ 第二章 MSC51单片机指令系统
2.2.5 控制转移指令 比较不等转移指令 • CJNE A, #data, rel • CJNE A, direct, rel • CJNE Rn, #data, rel • CJNE @Ri, #data, rel • 此类指令的功能是将两个操作数比较,如果两者相等,就顺序执行,如果不相等,就转移。 转移到相对于当前PC值的8位移量的地址去。即: 新的PC值=当前PC+偏移量rel 同样,在编写汇编语言源程序时,可以直接写成: CJNE A,#data,标号;即转移到标号处。 第二章 MSC51单片机指令系统
2.2.5 控制转移指令 比较不等转移指令 利用这些指令,可以判断两数是否相等。 但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能: 如果两数不相等,则CPU还会用CY(进位位)来反映哪个数大,哪个数小。 如果前面的数大,则CY=0,否则CY=1。 因此在程序转移后再次利用CY就可判断出哪个数大,哪个数小了。 第二章 MSC51单片机指令系统
例: • MOV A,R0 • CJNE A,#10H,L1 • MOV R1,#0 • AJMP L3 • L1: JC L2 • MOV R1,#0AAH • AJMP L3 • L2: MOV R1,#0FFH • L3: SJMP L3 2.2.5 控制转移指令 因此最终结果是: 如果R0=10H,则R1=00H; 如果R0>10H,则R1=0AAH; 如果R0<10H,则R1=0FFH。 第二章 MSC51单片机指令系统
2.2.5 控制转移指令 减1不等于零转移指令 DJNZ Rn,rel DJNZ direct,rel 这两条指令把源操作数减 1, 结果回送到源操作数中去, 如果结果不为 0 则转移。 转移到相对于当前PC值的8位移量的地址去。即: 新的PC值=当前PC+偏移量rel 同样,在编写汇编语言源程序时,可以直接写成: DJNZ Rn,标号;即转移到标号处。 第二章 MSC51单片机指令系统
例: • MOV 23H,#0AH • CLR A • LOOP: ADD A,23H • DJNZ 23H,LOOP • SJMP $ 2.2.5 控制转移指令 将23H单元中的数连续相加,存至A中,每加一次, 23H单元中的数值减1,直至减到0,共加(23H)次。 本例中的23H中的数是10,实际就是求: 1+2+……+10=? 第二章 MSC51单片机指令系统
2.3 伪指令 3 第二章 汇编语言和汇编程序
2.3 伪指令 伪指令:对汇编起某种控制作用的特殊命令,但自身并不产生机器码,不属于指令系统,而仅仅为汇编服务的一些指令,因此称为伪指令。 不同汇编程序允许的伪指令并不完全相同,但是一些基本的伪指令在大部分汇编程序中都能使用。51中常用的伪指令分为5大类: • 程序计数与结束伪指令:ORG,END; • 符号定义伪指令:EQU,DB,DW,DS,BIT,SET等; • 附加文件指令:INCLUDE; • 程序清单格式化伪指令:TITLE,PAGE; • 一般控制伪指令:LIST,NOLIST,NOCODE。 第二章 汇编语言和汇编程序
……… 74 40 ……… 2.3 伪指令 • ORG 功能:程序计数伪指令,用于设置由表达式决定的初始地址,ORG也称为起始伪指令。表达式缺省为0。 格式:ORG16位地址 例如: ORG 2000H 74 40 START: MOV A,#40H 2000H 第二章 汇编语言和汇编程序
2.3 伪指令 • END 功能:汇编语言源程序结束的标志,在END以后的所有指令,汇编程序不再处理。一个源程序只有一个END指令,放在所有指令的最后,若没有END指令,编译将报错。 格式:END 例如: END ORG 2000H 74 40 START: MOV A,#40H 编译器不处理 第二章 汇编语言和汇编程序
2.3 伪指令 • EQU 功能:将一个数值或寄存器名赋给一个指定的符号名。 格式:符号名EQU表达式/寄存器名 例如: DELY EQU 3344H ROT EQU 40H MOV DPTR, #DELY MOV DPTR, #3344H MOV ROT, A MOV 40H, A 第二章 汇编语言和汇编程序
2.3 伪指令 • BIT 功能:将一个位地址赋给指定的符号。 格式:符号名BIT位地址 例如: CTRL BIT P0.0 RST BIT 90H (P1.0,详细见教材P24) SETB CTRL SETB RST 第二章 汇编语言和汇编程序
2.4 指令的时序 第二章 汇编语言和汇编程序
2.4.1 指令、机器、状态和振荡周期 如:当单片机外接12MHz晶振时的各种时序单位大小如下: 振荡周期= 状态周期 = 机器周期= 指令周期=(1~4)机器周期=1~4us 第二章 汇编语言和汇编程序