MCS-C51的指令系统.ppt

上传人:sh****n 文档编号:6381421 上传时间:2020-02-24 格式:PPT 页数:91 大小:1.44MB
返回 下载 相关 举报
MCS-C51的指令系统.ppt_第1页
第1页 / 共91页
MCS-C51的指令系统.ppt_第2页
第2页 / 共91页
MCS-C51的指令系统.ppt_第3页
第3页 / 共91页
点击查看更多>>
资源描述
2020年2月24日星期一 1 单片机原理及应用 主讲 梁德胜联系方式 dsliang 办公地点 教五楼408室 2020年2月24日星期一 2 常用的编程语言 1 机器语言机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合 机器语言具有灵活 直接执行和速度快等特点 用机器语言编写程序 编程人员要首先熟记所用计算机的全部指令代码和代码的涵义 手编程序时 程序员得自己处理每条指令和每一数据的存储分配和输入输出 还得记住编程过程中每步所使用的工作单元处在何种状态 而且 编出的程序全是些0和1的指令代码 直观性差 还容易出错 2020年2月24日星期一 3 2 汇编语言为了克服机器语言难读 难编 难记和易出错的缺点 人们就用与代码指令实际含义相近的英文缩写词 字母和数字等符号来取代指令代码 于是就产生了汇编语言 所以说 汇编语言是一种用助记符表示的仍然面向机器的计算机语言 汇编语言亦称符号语言 汇编语言由于是采用了助记符号来编写程序 比用机器语言的二进制代码编程要方便些 在一定程度上简化了编程过程 汇编语言的特点是用符号代替了机器指令代码 而且助记符与指令代码一一对应 基本保留了机器语言的灵活性 使用汇编语言能面向机器并较好地发挥机器的特性 得到质量较高的程序 汇编语言中由于使用了助记符号 计算机不能象用机器语言编写的程序一样直接识别和执行 必须通过预先放入计算机的 汇编程序 的加工和翻译 才能变成能够被计算机识别和处理的二进制代码程序 汇编语言像机器指令一样 是硬件操作的控制信息 因而仍然是面向机器的语言 使用起来还是比较繁琐费时 通用性也差 汇编语言是低级语言 但是 汇编语言用来编制系统软件和过程控制软件 其目标程序占用内存空间少 运行速度快 有着高级语言不可替代的用途 2020年2月24日星期一 4 3 高级语言不论是机器语言还是汇编语言都是面向硬件的具体操作的 语言对机器的过分依赖 要求使用者必须对硬件结构及其工作原理都十分熟悉 高级语言是面向用户的语言 无论何种机型的计算机 只要配备上相应的高级语言的编译或解释程序 则用该高级语言编写的程序就可以通用 计算机并不能直接地接受和执行用高级语言编写的源程序 源程序在输入计算机时 通过 翻译程序 翻译成机器语言形式的目标程序 计算机才能识别和执行 每一种高级语言 都有自己规定的专用符号 英文单词 语法规则和语句结构 高级语言与自然语言更接近 而与硬件功能相分离 便于广大用户掌握和使用 高级语言的通用性强 兼容性好 便于移植 2020年2月24日星期一 5 第3章MCS 51指令系统 3 1指令格式及常用符号3 2MCS 51的寻址方式3 3数据传送类指令 29条 3 4算术运算类指令 24条 3 5逻辑运算与循环类指令 24条 3 6位操作类指令 17条 3 7控制转移类指令 17条 2020年2月24日星期一 6 3 1指令格式及常用符号 3 1 1机器指令的编码格式一 单字节指令1 8位编码仅为操作码 如 INCA该指令的编码为 00000100B 其十六进制表示为04H 累加器A隐含在操作码中 指令的功能是累加器A的内容加1 注意 在指令中用 A 表示累加器 而用 ACC 表示累加器对应的地址 E0H 指令要指明操作和操作对象 2020年2月24日星期一 7 2 8位编码含有操作码和寄存器编码高5位为操作码 低3位为存放操作数的寄存器编码 如 MOVA R0编码为11101000B 其十六进制表示为E8H 低3位000为寄存器R0的编码 功能是将当前工作寄存器R0中的数据传送到累加器A中 如何知道是哪一组寄存器 2020年2月24日星期一 8 二 双字节指令第一字节表示操作码 第二个字节表示参与操作的数据或数据存放的地址 如 MOVA 50H编码为01110100B 01010000B 其十六进制表示为74H 50H 功能是将立即数 50H 传送到累加器A中 注意 指令中带 的是立即数 不带 的是地址 50H是存储在程序区还是数据区 2020年2月24日星期一 9 三 三字节指令指令的第一字节表示该指令的操作码 后两个字节表示参与操作的数据或数据存放的地址 如 MOV20H 50H编码为01110101B 00100000B 01010000B 其十六进制表示为75H 20H 50H 功能是将立即数 50H 传送到内部RAM的20H单元中 如何知道是传输到内部RAM中 2020年2月24日星期一 10 3 1 2符号指令的格式一般格式为 操作助记符 目的操作数 源操作数 注释 多数指令为两操作数指令 当指令操作数隐含在操作助记符中时 在形式上这种指令无操作数 另有一些指令为单操作数指令或三操作数指令 指令的一般格式中使用了可选择符号 包含的内容因指令的不同可以有或无 在两个操作数的指令中 通常目的操作数写在左边 源操作数写在右边 2020年2月24日星期一 11 如 指令ANLA 40H功能是将立即数 40H 同累加器A中的数进行 与 操作 结果送回累加器 ANL为 与 操作的助记符 立即数 40H 为源操作数 累加器A为目的操作数 注 在指令中 多数情况下累加器用 A 表示 仅在直接寻址方式中 用 ACC 表示累加器在SFR区的具体地址E0H 试比较 指令MOVA 30H的机器码为74H 30H 而指令MOVACC 30H的机器码为75H E0H 30H 两个指令的执行效率是不一样的前一个为单周期指令而后一个为双周期指令 2020年2月24日星期一 12 3 1 3符号指令及其注释中常用的符号Rn n 0 7 当前选中的工作寄存器组中的寄存器R0 R7之一 Ri i 0 1 当前选中的工作寄存器组中的寄存器R0或R1 间址寄存器前缀 data 8位立即数 data16 16位立即数 direct 片内低128个RAM单元地址及SFR地址 可用符号名称表示 2020年2月24日星期一 13 addr11 11位目的地址 addr16 16位目的地址 rel 补码形式表示的8位地址偏移量 值在 128 127范围内 bit 片内RAM位地址 SFR的位地址 可用符号名称表示 位操作数的取反操作前缀 表示 地址单元或寄存器中的内容 表示以 单元或寄存器内容为地址间接寻址单元的内容 将箭头右边的内容送入箭头左边的单元中 2020年2月24日星期一 14 3 2MCS 51的寻址方式 寻址方式是寻找操作数或指令的地址的方式 寻址方式包含两方面内容 一是操作数的寻址 二是指令地址的寻址 如转移指令 调用指令 寻址方式有七种 即 寄存器寻址 直接寻址 寄存器间接寻址 立即寻址 基址寄存器加变址寄存器变址寻址 相对寻址和位寻址对于两操作数指令 源操作数有寻址方式 目的操作数也有寻址方式 若不特别声明 我们后面提到的寻址方式均指源操作数的寻址方式 2020年2月24日星期一 15 2020年2月24日星期一 16 操作数存放在寄存器中 指令中直接给出该寄存器名称的寻址方式称为寄存器寻址 采用寄存器寻址可以获得较高的传送和运算速度 寄存器可以是 R0 R7 累加器A 注 使用符号ACC表示累加器时属于直接寻址 寄存器B 以A B寄存器对形式出现 数据指针DPTR 3 2 1寄存器寻址 如 MOVA R0 2020年2月24日星期一 17 指令操作码之后的字节存放的是操作数的地址 操作数本身存放在该地址指示的存储单元中的寻址方式称为直接寻址 在直接寻址方式中的SFR经常采用符号形式表示 寻址空间为 片内RAM低128字节 以地址形式表示 SFR 以地址或SFR的符号形式表示 3 2 2直接寻址 如 MOVA 50H 注 直接寻址是特殊功能寄存器唯一的访问方式 2020年2月24日星期一 18 寄存器中的内容为地址 从该地址去取操作数的寻址方式称为寄存器间接寻址 寄存器间接寻址的存储空间为片内RAM或片外RAM 片内RAM的数据传送采用 MOV 类指令 间接寻址寄存器采用寄存器R0或R1 堆栈操作时采用SP 片外RAM的数据传送采用 MOVX 类指令 这时间接寻址寄存器有两种选择 一是采用R0和R1作间址寄存器 这时R0或R1提供低8位地址 由P2口提供高8位地址 二是采用DPTR作为间址寄存器 3 2 3寄存器间接寻址 注意 访问片内片外RAM的MOV指令不同 2020年2月24日星期一 19 寄存器间接寻址对应的空间为 片内RAM 采用 R0 R1或SP 片外RAM 采用 R0 R1或 DPTR 如 MOVA R0 2020年2月24日星期一 20 指令编码中直接给出操作数的寻址方式称为立即寻址 在这种寻址方式中 紧跟在操作码之后的操作数称为立即数 立即数可以为一个字节 也可以是两个字节 并要用符号 来标识 由于立即数是一个常数 所以只能作为源操作数 立即寻址所对应的寻址空间为 ROM 3 2 4立即寻址 如 MOVA 50H 2020年2月24日星期一 21 以一个基地址加上一个偏移量地址形成操作数地址的寻址方式称为变址寻址 在这种寻址方式中 以数据指针DPTR或程序计数器PC作为基址寄存器 累加器A作为偏移量寄存器 基址寄存器的内容与偏移量寄存器的内容之和作为操作数地址 变址寻址所对应的寻址空间为 ROM 3 2 5变址寻址 如 MOVCA A DPTR 2020年2月24日星期一 22 相对寻址是以程序计数器PC的当前值 指读出该2字节或3字节的跳转指令后 PC指向的下条指令的地址 为基准 加上指令中给出的相对偏移量rel形成目标地址的寻址方式 rel是一个带符号的8位二进制数 取值范围是 128 127 以补码形式置于操作码之后存放 3 2 6相对寻址 如 JCrel rel 75H 2020年2月24日星期一 23 对位地址中的内容进行操作的寻址方式称为位寻址 采用位寻址指令的操作数是8位二进制数中的某一位 指令中给出的是位地址 位寻址方式实质属于位的直接寻址 寻址空间为 片内RAM的20H 2FH单元中的128可寻址位 SFR的可寻址位 习惯上 特殊功能寄存器的寻址位常用符号位地址表示 如 CLRACC 0MOV30H C 3 2 7位寻址 注意 如何来区分是位地址还是字节地址是通过指令来判断 2020年2月24日星期一 24 3 3数据传送类指令 29条 传送类指令占有较大的比重 数据传送是进行数据处理的最基本的操作 这类指令一般不影响标志寄存器PSW的状态 传送类指令可以分成两大类 一是采用MOV操作符 称为一般传送指令 二是采用非MOV操作符 称为特殊传送指令 如 MOVC MOVX PUSH POP XCH XCHD及SWAP 2020年2月24日星期一 25 3 3 1一般传送指令 图3 1MCS 51传送指令示意图 2020年2月24日星期一 26 3 3 1一般传送指令 2020年2月24日星期一 27 一 16位传送这条指令的功能是将源操作数data16 通常是地址常数 送入目的操作数DPTR中 源操作数的寻址方式为立即寻址 例如 执行指令MOVDPTR 1234H后 DPH 12H DPL 34H 2020年2月24日星期一 28 二 8位传送 在5种源字节中 只有 data不能用作目的字节 所以可以用4种目的字节为基础构造4类指令 相应的源字节选择依据是 源字节与目的字节不相同 寄存器寻址与寄存器间接寻址间不相互传送 指的是工作寄存器 寄存器寻址与寄存器间接寻址间及其本身之间都不相互传送 2020年2月24日星期一 29 1 以A为目的 这组指令的功能是把源字节送入累加器中 源字节的寻址方式分别为直接寻址 寄存器间接寻址 寄存器寻址和立即寻址四种基本寻址方式 例 若 R1 20H 20H 55H 执行指令MOVA R1后 A 55H 2020年2月24日星期一 30 2 以Rn为目的 这组指令的功能是把源字节送入寄存器Rn中 源字节的寻址方式分别为立即寻址 直接寻址和寄存器寻址 由于目的字节为工作寄存器 所以源字节不能是工作寄存器及其间址方式寻址 例 若 50H 40H 执行指令MOVR6 50H后 R6 40H 2020年2月24日星期一 31 3 以direct为目的 这组指令的功能是把源字节送入direct中 源字节的寻址方式分别为立即寻址 直接寻址 寄存器间接寻址和寄存器寻址 例 若 R1 50H 50H 18H 执行指令MOV40H R1后 40H 18H 2020年2月24日星期一 32 4 以 Ri为目的 这组指令的功能是把源字节送入Ri内容为地址的单元 源字节寻址方式为立即寻址 直接寻址和寄存器寻址 因目的字节采用寄存器间接寻址 故源字节不能是寄存器及其间址寻址 例 若 R1 30H A 20H 执行指令MOV R1 A后 30H 20H 2020年2月24日星期一 33 3 3 2特殊传送指令 特殊传送指令的操作符为 MOVC MOVX PUSH POP XCH XCHD和SWAP 功能分别为 ROM查表 外部RAM读写 堆栈操作和交换指令 2020年2月24日星期一 34 2020年2月24日星期一 35 一 ROM查表1 DPTR内容为基址MOVCA A DPTR A A DPTR 该指令首先执行16位无符号数加法 将获得的基址与变址之和作为16位的程序存储器地址 然后将该地址单元的内容传送到累加器A 指令执行后DPTR的内容不变 2 PC内容为基址MOVCA A PC A A PC 取出该单字节指令后PC的内容增1 以增1后的当前值去执行16位无符号数加法 将获得的基址与变址之和作为16位的程序存储器地址 然后将该地址单元的内容传送到累加器A 指令执行后PC的内容不变 2020年2月24日星期一 36 二 读写片外RAM1 读片外RAMMOVXA DPTR A DPTR MOVXA Ri A Ri 第一条指令以16位DPTR为间址寄存器读片外RAM 可以寻址整个64K字节的片外RAM空间 指令执行时 在DPH中的高8位地址由P2口输出 在DPL中的低8位地址由P0口分时输出 并由ALE信号锁存在地址锁存器中 第二条指令以R0或R1为间址寄存器 也可以读整个64K字节的片外RAM空间 指令执行时 低8位地址在R0或R1中由P0口分时输出 ALE信号将地址信息锁存在地址锁存器中 高8位地址由P2口提供 读片外RAM的MOVX操作 使P3 7引脚输出的信号选通片外RAM单元 相应单元的数据从P0口读入累加器中 2020年2月24日星期一 37 2 写片外RAMMOVX DPTR A DPTR A MOVX Ri A Ri A 第一条指令以16位DPTR为间址寄存器写外部RAM 可以寻址整个64K字节的片外RAM空间 指令执行时 在DPH中高8位地址由P2口输出 在DPL中的低8位地址 由P0口分时输出 并由ALE信号锁存在地址锁存器中 第二条指令以R0或R1为间址寄存器 也可以写整个64K字节的片外RAM空间 指令执行时 低8位地址在R0或R1中由P0口分时输出 ALE信号将地址信息锁存在地址锁存器中 高8位地址由P2口提供 写片外RAM的 MOVX 操作 使P3 6引脚的信号有效 累加器A的内容从P0口输出并写入选通的相应片外RAM单元 注 当片外扩展的I O端口映射为片外RAM地址时 也要利用这4条指令进行数据的输入输出 2020年2月24日星期一 38 三 堆栈操作堆栈是在内部RAM中按 后进先出 的规则组织的一片存储区 此区的一端固定 称为栈底 另一端是活动的 称为栈顶 栈顶的位置 地址 由栈指针SP指示 即SP的内容是栈顶的地址 在80C51中 堆栈的生长方向是向上的 地址增大 系统复位时 SP的内容为07H 通常用户应在系统初始化时对SP重新设置 SP的值越小 堆栈的深度越深 PUSHdirect SP SP 1 SP direct POPdirect direct SP SP SP 1例 若 SP 07H 40H 88H 执行指令PUSH40H后 SP 08H 08H 88H 2020年2月24日星期一 39 四 数据交换对于单一的MOV类指令 传送通常是单向的 即数据是从一处 源 到另一处 目的 的拷贝 而交换类指令完成的传送是双向的 是两字节间或两半字节间的双向交换 1 字节交换 例 若 R0 80H A 20H 执行指令XCHA R0后 A 80H R0 20H 2020年2月24日星期一 40 2 半字节交换 XCHD指令的功能是间址操作数的低半字节与A的低半字节内容互换 SWAP指令的功能是累加器的高低4位互换 例 若 R0 30H 30H 67H A 20H 执行指令XCHDA R0指令后 A 27H 30H 60H 若 A 30H 执行指令SWAPA后 A 03H 2020年2月24日星期一 41 3 4算术运算类指令 24条 算术运算指令可以完成加 减 乘 除及加1和减1等运算 这类指令多数以A为源操作数之一 同时又使A为目的操作数 2020年2月24日星期一 42 2020年2月24日星期一 43 进位 借位 标志CY为无符号整数的多字节加法 减法 移位等操作提供了方便 溢出标志OV可方便的控制补码运算 辅助进位标志AC用于BCD码运算 算术运算操作将影响PSW中的OV CY AC和P等 2020年2月24日星期一 44 3 4 1加法 一 不带进位加 CY 和的D7位有进位时 CY 1 否则 CY 0 AC 和的D3位有进位时 AC 1 否则 AC 0 OV 和的D7 D6位只有一个有进位时 OV 1 溢出表示运算的结果超出了数值所允许的范围 如 两个正数相加结果为负数或两个负数相加结果为正数时属于错误结果 此时 OV 1 P 累加器ACC中 1 的个数为奇数时 P 1 为偶数时 P 0 11001100 01001000 100010100 2020年2月24日星期一 45 例若 A 84H 30H 8DH 执行指令ADDA 30H之后 由于 即 A 11H CY 1 AC 1 OV 1 D7有进位 D6无进位 P 0 2020年2月24日星期一 46 二 带进位加 指令的功能是把源操作数与累加器A的内容相加再与进位标志CY的值相加 结果送入目的操作数A中 加的进位标志CY的值是在该指令执行之前已经存在的进位标志的值 而不是执行该指令过程中产生的进位 2020年2月24日星期一 47 三 增1 指令的功能是把源操作数的内容加1 结果再送回原单元 这些指令仅INCA影响P标志 其余指令都不影响标志位的状态 2020年2月24日星期一 48 二 十进制编码 BCD码BCD Binary CodedDecimal 码又称为 二 十进制编码 专门解决用二进制数表示十进数的问题 最常用的是8421编码 其方法是用4位二进制数表示1位十进制数 自左至右每一位对应的位权是8 4 2 1 1 压缩BCD码压缩BCD码的每一位用4位二进制表示 0000 1001表示0 9 一个字节表示两位十进制数 例如 二进制数1000 1001B 采用压缩BCD码表示为十进制数89D 2 非压缩BCD码非压缩BCD码用一个字节表示一位十进制数 高4位总是0000 低4位的0000 1001表示0 9 例如 十进制数89D 采用非压缩BCD码表示为二进制数是 0000100000001001B 2020年2月24日星期一 49 四 十进制调整DAA指令的功能是对累加器A中刚进行的两个BCD码的加法的结果进行十进制调整 两个压缩的BCD码按二进制相加后 必须经过调整方能得到正确的压缩BCD码的和 调整要完成的任务是 1 当累加器A中的低4位数出现了非BCD码 1010 1111 或低4位产生进位 AC 1 则应在低4位加6调整 以产生低4位正确的BCD结果 2 当累加器A中的高4位数出现了非BCD码 1010 1111 或高4位产生进位 CY 1 则应在高4位加6调整 以产生高4位正确的BCD结果 十进制调整指令执行后 PSW中的CY表示结果的百位值 2020年2月24日星期一 50 例若 A 01010110B 表示的BCD码为 56 BCD R2 01100111B 表示的BCD码为 67 BCD CY 0 执行以下指令 ADDA R2DAA得到 A 00100011B 即 23 BCD 且 CY 1 即 结果为BCD数123 应该注意 DA指令不能对减法进行十进制调整 2020年2月24日星期一 51 3 4 2减法 一 带借位减 CY 差的位7需借位时 CY 1 否则 CY 0 AC 差的位3需借位时 AC 1 否则 AC 0 OV 若位6有借位而位7无借位或位7有借位而位6无借位时 OV 1 注意 如要用此组指令完成不带借位减法 只需先清CY为0 第一次进行减法时CY应清零 2020年2月24日星期一 52 例若 A C9H R2 54H CY 1 执行指令SUBBA R2之后 由于 即 A 74H CY 0 AC 0 OV 1 位6有借位 位7无借位 P 0 2020年2月24日星期一 53 二 减1 这组指令的功能是把操作数的内容减1 结果再送回原单元 这组指令仅DECA影响P标志 其余指令都不影响标志位的状态 2020年2月24日星期一 54 3 4 3乘法 MULAB 累加器A与B寄存器相乘该指令的功能是将累加器A与寄存器B中的无符号8位二进制数相乘 乘积的低8位留在累加器A中 高8位存放在寄存器B中 当乘积大于FFH时 溢出标志位 OV 1 而标志CY总是被清0 例若 A 50H B A0H 执行指令MULAB之后 A 00H B 32H OV 1 CY 0 2020年2月24日星期一 55 3 4 4除法 DIVAB 累加器A除以寄存器B该指令的功能是将累加器A中的无符号8位二进制数除以寄存器B中的无符号8位二进制数 商的整数部分存放在累加器A中 余数部分存放在寄存器B中 当除数为0时 则结果的A和B的内容不定 且溢出标志位 OV 1 而标志CY总是被清0 例若 A FBH 251 B 12H 18 执行指令DIVAB之后 A 0DH B 11H OV 0 CY 0 2020年2月24日星期一 56 MOV23H 30HMOV12H 34HMOVR0 23HMOVR7 22HMOVR1 12HMOVA R0MOV34H R1 23H 30H 12H 34H R0 23H R7 22H R1 12H A 30H 34H 34H 执行程序前sp 07H 2020年2月24日星期一 57 MOV45H 34HMOVDPTR 6712HMOV12H DPHMOVR0 DPLMOVA R0PUSH12HPUSH45HPOP60HPOP70H 45H 34H DPTR 6712H 12H 67H R0 12H A 67H 08H 67H 09H 34H 60H 34H 70H 67H 12H 67H 45H 34H 2020年2月24日星期一 58 3 5逻辑运算与循环类指令 24条 逻辑运算指令可以完成与 或 异或 清0和取反操作 当以累加器A为目的操作数时 对P标志有影响 循环指令是对累加器A的循环移位操作 包括左 右方向以及带与不带进位位等移位方式 移位操作时 带进位的循环移位对CY和P标志有影响 累加器清0操作对P标志有影响 2020年2月24日星期一 59 2020年2月24日星期一 60 2020年2月24日星期一 61 3 5 1逻辑与 前2条指令的功能是把源操作数与直接地址指示的单元内容相与 结果送入直接地址指示的单元 后4条指令的功能是把源操作数与累加器A的内容相与 结果送入累加器A中 例若 A C3H R0 AAH 执行指令ANLA R0之后 A 82H 2020年2月24日星期一 62 前2条指令的功能是把源操作数与直接地址指示的单元内容相或 结果送入直接地址指示的单元 后4条指令的功能是把源操作数与累加器A的内容相或 结果送入累加器A中 例若 A C3H R0 55H 执行指令ORLA R0之后 A D7H 3 5 2逻辑或 2020年2月24日星期一 63 3 5 3逻辑异或 前2条指令的功能是把源操作数与直接地址指示的单元内容异或 结果送入直接地址指示的单元 后4条指令的功能是把源操作数与累加器A的内容异或 结果送入累加器A中 例若 A C3H R0 AAH 执行指令XRLA R0之后 A 69H 2020年2月24日星期一 64 3 5 4累加器清0和取反 A 0 A 这两条指令的功能分别是把累加器A的内容清0和取反 结果仍在A中 例若 A A5H 执行指令CLRA之后 A 00H 2020年2月24日星期一 65 3 5 5累加器循环移位 2020年2月24日星期一 66 有时 累加器A内容乘2 的任务可以利用指令RLCA方便地完成 例 若 A BDH 10111101B CY 0 执行指令RLCA后 CY 1 A 01111010B 7AH CY 1 结果为 17AH 378 2 BDH 189 2020年2月24日星期一 67 3 6位操作类指令 17条 位操作又称布尔操作 它是以位为单位进行的各种操作 位操作指令中的位地址有4种表示形式 直接地址方式 如 0D5H 点操作符方式 如 0D0H 5 PSW 5等 位名称方式 如 F0 伪指令定义方式 如 MYFLAGBITF0 以上几种形式表示的都是PSW中的位5 与字节操作指令中累加器ACC用字符 A 表示类似的是 在位操作指令中 位累加器要用字符 C 表示 注 在位操作指令中CY与具体的直接位地址D7H对应 2020年2月24日星期一 68 1 1 2020年2月24日星期一 69 MOVbit C bit CY MOVC bit CY bit 这两条指令可以实现指定位地址中的内容与位累加器CY的内容的相互传送 例若 CY 1 P3 11000101B P1 00110101B 执行以下指令 MOVP1 3 CMOVC P3 3MOVP1 2 C结果为 CY 0 P3的内容未变 P1的内容变为00111001B 3 6 1位传送 2020年2月24日星期一 70 一 位清0这两条指令可以实现位地址内容和位累加器内容的清0 例若 P1 10011101B 执行指令CLRP1 3后 结果为 P1 10010101B 3 6 2位状态设置 2020年2月24日星期一 71 二 位置位这两条指令可以实现地址内容和位累加器内容的置位 例若 P1 10011100B 执行指令SETBP1 0后 P1 10011101B 2020年2月24日星期一 72 一 位逻辑 与 这两条指令可以实现位地址单元内容或取反后的值与位累加器的内容 与 操作 操作的结果送位累加器C 例若 P1 10011100B CY 1 执行指令ANLC P1 0后 结果为 P1内容不变 而 CY 0 3 6 3位逻辑运算 2020年2月24日星期一 73 二 位逻辑 或 这两条指令可以实现位地址单元内容或取反后的值与位累加器的内容 或 操作 操作的结果送位累加器C 2020年2月24日星期一 74 三 位取反这两条指令可以实现位地址单元内容和位累加器内容的取反 2020年2月24日星期一 75 一 判CY转移这两条指令的功能是对进位标志位CY进行检测 当 CY 1 第一条指令 或 CY 0 第二条指令 程序转向PC当前值与rel之和的目标地址去执行 否则程序将顺序执行 3 6 4位判跳 条件转移 2020年2月24日星期一 76 二 判bit转移这三条指令的功能是对指定位bit进行检测 当 bit 1 第一和第二条指令 或 bit 0 第三条指令 程序转向PC当前值与rel之和的目标地址去执行 否则程序将顺序执行 对于第二条指令 当条件满足时 指定位为1 还具有将该指定位清0的功能 2020年2月24日星期一 77 3 7控制转移类指令 17条 通常情况下 程序的执行是顺序进行的 但也可以根据需要改变程序的执行顺序 这种情况称作程序转移 控制程序的转移要利用转移指令 8051的转移指令有无条件转移 条件转移及子程序调用与返回等 2020年2月24日星期一 78 2020年2月24日星期一 79 一 短跳转AJMPaddr11 PC PC 2 PC10 0 addr11该指令执行时 先将PC的内容加2 这时PC指向的是AJMP的下一条指令 然后把指令中11位地址码传送到PC10 0 而PC15 11保持原内容不变 在目标地址的11位中 前3位为页地址 后8位为页内地址 每页含256个单元 当前PC的高5位 即下条指令的存储地址的高5位 可以确定32个2KB段之一 所以 AJMP指令的转移范围为包含AJMP下条指令在内的2KB区间 3 7 1无条件转移 2020年2月24日星期一 80 2020年2月24日星期一 81 二 长跳转LJMPaddr16 PC PC 3 PC addr16第一字节为操作码 该指令执行时 将指令的第二 三字节地址码分别装入指令计数器PC的高8位和低8位中 程序无条件地转移到指定的目标地址去执行 LJMP提供的是16位地址 因此程序可以转向64KB的程序存储器地址空间的任何单元 例若标号 NEWADD 表示转移目标地址1234H 执行指令LJMPNEWADD时 两字节的目标地址将装入PC中 使程序转向目标地址1234H处运行 2020年2月24日星期一 82 三 相对转移SJMPrel PC PC 2 PC PC rel第一字节为操作码 第二字节为相对偏移量rel rel是一个带符号的偏移字节数 2的补码 取值范围为 127 128 负数表示反向转移 正数表示正向转移 需要指出的是 用汇编语言编程时 指令中的相对地址往往用想转移去的地址标号 符号地址 表示 汇编程序在汇编过程中自动计算偏移地址 并填入指令代码中 在手工汇编时 可用转移目标地址减转移指令所在的源地址 再减转移指令字节数2得到偏移字节数rel 例若标号 NEWADD 表示转移目标地址0123H PC的当前值为0100H 执行指令SJMPNEWADD后 程序将转向0123H处执行 此时rel 0123H 0100 2 21H 2020年2月24日星期一 83 四 散转移JMP A DPTR PC PC 1 PC A DPTR 该指令具有散转功能 可以代替许多判别跳转指令 其转移地址由数据指针DPTR的16位数和累加器A的8位数进行无符号数相加形成 并直接装入PC 该指令执行时对标志位无影响 例已知累加器A中存放有待处理命令编号0 3 程序存储器存放有起始地址为PMTB的3字节长转移指令表 编写程序使机器按照累加器A中的命令编号转去执行相应的命令程序 PM MOVR1 ARLAADDA R1MOVDPTR PMTBJMP A DPTRPMTB LJMPPM0LJMPPM1LJMPPM2LJMPPM3 2020年2月24日星期一 84 3 7 2条件转移 一 累加器判0转移 指令的功能是对累加器A的内容为0和不为0进行检测并转移 当不满足各自的条件时 程序继续往下执行 当各自的条件满足时 程序转向指定的目标地址 目标地址的计算与SJMP指令情况相同 指令执行时对标志位无影响 例若累加器A原始内容为00H 则 JNZL1 由于A的内容为00H 所以程序往下执行INCA JNZL2 由于A的内容已不为0 所以程序转向L2处执行 2020年2月24日星期一 85 二 比较不相等转移 这组指令的功能是对指定的目的字节和源字节进行比较 若它们的值不相等则转移 转移的目标地址为当前的PC值加3后 再加指令的第三字节偏移量rel 若目的字节的内容大于源字节的内容 则进位标志清0 若目的字节的内容小于源字节的内容 则进位标志置1 若目的字节的内容等于源字节的内容 程序将继续往下执行 2020年2月24日星期一 86 三 减1不为0转移 通常程序员把内部RAM单元用作程序循环计数器 这组指令每执行一次 便将目的操作数的循环控制单元的内容减1 并判其是否为0 若不为0 则转移到目标地址继续循环 若为0 则结束循环 程序往下执行 2020年2月24日星期一 87 例 有一段程序如下 MOV23H 0AHCLRALOOPX ADDA 23HDJNZ23H LOOPXSJMP 该程序执行后 A 10 9 8 7 6 5 4 3 2 1 37H 2020年2月24日星期一 88 3 7 3调用与转移 这两条指令可以实现子程序的短调用和长调用 目标地址的形成方式与AJMP和LJMP相似 这两条指令的执行不影响任何标志 一 调用 2020年2月24日星期一 89 指令执行时 首先获得下一条指令的地址 并把它压入堆栈 先低字节 后高字节 后 将相应子程序的首地址赋给PC 转向执行子程序 ACALL指令执行时 被调用的子程序的首址必须设在包含当前指令 即调用指令的下一条指令 的第一个字节在内的2K字节范围内的程序存储器中 LCALL指令执行时 被调用的子程序的首址可以设在64K字节范围内的程序存储器空间的任何位置 例若 SP 07H 标号 XADD 表示的实际地址为0345H PC的当前值为0123H 执行指令ACALLXADD后 PC 2 0125H 其低8位的25H压入堆栈的08H单元 其高8位的01H压入堆栈的09H单元 PC 0345H 程序转向目标地址0345H处执行 2020年2月24日星期一 90 RET指令的功能是从堆栈中弹出由调用指令压入堆栈保护的断点地址 并送入指令计数器PC 从而结束子程序的执行 程序返回到断点处继续执行 RETI指令是专用于中断服务程序返回的指令 除正确返回中断断点处执行主程序以外 并有清除内部相应的中断状态寄存器 以保证正确的中断逻辑 的功能 二 返回 2020年2月24日星期一 91 3 7 4空操作 NOP PC PC 1这条指令不产生任何控制操作 只是将程序计数器PC的内容加1 该指令在执行时间上要消耗1个机器周期 在存储空间上可以占用一个字节 因此 常用来实现较短时间的延时
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!