1 / 33

第 2 章 汇编语言和汇编程序

第 2 章 汇编语言和汇编程序. 2.1 指令的寻址方式. 符号指令的构成. 操作助记符 [ 目的操作数 ] [ 源操作数 ] 操作助记符,也称指令助记符。它以符合形式给出该指令 进行什么操作。 如,数据传送 MOV, 加 ADD, 逻辑与 ANL 。 操作数可以是操作数本身,可以是寄存器,也可以是操作数的地址。 有 0 , 1 , 2 个操作数多种情况 一条带操作数的指令要指明用什么方式寻找操作数,寻找操作数的方式称为 寻址方式 。. 常用符号. Rn: 工作寄存器中的寄存器 R0 、 R1…R7 之一;

Télécharger la présentation

第 2 章 汇编语言和汇编程序

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第2章 汇编语言和汇编程序

  2. 2.1 指令的寻址方式 第二章 汇编语言和汇编程序

  3. 符号指令的构成 • 操作助记符 [目的操作数] [源操作数] • 操作助记符,也称指令助记符。它以符合形式给出该指令进行什么操作。如,数据传送MOV,加ADD,逻辑与ANL。 • 操作数可以是操作数本身,可以是寄存器,也可以是操作数的地址。 • 有0,1,2个操作数多种情况 • 一条带操作数的指令要指明用什么方式寻找操作数,寻找操作数的方式称为寻址方式。 第二章 汇编语言和汇编程序

  4. 常用符号 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): 地址单元中的内容 →: 箭头左边的内容送入箭头右边的单元内 第二章 汇编语言和汇编程序

  5. 2.1.1 立即寻址 指令中直接给出操作数的寻址方式,在操作码之后,称为立即数,用"#"表示。主要作用:赋初值。 如:MOV A, #80H MOV R7, #0F5H MOV DPTR,#1245H MOV PSW,#08H;选择通用寄存器组1(08H-0FH) 操作数存在程序存储器中 第二章 汇编语言和汇编程序

  6. 2.1.2 直接寻址 直接使用数所在单元的地址找到了操作数,所以称这种方法为直接寻址。 操作数在SFR、内部RAM、位地址(即操作数据在内部数据存储器或特殊功能寄存器中)空间。 如: MOV A,00H MOV C,20H.0;源操作数是位地址00H. MOV C,24H.0;源操作数是位地址20H. MOV A,0F0H ;B寄存器P24 第二章 汇编语言和汇编程序

  7. 2.1.3 寄存器寻址 对选定的工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR中的数进行操作。 例:MOV A,R0;将R0工作寄存器中的数据送到累加器A中去。 第二章 汇编语言和汇编程序

  8. 2.1.4 寄存器间接寻址 把地址放在另外一个寄存器中,根据这个寄存器中的数值决定该到哪个单元中取数据。 • R0,R1---8位地址,片内低128字节或片外 • DPTR---16位,片外64KB 如:MOV A,@R0 MOVX A, @R0;对片外RAM进行读操作 MOVX A, @DPTR 操作数在片内RAM中 操作数在片外RAM中 操作数在片外RAM中 第二章 汇编语言和汇编程序

  9. 2.1.5 变址寻址 以DPTR或PC为基址寄存器,累加器A为变址寄存器。把两者内容相加,结果作为操作数的地址。常用于查表操作。 MOVC A, @A+DPTR;(A+DPTR)→A MOVC A, @A+PC; PC+1→PC,(A+PC)→A 这是两条查找表指令,用于从程序存储器中读取数据。 第二章 汇编语言和汇编程序

  10. 2.2 常用指令 第二章 汇编语言和汇编程序

  11. 2.2.1 数据传送与交换类指令 助记符: MOV、MOVX、MOVC XCH、XCHD、SWAP PUSH、POP 源操作数寻址方式(5种): 立即寻址、直接寻址、寄存器寻址、 寄存器间接寻址、变址寻址。 目的操作数寻址方式(3种): 直接寻址、寄存器寻址、寄存器间接寻址 除了目的操作数为ACC的指令影响奇偶标志P外,一般不影响标志位。 第二章 MSC51单片机指令系统

  12. 2.2.1 数据传送与交换类指令 • 十六位数的传递指令(1条) MOV DPTR,#data16 8051是一种8位机,这是唯一的一条16位立即数传递指令。功能:将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。 第二章 汇编语言和汇编程序

  13. 2.2.1 数据传送与交换类指令 例: MOVDPTR,#1234H 执行完了之后DPH中的值为12H,DPL中的值为34H。 如果我们分别向DPH,DPL送数,则结果也一样。 如下面两条指令: MOVDPH,#12H MOVDPL,#34H。 则就相当于执行了 MOVDPTR,#1234H。 第二章 汇编语言和汇编程序

  14. 2.2.2 算数运算类指令 助记符: ADD、ADDC、INC SUBB、DEC、DA 源操作数寻址方式(4种): 立即寻址、直接寻址、寄存器寻址、 寄存器间接寻址。 目的操作数寻址方式(1种): 寄存器(A)寻址 影响PSW有关标志位。(如进位、溢出等等) 第二章 MSC51单片机指令系统

  15. 2.2.2 算数运算类指令 • BCD数(十进制)加法调整指令DA (加6调整) 在进行BCD码加法运算时,跟在ADD和ADDC指令之后,用于对累加器A中刚进行的两个BCD码的加法的结果进行十进制调整。 例:A=0001 0101BCD(代表十进制数15) ADD A,#8 ; A=1DH,按二进制规律加 DA A ; A=23H,按十进制规律加 第二章 汇编语言和汇编程序

  16. 2.2.3 逻辑运算及移位类指令 助记符: ANL、ORL、XRL、CPL RR、RL、RRC、RLC,CLR 主要用于对2个操作数按位进行逻辑操作或对A进行循环移位操作,将结果送到A或直接寻址单元。 • 主要操作 与、或、异或、移位、取反、清零等。 • 对标志位的影响 除了目的操作数为A的指令影响奇偶标志P,CY外,一般不影响标志位。 第二章 MSC51单片机指令系统

  17. 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。 第二章 汇编语言和汇编程序

  18. 2.2.5 控制转移指令 MCS -51 提供了较丰富的控制转移指令, 因此在编程上相当灵活方便。 包括以下类型: • 无条件转移和条件转移 • 相对转移和绝对转移 • 长转移和短转移 • 调用与返回指令 助记符: AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNZ 第二章 MSC51单片机指令系统

  19. 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单片机指令系统

  20. 2.2.5 控制转移指令 比较不等转移指令 利用这些指令,可以判断两数是否相等。 但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能: 如果两数不相等,则CPU还会用CY(进位位)来反映哪个数大,哪个数小。 如果前面的数大,则CY=0,否则CY=1。 因此在程序转移后再次利用CY就可判断出哪个数大,哪个数小了。 第二章 MSC51单片机指令系统

  21. 例: • 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单片机指令系统

  22. 2.2.5 控制转移指令 减1不等于零转移指令 DJNZ Rn,rel DJNZ direct,rel 这两条指令把源操作数减 1, 结果回送到源操作数中去, 如果结果不为 0 则转移。 转移到相对于当前PC值的8位移量的地址去。即: 新的PC值=当前PC+偏移量rel 同样,在编写汇编语言源程序时,可以直接写成: DJNZ Rn,标号;即转移到标号处。 第二章 MSC51单片机指令系统

  23. 例: • 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单片机指令系统

  24. 2.3 伪指令 3 第二章 汇编语言和汇编程序

  25. 2.3 伪指令 伪指令:对汇编起某种控制作用的特殊命令,但自身并不产生机器码,不属于指令系统,而仅仅为汇编服务的一些指令,因此称为伪指令。 不同汇编程序允许的伪指令并不完全相同,但是一些基本的伪指令在大部分汇编程序中都能使用。51中常用的伪指令分为5大类: • 程序计数与结束伪指令:ORG,END; • 符号定义伪指令:EQU,DB,DW,DS,BIT,SET等; • 附加文件指令:INCLUDE; • 程序清单格式化伪指令:TITLE,PAGE; • 一般控制伪指令:LIST,NOLIST,NOCODE。 第二章 汇编语言和汇编程序

  26. ……… 74 40 ……… 2.3 伪指令 • ORG 功能:程序计数伪指令,用于设置由表达式决定的初始地址,ORG也称为起始伪指令。表达式缺省为0。 格式:ORG16位地址 例如: ORG 2000H 74 40 START: MOV A,#40H 2000H 第二章 汇编语言和汇编程序

  27. 2.3 伪指令 • END 功能:汇编语言源程序结束的标志,在END以后的所有指令,汇编程序不再处理。一个源程序只有一个END指令,放在所有指令的最后,若没有END指令,编译将报错。 格式:END 例如: END ORG 2000H 74 40 START: MOV A,#40H 编译器不处理 第二章 汇编语言和汇编程序

  28. 2.3 伪指令 • EQU 功能:将一个数值或寄存器名赋给一个指定的符号名。 格式:符号名EQU表达式/寄存器名 例如: DELY EQU 3344H ROT EQU 40H MOV DPTR, #DELY MOV DPTR, #3344H MOV ROT, A MOV 40H, A 第二章 汇编语言和汇编程序

  29. 2.3 伪指令 • BIT 功能:将一个位地址赋给指定的符号。 格式:符号名BIT位地址 例如: CTRL BIT P0.0 RST BIT 90H (P1.0,详细见教材P24) SETB CTRL SETB RST 第二章 汇编语言和汇编程序

  30. 2.4 指令的时序 第二章 汇编语言和汇编程序

  31. 2.4.1 指令、机器、状态和振荡周期 如:当单片机外接12MHz晶振时的各种时序单位大小如下: 振荡周期= 状态周期 = 机器周期= 指令周期=(1~4)机器周期=1~4us 第二章 汇编语言和汇编程序

  32. Thank You !

More Related