资源预览内容
第1页 / 共94页
第2页 / 共94页
第3页 / 共94页
第4页 / 共94页
第5页 / 共94页
第6页 / 共94页
第7页 / 共94页
第8页 / 共94页
第9页 / 共94页
第10页 / 共94页
亲,该文档总共94页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第三章 单片机汇编程序设计 汇编C语言 面向硬件 硬件控制 效率高 不灵活 移植性差 可 读性差 系统设计 周期 长 1 语言简洁 2 表达方式灵活实用 3 表达力强 4 C语言生成的目标代 码质量高 5 结构化程序设计 6 可移植性 混合编程 主体用C 时序 要求高的部分 嵌入汇编 指令格式指令格式 标号 操作码助记 符 目的操作数源操作数 注释 START ADD A R0 A A R0 标号 标号是程序员根据编程需要给指令设定的符号地址 可有可无 标 号由1 8个字符组成 第一个字符必须是英文字 不能是数字或其 它符号 标号后必须用冒号 操作码助记 符 操作码表示指令的操作种类 如MOV表示数据传送操作 ADD表示加法操作等 也以逗号相隔 目的操作数 操作数或操作数地址表示参加运算的数据或数据的有效地 址 操作数一般有以下几种形式 没有操作数项 操作数隐含在 操作码中 如RET指令 只有一个操作数 如CPL A指令 有两 个操作数 如MOV A 00H指令 操作数之间以逗号相隔 有 三个操作数 如CJNE A 00H NEXT指令 操作数之间也以逗 号相隔 3 1 指令格式 指令指令标识标识 符符 1 Ri和Rn 表示工作寄存器区中的工作寄存器 i为0或1 n 表示0 7 R0R1R2 R3R4R5R6R7 RAM R0R1R2 R3R4R5R6R7 R0R1R2 R3R4R5R6R7 R0R1R2 R3R4R5R6R7 00H 1FH 第0组 第1组 第2组 第3组 目前使用的组由PSW寄存器确定 RS1RS0组组 000 011 102 113 指令指令标识标识 符符 2 data data16 立即数8 16位 MOV A data 3 direct 直接寻址的地址 MOV A direct 4 bit 位地址 FF A direct direct 1 direct 1 direct 2 CLR bit 5 X X单元中的内容 也就是X是个地址 3 2 寻址方式 寻址 操作数或操作数地址的寻找方式 寄存器寻址 直接寻址 立即数寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址 数据 程序 3 2 寻址方式 立即数寻址 操作数是常数 常用于赋值 MOV A 3AH MOV DPTR data16 操作数是常数 使用时直接出现在指令中 紧跟在操作码的后面 作为指令 的一部分 与操作码一起存放在程序存储器中 可以立即得到并执行 不需 要经过别的途径去寻找 常数又称为立即数 故又称为立即寻址 3 2 寻址方式 寄存器寻址 操作数在寄存器组 R0 R7 和其它寄存器 MOV A R0 MOV P1 A 这种寻址方式针对的寄存器只能是R0 R7 8个通用寄存器和部分特殊 功能寄存器 如累加器A 寄存器B 数据指针DPTR等 中的数据 对于其 它的特殊功能寄存器中的内容的寻址方式不属于它 在汇编指令中 寄存 器寻址在指令中直接提供寄存器的名称 如R0 R1 A DPTR等 3 2 寻址方式 直接寻址 指令直接提供存储器单元地址 MOV A 3AH MOV A 90H 只能片内低128字节寻址 这种寻址方式针对的是片内数据存储器和特殊功能寄存器 对于特殊功能寄存器 在指令中使用时往往通过特殊功能寄存 器的名称使用 而特殊功能寄存器名称实际上是特殊功能寄存器单元的 符号地址 因此它们是直接寻址 MOV A P0 3 2 寻址方式 寄存器间接寻址是指数据存放在存储单元中 而存储单元 地址存放在寄存器中 MOV A R0 寄存器间接寻址 FF A 081H 082H 080H 081H R0 FFH 3 2 寻址方式 寄存器间接寻址是指数据存放在存储单元中 而存储单元 地址存放在寄存器中 寄存器间接数寻址 寄存器间接寻址用到的寄存器只能是通用寄存器 R0 R1和数据指针寄存器DPTR 它能访问的数据是片内数据 存储器和片外数据存储器 其中 片内数据存储器只能用R0 和R1作指针间接访问 片外数据存储器 低端的256字节单 元 既可以用两位十六进制地址以R0或R1作指针间接访问 也可用四位十六进制地址以DPTR作指针间接访问 而高端的 字节单元则只能以DPTR作指针间接访问 对于片内RAM和片 外RAM的低端256字节都可以用R0和R1作指针访问 它们之 间用指令来区别 片内RAM访问用MOV指令 片外RAM访问 用MOVX指令 变址寻址 变址寻址是指操作数的地址由基址寄存器的地址加上变址 寄存器的地址得到 所访问的存储器为程序存储器 MOV A A DPTR 30H 81H 2081H 2082H 2080H 2000H A DPTR 30H A 2081H 程序存储器 位寻址 单片机中有一个独立的位处理器 有多条位 处理指令 能够进行各种位运算 CLR SET bit 在MCS 51系统中 位地址的表示可以用以下几种方式 1 直接位地址 00H 0FFH 例如 20H 2 字节地址带位号 例如 20H 3表示20H单元的3位 3 特殊功能寄存器名带位号 例如 P0 1表示P0口的1位 4 位符号地址 例如 TR0是定时 计数器T0的启动位 字节单元地址D7D6D5D4D3D2D1D0 20H0706050403020100 21H0F0E0D0C0B0A0908 22H1716151413121110 23H1F1E1D1C1B1A1918 24H2726252423222120 25H2F2E2D2C2B2A2928 26H3736353433323130 27H3F3E3D3C3B3A3938 28H4746454443424140 29H4F4E4D4C4B4A4948 2AH5756555453525150 2BH5F5E5D5C5B5A5958 2CH6766656463626160 2DH6F6E6D6C6B6A6968 2EH7776757473727170 2FH7F7E7D7C7B7A7978 指令寻址 绝对寻址是在指令的操作数中直接提供目的位置的地址或地址的一部份 在MCS 51系统中 长转移和长调用提供目的位置的16位地址 绝对转移和 绝对调用提供目的位置的16位地址的低11位 它们都为绝对寻址 一 绝对寻址 指令寻址 二 相对寻址 相对寻址是以当前程序计数器PC值加上指令中给出的偏移量 rel得到目的位置的地址 在MCS 51系统中 相对转移指令的操作数 属于相对寻址 在使用相对寻址时要注意以下两点 1 当前PC值是指转移指令执行时的PC值 它等于转移指令的 地址加上转移指令的字节数 实际上是转移指令的下一条指令的地 址 例如 若转移指令的地址为2010H 转移指令的长度为2字节 则转移指令执行时的PC值为2012H 2 偏移量rel是8位有符号数 以补码表示 它的取值范围为 128 127 当为负值时 向前转移 当为正数时向后转移 相对寻址的目的地址为 目的地址 当前PC rel 转移指令的地址 转移指令的字节数 rel 3 3 51单片机指令系统 传送指令 算术运算指令 逻辑操作指令 位操作指令 29 24 24 控制转移指令17 MOV MOVX MOVC PUSH POP XCH ADD ADDC INC SUBB DEC MUL DIV ANL ORl XRL CLR CPL RL RR RLC RRC LJMP JMP AJMP SJMP JMP JZ JNZ C ALL LCALL RET 17CLR SETB NOP 数据传送指令有29条 是指令系统中数量最多 使用也最频繁的一类 指令 这类指令可分为三组 普通传送指令 数据交换指令 堆栈操 作指令 一 普通传送指令 普通传送指令以助记符MOV为基础 分成片内数据存储器传 送指令 片外数据存储器传送指令和程序存储器传送指令 1 片内数据存储器传送指令MOV 指令格式 MOV 目的操作数 源操作数 其中 源操作数可以为A Rn Ri direct data 目的操作 数可以为A Rn Ri direct 组合起来总共16条 按目的操作数 的寻址方式划分为五组 传送指令 1 以A为目的操作数 MOV A Rn A Rn MOV A direct A direct MOV A Ri A Ri MOV A data A data 2 以Rn为目的操作数 MOV Rn A Rn A MOV Rn direct Rn direct MOV Rn data Rn data 3 以直接地址direct为目的操作数 MOV direct A direct A MOV direct Rn direct Rn MOV direct direct direct direct MOV direct Ri direct Ri MOV direct data direct data 4 以间接地址 Ri为目的操作数 MOV Ri A Ri A MOV Ri direct Ri direct MOV Ri data Ri data 5 以DPTR为目的操作数 MOV DPTR data16 DPTR data16 注意 源操作数和目的操作数中的Rn和 Ri不能相互配对 如不允许有 MOV Rn Rn MOV Ri Rn 这样的指令 在MOV指令中 不允 许在一条指令中同时出现工作寄存器 无论它是寄存器寻址还是寄存器 间接寻址 2 片外数据存储器传送指令MOVX 在MCS 51系统中只能通过累加器A与片外数据存储器进行数据传送 访问时 只能通过 Ri和 DPTR以间接寻址方式进行 MOVX指令 共有四条 MOVX A DPTR A DPTR MOVX DPTR A DPTR A MOVX A Ri A Ri MOVX Ri A Ri A 其中前两条指令通过DPTR间接寻址 可以对整个64K片外数据存储 器访问 后两条指令通过 Ri间接寻址 只能对片外数据存储器的低端 的256字节访问 访问时将低8位地址放于Ri中 目的源 A Rn Ri direct DPTR A Rn Ri direct data16 3 程序存储器传送指令MOVC 程序存储器传送指令只有两条 一条用DPTR基址变址寻址 一 条用PC基址变址寻址 MOVC A A DPTR A A DPTR MOVC A A PC A A PC 这两条指令通常用于访问表格数据 因此以称为查表指令 例如 查表指令MOVC A A PC所在的地址为2000H 表格的起始 单元地址为2035H 表格的第4个元素 位移量为03H 的内容为45H 则查表指令的处理过程如下 MOV A 03H 表格元素相对于表首的位移量送累加器A ADD A 34H 当前程序计数器PC相对于表首的差值加到累加 器A中 MOVC A A PC 查表 查得第4个元素内容45H送累加器A 注意 查表指令的长度为1个字节 当前程序计数器PC的值应为查表 指令的地址加1 例3 1 写出完成下列功能的程序段 1 将R0的内容送R6中 程序为 MOV A R0 MOV R6 A 2 将片内RAM 30H单元的内容送片外60H单元中 程序为 MOV A 30H MOV R0 60H MOVX R0 A 3 将片处RAM 1000H单元的内容送片内20H单元中 程序为 MOV DPTR 1000H MOV A DPTR MOV 20H A 4 将ROM 2000H单元的内容送片内RAM的30H单元中 程序为 MOV A 0 MOV DPTR 1000H MOVC A A DPTR MOV 30H A 二 数据交换指令 普通传送指令实现将源操作数的数据传送到目的操作数 指令 执行后源操作数不变 数据传送是单向的 数据交换指令数据作双 向传送 传送后 前一个操作数原来的内容传送到后一个操作数中 后一个操作数原来的内容传送到前一个操作数中 数据交换指令要求第一个操作数须为累加器A 共有5条 XCH A Rn A Rn XCH A direct A direct
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号