




已阅读5页,还剩110页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主讲 潘静 第3章单片机汇编程序设计 3 1单片机指令系统概述3 280C51单片机指令寻址方式3 380C51单片机指令分类介绍3 4常用伪指令3 5汇编程序设计 3 1单片机指令系统概述 指令 规定计算机基本操作的语句或命令 指令通常有两个组成部分 操作码和操作数 指令系统 一个单片机所能执行的指令集合即为它的指令系统 一条汇编语言指令中最多包含4个区段 如下所示 标号 操作码 操作数 注释 4个区段之间要用分隔符分开 标号与操作码之间用 隔开 操作码与操作数之间用空格隔开 操作数与注释之间用 隔开 如果操作数有两个以上 则在操作数之间要用逗号 隔开 乘法指令和除法指令除外 5 1 先通读指令 了解有哪些类型 基本操作情况 使用场合 个人可做些归纳和总结 2 阅读书中或别人的有关程序 其中的应用技巧 必要时再回来查有关内容 3 自己编写程序 上机实验 体会指令的作用和编程技巧 4 参与实际项目 在实战过程中使用和提高 掌握熟悉指令的一些方法 80C51指令中使用的符号的意义作简要说明 Rn 表示当前工作寄存器R0 R7中的任一寄存器n 0 7 Ri 可用作间接寻址的寄存器 只能是R0 R1两个寄存器 i 0 1 direct 8位直接地址 在指令中表示直接寻址方式 寻址范围256个单元 data 8位立即数 data16 16位立即数 addr16 表示16位目的地址 主要用于LCALL和LJMP指令中 addr11 表示11位目的地址 主要用于ACALL和AJMP指令中 rel 相对转移指令中的偏移量 为8位带符号补码 DPTR 数据指针 bit 内部RAM 包括专用寄存器 中的直接寻址位 A 累加器 ACC 直接寻址方式的累加器 B 寄存器B C 进位标志位 也称为累加位 加在位地址的前面 表示对该位状态取反 间接寻址寄存器的前缀标志 X 某寄存器或某单元中的内容 X 由 X 间接寻址单元中的内容 箭头左边的内容被箭头右边的内容所取代 所谓寻址方式 就是寻找操作数地址的方式 在用汇编语言编程时 数据的存放 传送 运算都要通过指令来完成 编程者必须自始至终都要十分清楚操作数的位置 以及如何将它们传送到适当的寄存器去参与运算 每一种计算机都具有多种寻址方式 寻址方式的多少是反映指令系统优劣的主要指标之一 3 280C51单片机指令寻址方式 在MCS 51单片机指令系统中 有以下7种寻址方式 1 立即寻址 2 直接寻址 3 寄存器寻址 4 寄存器间接寻址 5 基址寄存器加变址寄存器间接寻址 6 位寻址 7 指令寻址 绝对寻址相对寻址 1 直接寻址方式 定义 指令中操作数直接以存储单元地址的形式给出 例如 MOVA 3AH特点 指令中含有操作数的地址 该地址指出了参与操作的数据所在的字节单元地址或位地址 计算机执行它们时便可根据直接地址找到所需要的操作数 寻址范围 片内RAM 低128字节 专用寄存器 2 立即寻址方式 定义 将立即参与操作的数据直接写在指令中 这种寻址方式称为立即寻址 例如MOVA 3AHMOVDPTR data16特点 指令中直接含有所需的操作数 该操作数可以是8位的 也可以是16位的 常常处在指令的第二字节和第三字节的位置上 立即数通常使用 data或 data16表示 在立即数前面加 标志 用以和直接寻址中的直接地址 direct或bit 相区别 定义 操作数在寄存器中 只要指定了寄存器就能得到操作数 例如 MOVA R0特点 由指令指出某一个寄存器的内容作为操作数 存放操作数的寄存器在指令代码中不占据单独的一个字节 而是嵌入 隐含 到操作码字节中 寻址范围 四组通用寄存器Rn R0 R7 部分专用寄存器 A B DPTR CY 3 寄存器寻址方式 4 寄存器间接寻址方式 定义 指令给出的寄存器中存放的是操作数据的单元地址 这种寻址方式称为寄存器间接寻址 例如 MOVA R0特点 指令给出的寄存器中存放的是操作数地址 寄存器间接寻址是一种二次寻找操作数地址的寻址方式 寄存器前边必须加前缀符号 不能用于寻址特殊功能寄存器SFR 寻址范围 1 对于内部RAM低128单元访问 只能使用R0或R1作间址寄存器 2 对于外部RAM访问 使用DPTR作间址寄存器 3 对于外部低256单元RAM的访问 除可以使用DPTR外 还可以使用R0或R1作间址寄存器 先确定高8位地址给P2 4 寄存器间接寻址方式 为区分以上四种寻址方式 现在列出四种语句 1 MOVA 30H A 30H 最后A中的数据为30H如果30H单元存入的数据为0FFH2 MOVA 30H A 30H 最后A中的数据为0FFH3 MOVR1 30H R1 30HMOVA R1 A R1 A 30H 最后A中的数据为30H4 MOVR1 30H R1 30HMOVA R1 A R1 A 30H 最后A中的数据为0FFH 5 变址寻址方式 定义 操作数存放在变址寄存器 累加器A 和基址寄存器 DPTR或PC 相加形成的16位地址单元中 这种寻址方式称为基址加变址寄存器间接寻址 简称为变址寻址 例如 MOVCA A DPTR A A DPTR MOVCA A PC A A PC JMP A DPTR PC A DPTR 特点 指令操作码中隐含作为基址寄存器用的DPTR 或PC 和作为变址用的累加器A 在执行变址寻址指令时 80C51单片机先把基地址 DPTR或PC的内容 和地址偏移量 A的内容 相加 以形成操作数地址 再由操作数地址找到操作数 并完成相应的操作 变址寻址方式是单字节指令 寻址范围 只能对程序存储器ROM进行寻址 主要用于查表性质的访问 5 变址寻址方式 6 位寻址方式 定义 指令中给出的操作数是一个可单独寻址的位地址 这种寻址方式称为位寻址方式 例如 MOVC 3AH特点 位寻址是直接寻址方式的一种 其特点是对8位二进制数中的某一位的地址进行操作 寻址范围 位寻址区20H 2FH共16个单元里128位地址 00H 7FH 21个特殊功能寄存器中的11个可位寻址的寄存器里共82位80H P0 88H TCON 90H P1 98H SCON 0A0H P2 0A8H IE少2位 0B0H P3 0B8H IP少3位 0D0H PSW少1位 0E0H ACC 0F0H B 寻址形式 1 用直接位地址 MOVC 8CH 2 用单元地址加位序MOVC 88H 4 88H 4H 8CH 3 用位名称 SETTR0 启动定时器0 4 用寄存器名加位序 MOVC TCON 4 6 位寻址方式 一 绝对寻址 绝对寻址是在指令的操作数中直接提供目的位置的地址或地址的一部分 长转移和长调用提供目的位置的16位地址绝对转移和绝对调用提供目的位置的16位地址的低11位 7 指令寻址 二相对寻址方式 定义 将程序计数器PC的当前值 取出本条指令后的PC值 与指令第二个字节给出的偏移量 rel 相加 形成新的转移目标地址 称为相对寻址方式 例如 SJMPrel PC PC 2 rel特点 相对寻址方式是为实现程序的相对转移而设计的 为相对转移指令所使用 其指令码中含有相对地址偏移量 能生成浮动代码 目的地址 指令地址 PC 指令字节数 偏移量 rel 寻址范围 只能对程序存储器ROM进行寻址 相对地址偏移量 rel 是一个带符号的8位二进制补码 其取值范围为 128 127 以PC为中间的256个字节范围 相对寻址方式 总结 7种寻址方式及使用空间 3 380C51单片机指令分类 共有111条 按指令的功能 80C51指令系统可分为下列5类 数据传送类 29条 算术运算类 24条 逻辑运算及移位类 24条 位操作类 17条 控制转移类 17条 1 单字节指令 单字节指令格式由8位二进制编码表示 例如 CLRA E4H2 双字节指令 双字节指令格式由两个字节组成 操作码和操作数 例如 MOVA 10H 74H10H3 三字节指令 三字节指令格式中 第一个字节为操作码 后两个字节为操作数 例如 MOV40H 30H 75H40H30H 3 3 1数据传送类指令 29条 MCS 51传送指令示意图 一 数据传送指令以助记符MOV为基础 分成 片内数据存储器传送指令片外数据存储器传送指令程序存储器传送指令 1 片内数据存储器传送指令MOV指令格式 MOV目的操作数 源操作数其中 源操作数可以为A Rn Ri direct data目的操作数可以为A Rn Ri direct 1 以A为目的操作数MOVA Rn A Rn MOVA direct A direct MOVA Ri A Ri MOVA data A data 2 以Rn为目的操作数MOVRn A Rn A MOVRn direct Rn direct MOVRn data Rn data 3 以直接地址direct为目的操作数MOVdirect A direct A MOVdirect Rn direct Rn MOVdirect direct direct direct MOVdirect Ri direct Ri MOVdirect data direct data 4 以间接地址 Ri为目的操作数MOV Ri A Ri A MOV Ri direct Ri direct MOV Ri data Ri data 5 以DPTR为目的操作数MOVDPTR data16 DPTR data16 注意 源操作数和目的操作数中的Rn和 Ri不能相互配对 如不允许有 MOVRn Rn MOV Ri Rn 这样的指令 在MOV指令中 不允许在一条指令中同时出现工作寄存器 无论它是寄存器寻址还是寄存器间接寻址 例3 1设内部RAM中30H的内容为40H 40H单元的内容为10H P1口作为输入口 其输入数据为0CAH 分析下面程序段的执行结果 MOVR0 30H 单元地址以立即数形式送入R0MOVA R0 以R0间接寻址将30H单元内容送A 所送内容为40H MOVR1 A A的内容送R1MOVB R1 以R1间接寻址将40H单元内容送B 所送内容为10H MOVR1 P1 将P1内容送入R1MOVP2 R1 将R1内容送入P2 所送内容为0CAH 执行结果 R0 30H R1 0CAH A 40H B 10H P1 0CAH 40H 10H P2 0CAH 例3 2将片内RAM中的16H的内容0B9H送P1口 解法1 MOVP1 16H 解法2 MOVA 16HMOVP1 A 解法3 MOVR0 16HMOVP1 R0 2 外部数据存储器读 写指令 1 DPTR作间址寄存器的外部RAM单元读 写指令MOVXA DPTR DPTR间接寻址的外部RAM单元读 MOVX DPTR A DPTR间接寻址的外部RAM单元写 2 Ri作间址寄存器的外部RAM单元读 写指令MOVXA Ri Ri间接寻址的外部RAM单元读 MOVX Ri A Ri间接寻址的外部RAM单元写 例3 3已知片外RAM中的70H的一个数X 送到片外RAM的1010H单元 编写程序 解 程序如下 ORG1000H 指定程序地址MOVP2 00H 高8位地址为00HMOVR0 70H 低8位地址为70HMOVXA R0 取数据X到AMOVDPTR 1010H 设片外目的地址MOVX DPTR A 将数据X送目的地址SJMP 程序执行到此停止END 程序语句结束标志 MOVCA A PC 程序存储器读 MOVCA A DPTR 程序存储器读 第一条指令是以PC作为基址寄存器 缺点 是表格只能放在该条查表指令后面的256个单元之中 表格的大小受到限制 而且表格只能被一段程序所利用 3 程序存储器读指令组 第二条指令是以DPTR作为基址寄存器 特点 表格的大小和位置可以在64KB程序存储器中任意安排 并且一个表格可以为各个程序块所共用 例3 4已知片内20H单元中有一个0 9范围内的数 用以上查表指令获得该数的平方值 并将其送至21H单元 设平方表头地址为2000H 20H 02H 编写程序 解 采用PC作为基址寄存器 程序如下 ORG1FF7H1FF7HMOVA 20H A 20H A 02H1FF9HADDA data 加修正量1FFBHMOVCA A PC 查表1FFCHMOV21H A 21H A 1FFEHSJMP 停止执行2000HDB02001HDB12002HDB4 2009HDB81END 采用DPTR作为基址寄存器 程序如下 ORG1000HMOVA 20H A 20H A 02HMOVDPTR 2000H 地址指针定在2000HMOVCA A DPTR 查表MOV21H A 21H A SJMP 停止执行ORG2000H 平方表从2000H开始DB0DB1DB4 DB81END 4 堆栈操作指令组 PUSHdirect 进栈 POPdirect 出栈 例3 5 40H 01H 30H 02H 分析下列程序执行后的结果 堆栈区是片内RAM的一个数据区 进出栈是 后进先出 MOVSP 50H 设栈顶PUSH40H 51H 40H PUSH30H 52H 30H POP40H 40H 52H POP30H 30H 51H 执行结果 SP 50H 40H 02H 30H 01H 正确指令错误指令PUSHACCPUSHAPOPACCPOPAPUSH00HPUSHR0POP00HPOPR0 1 整字节交换指令XCHA Rn 寄存器寻址字节交换 XCHA direct 直接寻址字节交换 XCHA Ri Ri间接寻址字节交换 5 数据交换指令组 例3 6已知外部RAM2020H单元中有一个数X 内部RAM20H单元中有一个数Y 编写使它们互换的程序 解 程序如下 MOVP2 20H 设外部RAM高8位地址MOVR1 20H 设RAM低8位地址MOVXA R1 取外部RAM2020H中数X到AXCHA R1 内部RAM20H中数Y和A中数X交换MOVX R1 A 交换后将Y送到外部RAM 2 低半字节交换指令XCHDA Ri A和Ri间接寻址低4位交换 高4位不变 3 累加器高4位 低4位交换指令SWAPA 累加器内容高低半字节交换 例3 7已知片内50H单元中有一个0 9的数 编写使它们变为相应的ASCII码的程序 解 0 9的ASCII码为30H 39H 程序如下 MOVR0 50HMOVA 30HXCHDA R0MOV R0 A与下面程序相当 MOVR0 50HMOVA 30HADDA R0MOV R0 A 数据传送指令使用方法和技巧 例3 8将01H单元内容送02H单元 有几种方法可以实现 解 1 MOV02H 01H 直接寻址3字节 2周期 2 MOVA 01H 4字节 2周期MOV02H A 3 MOVA R1 寄存器寻址2字节 2周期MOVR2 A 4 MOVR0 01H 间接寻址4字节 3周期MOV02H R0 5 PUSH01H 栈操作4字节 4周期POP02H 数据传送指令使用方法和技巧 例3 9将片内40H单元内容送至片外50H单元 将片外2350H单元内容送片内40H单元 解 MOVP2 00H 设置外存地址高字节MOVR0 50H 设置外存地址低字节MOVA 40H 通过累加器读写外存储器MOVX R0 A 存入外存储器MOVP2 23H 设置外存地址高字节MOVXA R0 外存地址低字节仍是50HMOV40H A 外存2350H单元内容送内存40H单元R0内的地址50H既是内部单元地址 又是外部RAM低8位 判断指令的合法性 MOVA R2MOVR0 R1MOVPC 2222HPUSHR0 3 3 2算术运算类指令 24条 1 加法指令组ADDA data 立即数加法 ADDA direct 直接寻址加法 ADDA Ri 间接寻址加法 ADDA Rn 寄存器寻址加法 例3 10分析执行如下指令后累加器A和PSW中各标志位的变化 MOVA 9EH 9EH 158ADDA 71H 71H 113解 9EH A 10011110 71Hdata 0111000110FH100001111CYAC 2 带进位加法指令组ADDCA data 立即数带进位加法 ADDCA direct 直接寻址带进位加法 ADDCA Ri 间接寻址带进位加法 ADDCA Rn 寄存器寻址带进位加法 例3 11设 A 0AAH R0 55H CY 1 执行如下指令ADDCA R0后 求A CY AC OV P PSW之值和PSW中各标志位的变化 解 0AAH A 10101010055Hdata 01010101 1 CY 1100H100000000最后得 A 00H CY 1 AC 1 OV 0 P 0 PSW 11000000B 0C0H 3 加1指令组INCA 累加器加1 INCdirect 直接寻址单元加1 INC Ri 间接寻址单元加1 INCRn 寄存器寻址单元加1 INCDPTR 16位数据指针加1 若A 0FFH 执行INCA不同于执行ADDA 1 执行INCA后 A 00H 不改变CY执行ADDA 1后 A 00H CY 1 4 带借位减法指令组SUBBA data 立即数带借位减法 SUBBA direct 直接寻址带借位减法 SUBBA Ri 间接寻址带借位减法 SUBBA Rn 寄存器寻址带借位减法 没有不带借位的减法指令 例3 12设 A 0A9H R0 20H 20H 98H 执行如下程序 说明结果 CLRC CY清0SUBBA R0解 0A9H A 1010100198H 20H 10011000 CY 011H00010001按无符号数运算0A9H 98H 11H PSW 00H按带符号数运算10101001为 1010111 57H 的补码 10011000为 1101000 68H 的补码 57H 68H 11H 无借位 无溢出 例3 13设 A 76H 立即数为0C5H CY 0 执行如下程序 说明结果 SUBBA 0C5H解 竖式76H A 011101100C5Hdata 11000101 CY 0B1H CY 10110001异符号数相减运算相当于得数超过范围 产生溢出 OV 1 结果是错的 76H 3BH 0B1H超范围0B1H 7FH177 127 5 减1指令组DECA 累加器减1 DECdirect 直接寻址单元减1 DEC Ri 间接寻址单元减1 DECRn 寄存器减1 例3 14分析执行以下程序结果 程序如下 MOVR1 7FHMOV7EH 00HMOV7FH 40HDEC R1 间址R1指向7FH单元减1 40H减1DECR1 7FH减1 R1 7EHDEC R1 间址R1指向7EH单元减1 00H减1 解 结果 7FH 3FH R1 7EH 7EH 0FFH 6 乘除法指令组 1 乘法指令乘法指令完成单字节的乘法 只有一条指令 MULAB 这条指令的功能是 将累加器A的内容与寄存器B的内容相乘 乘积的低8位存放在累加器A中 高8位存放于寄存器B中 如果乘积超过0FFH 则溢出标志OV置 1 否则清 0 进位标志CY总是被清 0 例3 15 A 90H 144D B 62H 98D 分析执行以下程序结果 程序如下 MULAB 解 结果为乘积3720H 14112D A 20H B 37H OV 1 B不为0 CY 0 总是0 P 1 A内为奇数个1 2 除法指令除法指令完成单字节的除法 只有一条指令 DIVAB 这条指令的功能是 将累加器A中的内容除以寄存器B中的8位无符号整数 所得商的整数部分存放在累加器A中 余数部分存放在寄存器B中 若原来B中的内容为0 则执行该指令后 A与B中的内容不定 并将溢出标志OV置 1 在任何情况下 进位标志CY总是被清 0 例3 16设 A 65H 101D B 14H 20D 分析执行以下程序结果 程序如下 DIVAB 解 结果为乘积 A 05H 商 B 01H 余数 OV 0 除数为0则 1 CY 0 总是0 P 0 A内为2个1 7 十进制调整指令 DAA 若AC 1 即ACC 3在操作过程中有进位 或者A中低4位 9 则A中低4位 06H 若CY 1 即ACC 7在操作过程中有进位 或者A中高4位 9 则A中高4位 60H 这条指令对累加器A参与的BCD码加法运算所获得的8位结果进行十进制调整 使累加器A中的内容调整为二位压缩型BCD码的数 使用时必须注意 它只能跟在加法指令之后 不能对减法指令的结果进行调整 且其结果不影响溢出标志位 例3 17编写78 93的BCD加法程序 并分析调整过程 解 ORG3000HMOVA 78HADDA 93HDAASJMP END结果得 A 71 CY 1 OV 0 78H A 01111000 93Hdata 10010011171H100001011 0110100010001 01100000101110001最后得数应为171H 3 3 3逻辑运算及移位类指令 24条 1 逻辑 与 或 异或 运算指令组两个操作数都是8位 各个对应位进行运算 ANL ORL XRL A Rn 寄存器与累加器逻辑 ANL ORL XRL A Ri 间接寻址单元与累加器 ANL ORL XRL A direct 直接寻址单元与累加器 ANL ORL XRL A data 立即数与累加器 ANL ORL XRL direct A 累加器与直接寻址 ANL ORL XRL direct data 立即数与直接寻址 1 用和0 与 法屏蔽某些位 和1 与 则不改变 ANLA 0FH 将A中的高4位都清0 低4位不变 逻辑运算的常用功能算法 2 用和1 或 法置某些位为1 和0 或 则不改变 ORLA 0FH 将A中的低4位都置1 高4位不变 3 用和1 异或 法将某些位取反 和0 异或 则不改变 XRLA 0FH 将A中的低4位都取反 高4位不变 例 对累加器A中的1 3 5位清0 其余位不变 ANLA 11010101B对累加器A中的2 4 6位置1 其余位不变 ORLA 01010100B对累加器A中的0 1位取反 其余位不变 XRLA 00000011B RRCA 通过CY循环右移 2 移位指令组 RLA 累加器内容循环左移 RingLeft相当于除以2 RRA 累加器内容循环右移 RingRight相当于乘以2 RLCA 通过CY循环左移 以下两个指令不影响标志位CLRA 累加器清0 CPLA 累加器按位取反 3 累加器清0和取反指令组 3 3 4控制转移类指令 17条 无条件转移指令组 1 长转移指令LJMPaddr16 无条件长转移 16位目的地址 范围64kB 2 绝对转移指令AJMPaddr11 无条件绝对转移 目的地址低11位 高5位地址取自PC的高5位 寻址范围2kB 3 短转移指令SJMPrel 无条件短转移 目的地址低8位 高8位地址取自PC的高8位 寻址范围256B 4 变址寻址转移指令JMP A DPTR 无条件间接转移 范围64KB 例3 18根据R2中的数 查表法执行相应程序段 解 程序如下 ORG1000HSTR MOVDPTR TAB 将TAB代表地址送入DPTRMOVA R2 从R2中取数据到AADDA R2 数据乘以2 每条指令2字节JMP A DPTR 无条件间接变址跳转TAB AJMPPG0 跳转表格AJMPPG1AJMPPG2 PG0 PG0程序段PG0 PG1程序段PG0 PG2程序段 例3 19计算下段程序中SJMPSTART机器码中的rel程序地址机器码标号指令ORG1000H1000H7401HSTART MOVA 01H1002H1002HMOVR0 A 1017H80relSJMPSTART END 解 计算偏移量rel 用补码表示 PC内当前地址为1017H 2H 1019Hrel 1000H 1019H 19H 本式要用补码运算 rel 100H 19H 0E7H 求得 19H的补码 2 条件转移指令组 1 累加器判零转移指令JZrel 累加器判零转移 JNZrel 累加器判非零转移 2 数值比较转移指令CJNEA data rel A内容与立即数比较 不等则转移 CJNEA direct rel A内容与直接寻址单元不等则转移 CJNERn data rel 寄存器内容与立即数不等则转移 CJNE Ri data rel 间接寻址单元与立即数不等则转移 3 减1条件转移指令DJNZRn rel 寄存器减1条件转移 DJNZdirect rel 直接寻址单元减1条件转移 rel为根据程序中标号计算的相对地址 补码 3 子程序调用与返回指令组 1 长调用指令LCALLaddr16 长调用 执行过程 PC PC 3 SP SP 1 SP PC 7 0 SP SP 1 SP PC 15 8 PC addr16 2 绝对调用指令ACALLaddr11 绝对调用 执行过程 PC PC 2 SP SP 1 SP PC 7 0 SP SP 1 SP PC 15 8 PC10 0 addr11 3 返回指令RET 子程序返回 RETI 中断服务子程序返回 执行过程 PC15 8 SP SP SP 1 PC7 0 SP SP SP 1 4 空操作指令NOP 空操作 例3 20根据R2中的数 利用NOP指令产生方波 解 程序如下 LOOP SETBP1 0 将P1 0置1 输出高电平 NOP 空操作NOPNOPNOPNOPCLRP1 0 将P1 0置0 输出低电平 NOP 空操作NOPNOPAJMPLOOP 循环只有AJMPLOOP指令2个机器周期 其余都是1个 NOP个数调整时间 3 3 5位操作类指令 17条 位操作概述以位 bit 为单位进行的运算和操作 位变量也称为布尔变量或开关变量 供用户使用的位处理硬件资源有 位累加器CY 内部RAM的128个可寻址位 专用寄存器中可寻址位 包括I O口的可寻址位 2 位传送指令组MOVC bit 指定位内容送CY MOVbit C CY内容送指定位 3 位置位复位指令组SETBC CY置1 SETBbit 指定位置1 CLRC CY清0 CLRbit 指定位清0 4 位逻辑运算指令组ANLC bit 指定位与CY逻辑 与 ANLC bit 指定位的反与CY逻辑 与 ORLC bit 指定位与CY逻辑 或 ORLC bit 指定位的反与CY逻辑 或 CPLC CY取反 CPLbit 指定位取反 5 位控制转移指令组 1 以C状态为条件的转移指令JCrel CY 1转移 JNCrel CY 0转移 2 以直接寻址位状态为条件的转移指令JBbit rel 指定位状态为1转移 JNBbit rel 指定位状态为0转移 JBCbit rel 指定位状态为1转移 并使该位清0 rel为根据程序中标号计算的相对地址 补码 3 4伪指令 伪指令 是程序员发给汇编程序的命令 用来设置符号值 保留和初始化存储空间 控制用户程序代码的位置 1 汇编起始地址命令ORG ORiGin 该命令总是出现在源程序的开头位置 用于规定目标程序的起始地址 ORG例如 下列ORG命令规定标号START代表地址8000H 即目标程序的第一条指令从8000H开始 ORG8000HSTART MOVA 00H 2 汇编终止命令END ENDofassembly 该命令用于终止源程序的汇编工作 命令格式为 END 是选择项 只有主程序模块才有 也是选择项 当源程序为主程序时才具有 其值为主程序第一条指令的符号地址 3 赋值命令EQU EQUate 该命令用于给字符名称赋值 赋值后 其值在整个程序中有效 命令格式为 EQU其中可以是常数 地址 标号或表达式 例 TAB1EQU1000HTAB2EQU2000H汇编后TAB1 TAB2分别等于1000H 2000H 程序后面使用1000H 2000H的地方就可以用符号TAB1 TAB2替换 用EQU伪指令对某标号赋值后 该符号的值在整个程序中不能再改变 4 定义字节命令DB DefineByte 命令用于从指定的地址开始 在程序存储器的连续单元中定义字节数据 命令格式为 标号 DB 8位数表 8位数表 可以是一字节常数或字符 或用逗号分开的字节串 或用引号括起来的字符串 例如 例 ORG3000HTAB1 DB12H 34HDB 5 A abc 汇编后 各个数据在存储单元中的存放情况如下 5 定义数据字命令DW DefineWord 该命令用于从指定地址开始 在程序存储器的连续单元中定义16位的数据字 命令格式为 标号 DW 16位数表 存放时 数据字的高8位在前 低地址 低8位在后 高地址 例如 DW AA 存入41H 41HDW A 存入00H 41HDW ABC 不合法 因超过两字节 例 ORG3000HTAB2 DW1234H 5678H汇编后 各个数据在存储单元中的存放情况如下 6 内部RAM赋值命令DATA Assignment 该命令用于给符号名赋值 赋值在内部RAM DATA其中赋值项是8位数据或地址 例 RESULTDATA60HMOVRESULT A汇编后 RESULT就表示片内RAM的60H单元 程序后面用片内RAM的60H单元的地方就可以用RESULT 7 外部RAM赋值命令XDATA Assignment 该命令用于给符号名赋值 赋值在外部RAM XDATA其中赋值项是两字节 16位 数据或地址 包括I O口地址 例 PORT1XDATA2000HMOVDPTR PORT1MOVX DPTR A 8 定义存储区命令DS DefineStorage 该命令用于从指定地址开始 在程序存储器中保留指定数目的单元作为预留存储区 供程序运行使用 源程序汇编时 对预留单元不赋值 命令格式为 标号 DS 16位数表 例 ORG2000HTAB1 DB12H 34HDS4HDB 5 汇编后 存储单元中的分配情况如下 9 位定义命令BIT DefineBit 给某一位地址取个名字 容易记忆 命令格式为 字符名称 BIT 位地址 其中 位地址 可以是内存位地址 也可以是符号地址 即位符号名称 例 AQBIT90HAQBITP1 0功能是把P1 0的位地址赋给变量AQ 在其后的编程中AQ就可以作为位地址使用 例 从程序存储器0200H单元开始存有20个带符号数 统计其中负数的个数并存入内部RAM的30H单元 解 程序如下 ORG0100HSIGNBITACC 7 为ACC 7取名SIGNNUMEQU20 为数据个数20取名NUMSTART MOV30H 00H 将存负数个数的单元清05MOVR2 NUM 数据个数送入R26MOVDPTR TAB TAB为数据块起始地址LOOP MOVCA A DPTR 取数据8JNBSIGN NEXT 判断正负 为正转NEXT9INC30HNEXT INCDPTR11CLRA12DJNZR2 LOOP 个数减1 不为0继续循环13SJMP ORG0200HTAB DB52 63 124 45 86 89 52 4 63 916DB 89 75 111 75 105 86 45 46 68 9817END 3 580C51单片机汇编语言程序设计 三种基本结构形式 顺序程序结构分支程序结构循环程序结构子程序结构 3 5 1顺序程序结构顺序结构程序是最简单的程序结构 程序既无分支 循环 也不调用子程序 程序执行时一条接一条地按顺序执行指令 ORG1000HMOVR0 30HMOVA R0 两位BCD码送APUSHACCANLA 0FH 取低位BCD码ORLA 30H 完成低位转换INCR0 调整地址为31HMOV R0 A 存低位ASCII码POPACCANLA 0F0H 取高位BCD码SWAPA 高低半字节交换ORLA 30H 完成高位转换INCR0 调整地址为32HMOV R0 A 存高位ASCII码SJMP END 例 将一个字节的两位BCD拆开并转换成相应的ASCII码存入两个RAM单元中 ORG2000HBAIDATA30HSHIDATA31HGADATA32HMOVA 40H 取8位二进数送AMOVB 100 除数为100DIVAB 除以100 商即百位MOVBAI A 存百位数MOVA B 余数送AMOVB 10 除数为10DIVAB 除以10 商即十位MOVSHI A 存十位数MOVGE B 余数即为个位SJMP END 例 将40H单元中8位无符号数二进制数转换成三位BCD码 并存放在BAI 百位 SHI 十位 GE 个位 三个单元中 MOVR0 52H 被加数的低字节地址MOVR1 55H 加数的低字节地址MOVA R0ADDA R1 低字节相加MOV R0 A 存低字节相加结果DECR0DECR1MOVA R0ADDCA R1 中间字节带进位相加MOV R0 A 存中间字节相加结果DECR0DECR1MOVA R0ADDCA R1 高字节带进位相加MOV R0 A 存高字节相加结果CLRAADDCA 00H 进位送累加器最低位MOVR0 20H 存放进位的单元地址MOV R0 AEND 3字节无符号数相加 其中被加数在内部RAM的50H 51H和52H单元中 加数在内部RAM的53H 54H和55H单元中 要求把相加之和存放在50H 51H和52H单元中 进位存放在位寻址区的20H位中 3 5 2分支程序结构 分支结构也称为选择结构 为分支需要 程序设计时应给程序段的起始地址赋予一个地址标号 以供选择分支使用 分支结构又可分为单分支结构和多分支结构 1 单分支程序结构单分支程序结构即二中选一 是通过条件判断实现的 一般都使用条件转移指令对程序的执行结果进行判断 1 单分支结构举例假定在外部RAM中有ST1 ST2和ST3共3个连续单元 其中ST1和ST2单元中存放着两个无符号二进制数 要求找出其中的大数并存入ST3单元中 START CLRC 进位位清0MOVDPTR ST1 设置数据指针MOVXA DPTR 取第1个数MOVR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论