已阅读5页,还剩123页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理及应用 佘勇电子基础教学实验中心课件密码 kys2006Telmail sy 办公室 科教楼110 第四章MCS 51单片机的指令系统与汇编程序设计 上章内容小结 51单片机基本特点51单片机存储器组织程序存储器片内ROM和片外ROM扩展 EA引脚作用 PC与中断向量数据存储器片内RAM 工作寄存器 位寻址区 用户RAM 堆栈 SFR片外RAM扩展时序与复位节拍 状态 机器周期和指令周期的概念单片机复位 MCS 51内部RAM配置 直接寻址 内部数据存储器配置图 总结 地址重叠 256B 384B 间接寻址 仅52系列有 本章内容 本节课需掌握指令的基本概念操作数寻址方式51单片机的指令系统伪指令汇编语言程序设计重点操作数寻址方式51单片机的指令系统汇编语言程序设计 指令 指令系统和程序指令是CPU能执行的一个基本操作 如 取数 加 减 乘 除 存数等指令系统是CPU所能执行的全部指令的集合 不同的CPU 其指令系统不同 程序用户编写的完成特定任务的指令的有序集合 4 1指令概述 程序设计语言 指令助记符指令编码是二进制编码 记忆起来有些困难 可用与指令含义接近的英文单词或缩写来代替指令的二进制编码程序设计语言机器语言 二进制指令代码程序设计语言 形成目标程序计算机唯一可以直接识别的语言二进制的表达形式 编程困难高级语言和汇编语言程序 源程序 必须转换成机器语言目标代码 目标程序 才能被计算机执行 高级语言 面向过程和对象的程序设计语言语句功能强 编程速度快需要编译程序或解释程序翻译成机器代码不太适用于微型计算机系统汇编语言 用助记符代替二进制指令代码的程序语言每条语句与一个具体的操作或指令对应编写的程序需要汇编成机器代码运行程序代码短 运行效率高 但编程复杂非常适合计算机原理的学习 汇编语言指令格式 MCS 51单片机指令格式 标号 操作码 操作数 注释 1 8个字母 数字 下划线 字母开头 1 3个 多个操作数之间用 分隔 介绍描述指令符号的意义 Ri 由Ri寻址的单元中的内容 Ri DPTR 由DPTR寻址的单元中的内容 DPTR direct 由direct寻址的单元中的内容 直接寻址 Rn Rn中的内容 4 2寻址方式 MCS 51单片机指令格式 标号 操作码 操作数 注释 定位操作数所在存储位置的方式叫寻址方式寄存器寻址直接寻址立即寻址寄存器间接寻址变址寻址 基址寄存器加变址寄存器间接寻址 相对寻址位寻址 寄存器寻址方式 操作数位置出现的是工作寄存器名 操作数存放在工作寄存器中 MOVA R1 30H 30H MOVB A 3FH 3FH INCB 3FH 40H 直接寻址方式 出现在操作数位置不是操作数本身 而是操作数所在的存储单元的地址可用于转移或调用指令的目标地址寻址 以 addr16 或 addr11 的形式出现可用于RAM存储单元的寻址 以 direct 的形式出现 MOVA 30H A 30H 24H 立即寻址方式 指令的操作数存放在程序存储器中 紧跟在操作码的后面 前缀指示符 MOVA 30H A 30H 30H 直接寻址与立即寻址的区别 MOVA 30H A 30H MOVA 30H A 30H 寄存器间接寻址方式 出现在操作数位置的寄存器的内容不是操作数本身 而是操作数所在的存储单元的地址 以 寄存器名 形式表示R0 R1可用于片内RAM和片外RAM低256字节的间接寻址 MOVA Ri或MOVXA Ri DPTR可用于片外RAM整个64K字节空间的间接寻址 MOVXA DPTR MOVA R0 A R0 24H 寄存器寻址与寄存器间接寻址区别 MOVA R1 30H 30H MOVA R1 A R1 设R1 30H MOVCA A DPTR 变址寻址 以累加器A为变址寄存器 以程序计数器PC或数据指针DPTR为基址寄存器 以二者之和作为程序存储器单元地址 取出其中的数据作为操作数 A A DPTR 02H 2002H 82H 相对寻址 相对寻址用于访问程序存储器 在相对转移指令后作为转移的地址偏移 以 rel 形式表示 rel 是8位补码 范围 128 127 转移的目标地址为转移指令的下一条指令 PC rel JNZrel 例 累加器A不等零则转移设 rel 23H PC 2002H rel 23H 修正后转移目标地址D PC 2025H PC 2002H Rel 23H 0 0 5 2 0 2 H D 寻址空间 片内RAM的地址为20H 2FH字节单元共128位位地址表现形式 1 位地址00H 7FH2 字节地址 位序号 SFR中12个能被8整除的字节地址位地址请参看P52表2 6SFR中的可寻址位的三种形式 1 位地址 如80H 81H2 位地址名 如C OV AC3 SFR名 位序号 如P1 0 P0 5 对内部RAM SFR的位地址空间进行访问 称为位寻址 位地址用于布尔指令 共221位 位寻址 关于累加器A在指令中的形式 累加器A在指令中的表现形式1 以累加器A形式出现A是指令编码的一部分 不占用独立字节例 MOVA Ri指令编码 E8 EF2 以direct地址形式 SFR地址 出现ACC或字节地址例 PUSHACC指令编码 C0E0 4 3MCS 51指令系统 MCS 51指令系统有111条指令 按操作功能分类 算术操作指令24条 逻辑操作指令24条 程序转移指令17条 数据传送指令29条 位操作指令17条 按指令长度分类 单字节指令49条 双字节指令45条 三字节指令17条 按指令周期分类 单周期指令64条 双周期指令45条 四周期指令2条 1 s 2 s 4 s 设时钟频率为12MHz 则按指令执行的时间分 4 3 1数据传送类指令 数据传送类指令的种类 29条 片内RAM传送指令 MOV片外RAM传送指令 MOVXROM传送 查表传送 MOVC累加器交换指令 XCH XCHD SWAP堆栈操作指令 进栈指令 PUSH出栈指令 POP对标志位的影响影响累加器A内容的传送指令影响奇偶标志P 其它标志位不受影响 传送类指令操作示意图 累加器A Rn工作寄存器 Ri片内RAM单元 direct Ri DPTR片外RAM单元 A PC A DPTRROM单元 堆栈 data PUSH POP MOVC MOVX MOV XCH MOV XCH XCHD MOV XCH MOV MOV MOV MOV MOV MOV MOV DPTR MOV 寄存器间接寻址 寄存器寻址 立即寻址 寄存器间接寻址 变址寻址 基址寄存器加变址寄存器 应用实例 直接寻址 以累加器A为一方的传送指令 累加器A Rn工作寄存器 Ri片内RAM单元 direct Ri DPTR片外RAM单元 A PC A DPTRROM单元 data MOVC MOVX MOV XCH MOV XCH XCHD MOV XCH MOV MOVdirect AMOVA directXCHA direct MOV Ri AMOVA RiXCHA Ri低半字节交换XCHDA Ri MOVRn AMOVA RnXCHA Rn MOVA data MOVCA A PCMOVCA A DPTR MOVX Ri AMOVXA RiMOVX DPTR AMOVXA DPTR 变址寻址 寄存器间接寻址 立即寻址 寄存器寻址 寄存器间接寻址 直接寻址 SWAPA 以direct单元为一方的传送指令 Rn工作寄存器 Ri片内RAM单元 direct 堆栈 PUSH POP MOV MOV MOV 寄存器间接寻址 寄存器寻址 直接寻址 MOVRn directMOVdirect Rn MOV Ri directMOVdirect Ri MOVdirect direct PUSHdirect SP SP 1 SP direct POPdirect direct SP SP SP 1 例 PUSHACCPUSH30HPOP40HPOPB 立即数传送指令 累加器A Rn工作寄存器 Ri片内RAM单元 direct data MOV MOV MOV MOV DPTR MOV 寄存器间接寻址 寄存器寻址 立即寻址 直接寻址 MOVDPTR data16例 MOVDPTR 2000H MOVRn data例 MOVR0 2FH MOV Ri data例 MOV R1 2FH MOVdirect data例 MOV30H 2FH MOVA data例 MOVA 2FH 传送类指令实例1 立即数送至累加器MOVA 20H A 20H累加器与工作寄存器R0 R7之间的传送MOVR1 20HMOVA R1MOVR0 A R0 20H累加器与 Ri间接寻址的片内RAM单元之间的传送MOVA 2FHMOVR0 30HMOVR1 40HMOV R0 A 30H 2FHMOVA R1 A 40H XCHA R0 A 30H 传送类指令实例2 累加器与direct直接寻址的片内RAM单元之间的传送MOVA 20H A 20H MOVP1 A P1 AXCHA 30H 30H A累加器与片外RAM单元之间的传送MOVR1 20HMOVDPTR 2000HMOVXA R1MOVX DPTR A 2000H 0020H 累加器与ROM单元之间的传送 查表指令 MOVDPTR 2000HMOVCA A DPTRMOVCA A PC 传送类指令实例3 工作寄存器与direct直接寻址的片内RAM单元之间的传送MOVR1 20H R1 20H MOV2FH R1 2FH R1 direct直接寻址的片内RAM单元与 Rj间接寻址的片内RAM单元之间的传送MOVR1 20HMOV30H R1 30H 20H MOV R1 40H 20H 40H direct直接寻址的片内RAM单元之间的传送MOV30H 40H 30H 40H MOV23H 30HMOV12H 34HMOVR0 23HMOVR7 12HMOVR1 12HMOVA R0MOV34H R1MOV45H 34HMOVDPTR 6712HMOV12H DPHMOVR0 DPLMOVA R0 23H 30H 12H 34H R0 23H R7 34H R1 12H A 30H 34H 34H 45H 34H DPTR 6712H 12H 67H R0 12H A 67H 传送类指令综合实例 30H 34H 23H 34H 12H 34H 34H 67H 12H 67H 12H 4 3 2算术操作类指令 算术操作类指令的种类 24条 加法指令 ADD ADDC减法指令 SUBB加1指令 INC减1指令 DEC十进制调整指令 DA乘法指令 MUL除法指令 DIV 加法指令 不带进位的加法指令ADDA Rn A A Rn ADDA Ri A A Ri ADDA direct A A direct ADDA data A A data带进位的加法指令ADDCA Rn A A Rn Cy ADDCA Ri A A Ri Cy ADDCA direct A A direct Cy ADDCA data A A data Cy 加法指令影响PSW中的Cy OV AC P 加法实例 MOVA 1 A 0FFHADDA 255 A A 0FFHMOVR0 0 R0 0ADDCA R0 A A R0 Cy OVCyA11111111 11111111 0111111110 ADD二进制结果00000000 1 0011111111 ADDC二进制结果 对编程者来说 可以把这两个数的当作无符号数 也可以当作带符号数 减法指令 带借位的减加法指令SUBBA Rn A A Rn Cy SUBBA Ri A A Ri Cy SUBBA direct A A direct Cy SUBBA data A A data Cy 减法指令没有不减进位位的指令 所以必须注意 在减法指令之前应清除进位位减法指令影响PSW中的Cy OV AC P 减法实例 CLRC Cy 0MOVA 52H A 52HMOVR0 0B4H R0 0B4HSUBBA R0 A A R0 Cy OVCyA001010010 10110100 10010110 0 1110010110 SUBB二进制结果 0B4H当作无符号数180 也可以当作带符号数 76 加1减1指令 加1指令INCA A A 1INCRn Rn Rn 1INC Ri Ri Ri 1INCdirect direct direct 1 用于端口操作时 读 改 写 INCDPTR DPTR DPTR 1减1指令DECA A A 1DECRn Rn Rn 1DEC Ri Ri Ri 1DECdirect direct direct 1 用于端口操作时 读 改 写 加1减1指令不影响PSW中的标志位 16位无符号数加法实例 设在片内RAM地址为30H和40H处存放着2个16位无符号数 低位在前 编程求两者之和 存放于R3 R4中 16位无符号数加法实例流程图 2个间接寻址寄存器 地址指针 指向操作数低8位 取加数低8位至累加器 低8位加法 结果存储 调整间址寄存器 指向操作数高8位 取加数高8位至累加器 高8位加法 结果存储 MOVR0 M1 R0 M1 R1 M2 间接MOVR1 M2 寻址寄存器 地址指针 初始化MOVA R0 取第1个数第8位ADDA R1 低8位相加MOVR4 A R4 低8位和INCR0 调整地址指针 指向高8位INCR1 MOVA R0 ADDCA R1 高8位相加MOVR3 A R4 高8位和 累加器十进制调整指令DA ALU完成压缩BCD码 每字节两位十进制数码 运算后 累加器中的运算结果并不是十进制结果 必须用DA指令调整成十进制结果指令格式 DAA调整方法 DA指令一般跟在加法指令的后面 利用加法指令对标志位C AC影响以及累加器A内容完成十进制调整如果低半字节 9或AC 1 则低半字节加6如果高半字节 9或C 1 则高半字节加6DA指令影响进位位C 只置位 不复位 不影响OV位 十进制调整指令实例 MOVR1 92H R1 92HMOVA 73H A 73HADDA R1 A 05H AC 0 C 1DAA A 65H C 1 CA10010010 压缩BCD码92 01110011 压缩BCD码73 100000101 二进制结果01100000 十进制调整 101100101 十进制结果163 乘法指令 乘法指令格式 MULAB执行时间 4个机器周期操作 累加器A和寄存器B中的两个数相乘 乘积的高8位在B中 低8位在A中对标志位的影响 Cy 0 当乘积 255时 OV 1 否则 OV 0 除法指令 除法指令格式 DIVAB执行时间 4个机器周期操作 累加器A中的被除数除以寄存器B中的除数 除得的商在A中 余数在B中对标志位的影响 一般情况下 Cy 0 OV 0 当除数为0时 OV 1 乘法实例 设在片内RAM地址为M1处存放着一个16位无符号数 低位在前 在M2处存放着一个8位无符号数 编程求两者之积 存放于R2 R3 R4中 乘法实例 M1 1 M1 M2 R3R4 BA R2R3R4 MOVR0 M1MOVA R0MOVB M2MULABMOVR4 AMOVR3 BINCR0MOVA R0MOVB M2MULAB R0 M1 指向被乘数低8位 A 被乘数低8位 M1 B 乘数 M2 M1 M2 R4 乘积低8位 R3 乘积高8位 暂存 指向被乘数高8位 A 被乘数高8位 M1 1 B 乘数 M2 M1 1 M2 ADDA R3MOVR3 AMOVA BADDCA 00HMOVR2 A 乘积第2字节相加 R3 乘积第2字节 A 乘积第3字节 加进位位Cy R2 乘积第3字节 4 3 3逻辑操作类指令 逻辑操作类指令的种类 24条 按位运算 与指令 ANL或指令 ORL异或指令 XRL累加器取反指令 CPL累加器清零指令 CLR移位指令 RL RR RLC RRC 与指令 与指令 源操作数与目标操作数按位相与ANLA Rn A A direct direct data与指令不影响标志位用于端口操作时 执行 读 改 写 操作例 设 A 55H则 ANLA 0F0H 运行后 A 50H 或指令 或指令 源操作数与目标操作数按位相或ORLA Rn A A Rn ORLA Ri A A Ri ORLA direct A A direct ORLA data A A dataORLdirect A direct A direct ORLdirect data direct direct data或指令不影响标志位用于端口操作时 执行 读 改 写 操作例 设 A 55H则 ORLA 0F0H 运行后 A 0F0H 异或指令 异或指令 源与目标操作数按位相异或XRLA Rn A A RnXRLA Ri A A Ri XRLA direct A A direct XRLA data A A dataXRLdirect A direct A direct XRLdirect data direct direct data异或指令不影响标志位用于端口操作时 执行 读 改 写 操作例 设 A 55H则 XRLA 0F0H 运行后 A 0A5H 累加器取反和清零指令 累加器取反指令 累加器内容按位取反CPLA A A累加器清零指令 累加器置0CLRA A 0指令不影响标志位 算术移位与逻辑移位 算术移位算术左移数据各位依次移到相邻高位 最低位补0算术右移数据各位依次移到相邻低位 符号位不变逻辑移位逻辑左移与算术左移相同逻辑右移数据各位依次移到相邻低位 最高位补0 16位算术左移例 CY 0 A M1 A M1 1 存放于M1处的16位数 4 3 4控制转移指令 程序转移类指令的功能程序不再顺序执行 根据条件或无条件地转移到目的地址位置处开始执行符号 表示当前指令所在起始单元地址程序转移类指令的种类 17条 无条件转移指令 AJMP LJMP SJMP JMP条件转移指令 JZ JNZ CJNE DJNZ JC JNC JB JNB JBC调用指令 ACALL LCALL RET RETI空操作指令 NOP 无条件转移指令 1 绝对转移指令格式 AJMPaddr11执行操作 PC PC 2PC10 0 addr11PC15 11不变2 长转移指令格式 LJMPaddr16执行操作 PC PC 3PC addr16 无条件转移指令 续 3 短转移指令格式 SJMPrel执行操作 PC PC 2PC PC relrel 8位二进制补码 范围 128 1274 变址方式转移 间接转移 指令格式 JMP A DPTR执行操作 PC A DPTR 绝对转移指令示意图 MOVA 20H AJMPAA1 AA1 MOVA R0 在同一个2KB区间内 绝对转移指令示意图 短转移指令示意图 MOVA 20H SJMPAA1 AA1 MOVA R0 MOVA 20H AA1 MOVA R0 SJMPAA1 距离 128 长转移指令示意图 MOVA 20H LJMPAA1 AA1 MOVA R0 距离任意 64KB转移空间 变址方式转移指令例子 散转 MOVDPTR TABMOVA R0MOVB 3MULABJMP A DPTR SJMP TAB LJMPTAR1LJMPTAR2LJMPTAR3 LJMPTABn 原地踏步Rel 2 0FEH 程序中的无条件转移指令 在编程时 在无条件转移指令后 直接写出转移目的指令前的标号 代表目标地址 标号与 rel或addr11 之间的转换运算由汇编程序自动完成 如果目标地址超出范围 汇编程序将给出错误提示 编程者必须对其进行调整 条件转移指令 累加器零条件 累加器为0转移指令格式 JZrel执行操作 ifA 0PC PC 2 顺序执行elsePC PC 2 rel累加器非0转移指令格式 JNZrel执行操作 ifA 0PC PC 2 顺序执行elsePC PC 2 rel 累加器零条件转移指令实例 编程实现将片外RAM地址为DATA1的8位无符号数组 位于地址低256单元内 连续传送到片内RAM地址为DATA2处 直到遇到数组元素为0为止 累加器零条件转移指令实例 MOVR0 DATA1MOVR1 DATA2LOOP MOVXA R0JZAA1MOV R1 AINCR0INCR1SJMPLOOPAA1 SJMP 距离 127 注意此例的缺陷 没有考虑数据区长度 改进 条件转移指令 进位条件转移 进位位C为1转移指令格式 JCrel执行操作 ifC 0PC PC 2 顺序执行elsePC PC 2 rel进位位C为0转移指令格式 JNCrel执行操作 ifC 1PC PC 2 顺序执行elsePC PC 2 rel 条件转移指令 位条件转移 直接寻址位为1转移指令格式 JBbit rel执行操作 ifbit 0PC PC 3elsePC PC 3 rel直接寻址位为0转移指令格式 JNBbit rel执行操作 ifbit 1PC PC 3elsePC PC 3 rel直接寻址位为1转移且该位清0指令格式 JBCbit rel执行操作 ifbit 0PC PC 3elsePC PC 3 rel bit 0 条件转移指令 比较条件转移 指令格式 CJNEA data relCJNEA direct relCJNERn data relCJNE Ri data rel执行操作 if第一操作数 第二操作数PC PC 3 C 0if第一操作数 第二操作数PC PC 3 relif第一操作数 第二操作数C 0if第一操作数 第二操作数C 1 CJNE应用实例 无符号数的比较 编程实现 如果R0与R1相等 转移到AA1 如果R0大于R1 转移到AA2 如果R0小于R1 转移到AA3 MOVA R0MOV30H R1CJNEA 30H MIDAA1 MID JNCAA2AA3 AA2 注意指令的语法 R0与R1不能直接比较 Yes CJNE应用实例 带符号数的比较 编程实现 A与30H单元内容 带符号数 进行比较 如果相等 转移到LOOP1 如果大于 转移到LOOP2 如果小于 转移到LOOP3 A 0 30H 0 30H 0 A 30H CJNEA 30H比较 A 30H A 30H A 30H Cy 0 No No Yes Yes No Yes No Yes No LOOP1 LOOP2 LOOP3 COMP NEXT MOVR0 AANLA 80HJNZNEGMOVA 30HANLA 80HJNZLOOP2SJMPCOMPNEG MOVA 30HANLA 80HJNZLOOP3 COMP MOVA R0CJNEA 30H NEXTSJMPLOOP1NEXT JNCLOOP2LOOP3 NOP A为 30H 为 A为 30H 为 A 30H A 30H A 30H 条件转移指令 减1条件转移 寄存器减 1 不等零转移指令格式 DJNZRn rel执行操作 Rn Rn 1ifRn 0PC PC 2 顺序执行elsePC PC 2 rel内部RAM或SFR减 1 不为零转移指令格式 DJNZdirect rel执行操作 direct direct 1if direct 0PC PC 3 顺序执行elsePC PC 3 rel DJNZ指令实例1 对累加器零条件转移实例的修改 MOVR0 DATA1MOVR1 DATA2MOVR3 nLOOP MOVXA R0JZAA1MOV R1 AINCR0INCR1DJNZR3 LOOPAA1 SJMP 距离 128 考虑数据区长度 累加器零条件转移实例 考虑数据区长度 DJNZ应用实例2 课堂练习 编写一段程序 把片内RAM地址30H 3FH的16个存储单元清0 DJNZ应用实例2 解答 编写一段程序 把片内RAM地址30H 3FH的16个存储单元清0 MOVR0 30H 地址指针初始化MOVR1 16 循环变量初始化AGA MOV R0 0 存储单元清0INCR0 地址指针增加DJNZR1 AGA 循环变量判断 子程序调用与返回指令 主 程 序 子 程 序 1 子 程 序 2 断点1 断点2 恢复断点2 恢复断点1 断点 在子程序调用时 指调用指令的下一条指令地址 将被压入堆栈 在返回指令中被从栈顶弹出到PC 绝对调用指令 指令格式 ACALLaddr11执行操作 PC PC 2SP SP 1 SP PC7 0SP SP 1 SP PC15 8PC10 0 addr11PC15 11不变 断点保护 绝对调用指令示例 MOVA 20H ACALLAA1 AA1 MOVA R0 RET 在同一个2KB区间内 长调用指令 指令格式 LCALLaddr16执行操作 PC PC 3SP SP 1 SP PC7 0SP SP 1 SP PC15 8PC15 0 addr16 断点保护 长调用指令示例 MOVA 20H LCALLAA1 AA1 MOVA R0 RET 距离任意 64KB转移空间 返回指令 返回指令指令格式 RET执行操作 PC15 8 SP SP SP 1PC7 0 SP SP SP 1中断返回指令格式 RETI操作 1 清除中断响应时置位的优先级状态触发器 使同级或低级中断请求不会被阻断 2 其它操作同RET指令 断点恢复 位处理器 布尔处理器 布尔处理器 布尔运算器ALU 布尔累加器CY PSW 7 布尔RAM区共128位 布尔I O口 P0 P3口每位都可做布尔I O口 布尔指令子集 17条布尔指令 布尔SFR区 共221位 布尔地址空间 4 3 5位操作类指令 位操作类指令的分类 17条 位传送指令 MOV位逻辑操作指令 CPL CLR SETB ANL ORL位条件转移指令 JC JNC JB JNB JBC 见转移类指令 位传送指令 直接寻址位内容送进位位MOVC bit Cy bit 进位位内容送直接寻址位MOVbit C bit Cy位地址表示方法1 位地址 RAM 00H 7FH SFR 80H FFH 2 位名称 SFR中的专用名称位3 点表示 字节地址或SFR名 位序号4 位符号地址表示方式 用伪指令定义的符号地址 如 FLGbitF0 位逻辑操作指令 进位位取反 CPLC进位位清零 CLRC进位位置1 SETBC 直接寻址位取反 CPLbit直接寻址位清零 CLRbit直接寻址位置1 SETBbit 直接寻址位与进位位与 ANLC bit直接寻址位与进位位或 ORLC bit直接寻址位取反后与进位位与 ANLC bit直接寻址位取反后与进位位或 ORLC bit 直接寻址位原值不变 4 4MCS 51汇编语言伪指令 汇编语言程序的格式 汇编语言程序语句 指令语句 伪指令语句 汇编过程中产生CPU将要执行的机器代码 仅对汇编过程进行控制 不产生可执行的机器代码 程序定位 符号定义和存储空间保留等 指令语句 指令语句格式 标号 操作码 操作数 注释 各部分由分隔符 空格或Tab 分开标号一条指令或一段程序的符号地址 由1 8个字母 数字与下划线 首字符必须是字母 组成 后跟 号指令语句在汇编过程中将产生机器码 伪指令语句 伪指令格式 名称 或 标号 伪指令 表达式或符号列表 在汇编过程中不产生机器码和目标程序 不令计算机产生任何操作作用 在汇编程序对源程序进行汇编的过程中 控制汇编程序对源程序的解释 完成数据 符号的定义等 伪指令 ORG ORG命令格式 ORG16位地址作用 用在一段源程序或数据块前 说明程序段或数据块的起始地址例1 ORG0000HLJMPMAINORG1000HMAIN MOVR0 100H 例2 ORG1000HTAB DB01H 02H 伪指令 END END命令格式 END作用 表明源程序结束 伪指令 DB命令 DB命令格式 标号 DB数据项或数据项列表作用 定义字节数据或数据块 列表中的数据项用逗号分开 汇编程序把它们依次存放在从标号地址开始的连续存储单元中例 ORG2000HFIRST DB10 20 30 40DB11 12 13 14 则 从地址为2000H的单元开始 存储单元中的数据依次为10 20 30 40 11 12 13 14 伪指令 DW命令 DW命令格式 标号 DW数据项或数据项列表作用 定义字数据或数据块 列表中的数据项用逗号分开 汇编程序把它们依次存放在从标号地址开始的连续存储单元中 字的高8位在前 低8位在后例 ORG2000HFIRST DW1001H 2002HDW03H 4004HDW3344H 5566H 伪指令 DS命令 DS命令格式 标号 DS数字作用 定义伪初始化数据块 从标号地址开始保留 数字 规定个数的连续字节存储单元 供以后存入数据例 ORG2000HFIRST DS20H则 从地址为2000H的单元开始 保留32个存储单元 伪指令 bit命令 bit命令格式 符号名称bit位地址作用 给位地址赋予一个代替的字符名称例 A1bitP1 0 伪指令 EQU与DATA 赋值命令EQU 先赋值 后使用 格式 符号名称EQU表达式或汇编符号作用 给表达式或符号一个代替的字符名称例 rregEQUR0标号地址赋值命令DATA格式 标号名称DATA表达式作用 此命令把数据 代码地址赋予标号段所规定的字符名称 定义的字符名称可先使用后定义例 addrDATA2000H EQU与DATA示例 合法的 reg1EQUR1reg2EQUR2MASKEQU0FHAAEQU10HAA1EQUAA 1L1DATA1000HRAM2DATA30HRAM3DATARAM2 1 非法的 AAEQU30HAAEQU31HcpyEQUmovreg1DATAr1RAM2DATA1000HRAM2DATA30H 伪指令 HIGH与LOW 取16位数高字节命令HIGH格式 HIGH 表达式 取16位数低字节命令LOW格式 LOW 表达式 4 5汇编语言程序设计 汇编语言程序结构 顺序结构 循环结构 分支结构 4 5 1顺序程序设计 初始化 指令1 指令2 程序结束 顺序程序实例 将20H中的8位无符号数转成3位BCD码 存储在30H 31H两个RAM单元中 FIRSTDATA30HSECONDATA31HORG0000H 复位向量LJMPSTARTORG0100HSTART MOVA 20H A 待转换数据xMOVB 100DIVAB 百位BCD x 100MOVFIRST A 30H 百位MOVA B A x 100的余数y MOVB 10 DIVAB y 10 A中为十位 B中为个位SWAPA 把十位BCD交换到A的高4位ORLA B A高4位中的十位BCD与B中的 个位BCD组合起来MOVSECON A 结果存储31H单元SJMP END 4 5 2分支程序设计 分支程序实例 例4 2 ORG0000HSTART MOVA 30H 取温度值CLRCSUBBA 35 温度值减去35JCNEXT 小于35度转下一步SETBP1 0 否则点亮红灯CLRP1 1CLRP1 2SJMPSTART 继续检测NEXT MOVA 30H 重取温度值CLRCSUBBA 20 温度值减去20JCYE 小于20转点黄灯 SETBP1 1 否则点亮绿灯CLRP1 0CLRP1 2SJMPSTARTYE SETBP1 2 点亮黄灯CLRP1 0CLRP1 1SJMPSTARTEND 散转 散转是一种并行的多分支程序转移结构在同一转移点上 根据不同的输入条件使程序转移向不同的入口点上 散转方法 1 构建转移指令表 用指令JMP A DPTR执行程序转移2 构建转移目标地址表 用指令MOVC装载目标地址至DPTR 用指令JMP A DPTR执行程序转移 散转程序实例 例4 3 ORG0000HSTART MOVDPTR TAB 指向转移指令表MOVA 30H 取30H内容MOVB 3MULAB 30H内容乘以3JMP A DPTR 转向地址 DPTR A TAB LJMPOPR0 转向功能程序1LJMPOPR1 转向功能程序2LJMPOPR2 转向功能程序3OPR0 MOV31H 10H 功能程序1SJMP OPR1 MOV31H 20H 功能程序2SJMP OPR2 MOV31H 30H 功能程序3SJMP 基于地址表方法的例4 3 ORG0000HSTART MOVDPTR TAB 指向转移目标地址表MOVA 30H 取30H内容MOVB 2MULAB 30H内容乘以2MOVR1 A 目标地址表偏移MOVCA A DPTR 取目标地址高位PUSHACC 暂存MOVA R1ADDA 1 地址表偏移 1MOVCA A DPTR 取目标地址低位MOVDPL A POPACC 恢复目标地址高位MOVDPH ACLRAJMP A DPTR 转向地址 DPTR A TAB DWOPR0 OPR1 OPR2OPR0 MOV31H 10H 功能程序1SJMP OPR1 MOV31H 20H 功能程序2SJMP OPR2 MOV31H 30H 功能程序2SJMP END 4 5 3循环程序设计 地址指针和循环变量初始化 循环控制 循环体 地址指针和循环变量修改 地址指针和循环变量初始化 循环控制 循环体 地址指针和循环变量修改 Yes No No Yes 先处理后判断 先判断后处理 循环程序示例 从BLOCK单元开始有一无符号数据块 其长度存放于LEN单元 求出数据块中最大
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临床路径风险预警的虚拟仿真模型构建
- 硕士毕业论文指导老师评语大全
- 业财融合成本管控机制
- 专科生毕业论文写作规范-论文格式-
- 商务管理专业毕业论文范文
- 毕业论文目录及正文格式要求
- 战略成本管理方法
- 新媒体环境下综艺节目发展趋势研究
- 语言学类毕业论文格式
- 合并糖尿病肿瘤患者临床试验血糖管理方案
- 小学英语 外研版(一年级起点) 五年级上册 The Elves and the Shoemaker 绘本课件
- 初中数学大纲与初中数学知识点总结
- 2024黑龙江省建筑安装集团限公司面向社会招聘114人公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- JJG 365-2008电化学氧测定仪
- 停车场引资计划书
- 保卫科月工作总结
- 整本书阅读教学设计案例
- 律师事务所投标书(两份)
- 食品安全风险管控日管控检查清单
- 《思想道德与法治》学习法治思想 提升法治素养-第六章
- AI人工智能应用介绍PPT
评论
0/150
提交评论