资源预览内容
第1页 / 共112页
第2页 / 共112页
第3页 / 共112页
第4页 / 共112页
第5页 / 共112页
第6页 / 共112页
第7页 / 共112页
第8页 / 共112页
第9页 / 共112页
第10页 / 共112页
亲,该文档总共112页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1 第三章51系列指令系统和程序设计方法 本章要求 1了解指令格式2掌握寻址方式3熟悉各种操作指令及使用方法4掌握51汇编语言程序设计方法 2 3 1指令系统概述 一汇编指令格式标号 操作码 目的操作数 源操作数 注释 3 双字节指令 用一个字节表示操作码 另一个字节表示操作数或操作数所在的地址 格式为 操作码 立即数或地址 4 三字节指令 一个字节操作码 两个字节操作数 格式为 操作码 立即数或地址 立即数或地址 5 二伪指令1定位伪指令ORGmm指出在该伪指令后的指令的汇编地址2汇编结束伪指令END3赋值伪指令符号名EQU表达式 或寄存器名 4位地址赋值伪指令符号名BIT位地址 6 5定义字节伪指令DBx1 x2 xn或 字符串 Xi为单字节数据 它为十进制数或十六进制数 也可为一个表达式 6定义字伪指令DWY1 Y2 YnYi为双字节数据 它为十进制数或十六进制数 也可为一个表达式 7 三常用缩写符号 1 Ri和Rn 表示当前工作寄存器区中的工作寄存器 i取0或1 表示R0或R1 n取0 7 表示R0 R7 data 表示包含在指令中的8位立即数 data16 表示包含在指令中的16位立即数 rel 以补码形式表示的8位相对偏移量 范围为 128 127 主要用在相对寻址的指令中 8 5 addr16和addr11 分别表示16位直接地址和11位直接地址 6 direct 表示直接寻址的地址 7 bit 表示可位寻址的直接位地址 8 X 表示X寄存器中的内容 X为寄存器名 9 X 表示以X寄存器的内容为地址的存储器单元内容 即 X 作地址 该地址单元的内容用 X 表示 9 3 2寻址方式 一寄存器寻址寄存器寻址是对由指令选定的工作寄存器 R0 R7 ACC B DPTR CY中的数进行读 写 其中R0 R7由操作码低3位表示 ACC B DPTR CY则隐含在操作码中 例 MOVA R1 10 二直接寻址直接寻址是指令直接给出操作数地址 该地址指出了参与运算或传送的数据所在的字节单元或位的地址 例 MOVA 65H可访问SFR 内部数据存储器的低128字节 位地址空间 注意 若直接寻址的地址是SFR中的某一个时 可用名称符号MOVA TH0MOVA 8CH 11 三寄存器间接寻址寄存器间接寻址 用符号 表示 是将指定的寄存器内容为地址 由该地址所指定的单元内容作为操作数 例 MOVA R0用R0 R1来寻址内部RAM 00 0FFH 用R0 R1 DPTR来访问外部RAM 强调 寄存器中的内容不是操作数本身 而是操作数的地址 到该地址单元中才能得到操作数 寄存器起地址指针的作用 12 若R1中的内容为80H 片内RAM地址为80H的单元中的内容为2FH 则执行该指令后 片内RAM80H单元的内容2FH被送到A中 例 MOVA R1 13 四立即数寻址立即寻址是由指令直接给出操作数来寻址 即操作数包含在指令字节中 例 MOVA 62H 注 为立即数指示符号 该寻址方式多为双字节指令 但有一条为3字节MOVDPTR 3F6AH 14 五变址间接寻址以PC或DPTR作为基址寄存器 以累加器A作为变址寄存器 这二者内容之和为程序存储器地址 多用于查表指令 仅有3条 MOVCA A DPTR 单字节 MOVCA A PCJMP A DPTR只能对ROM进行寻址 15 16 六相对寻址以PC的当前值为基准 实际为本指令之后的字节地址 加上指令中给出的相对偏移量形成有效地址 用于访问ROM例 JC80H注意 偏移量是有符号数 在 128 127之间 17 七位寻址对片内RAM的位寻址区和某些可进行位寻址的SFR中的任一二进制位进行位操作时的寻址方式 例 SETB3DH 18 位地址和字节地址的区分通过指令区分 MOVA 20HMOVC 20H可供位寻址的区域片内RAM的20H 2FH为位寻址空间 00 7FH 某些SFR 凡是地址能被8整除的SFR位地址的表示方法MOVC ACC 7MOV20H CMOV24H 0 CSETBTR0 19 总结 1立即寻址 ROM2直接寻址 片内RAM低128B和SFR 位地址空间3寄存器寻址 工作寄存器R0 R7 A B C DPTR4寄存器间接寻址 片内RAM低128B和片外RAM 20 5变址间接寻址 ROM6相对寻址 ROM256B范围7位寻址 片内RAM的20H 2FHB地址和部分SFR 21 3 3指令类型 51系列汇编语言是用42种操作码助记符描述33种操作功能 一种功能可能有几种助记符 与寻址方式结合共产生111条指令 数据传送类 29条算术运算类 24条逻辑运算类 24条控制转移类 17条位操作类 17条 22 3 4数据传送指令 23 24 3 4 1内部数据一般传送指令该类指令的功能是实现数在片内RAM单元之间 寄存器之间 寄存器与RAM单元之间的传送 所有指令具有统一的格式 MOV 操作码助记符都是 MOV 目的操作数和源操作数不同寻址方式的组合就派生出该类的全部指令 记忆这类指令的关键在于掌握两个操作数的各种寻址方式的组合关系 25 访问片内RAM的一般传送指令操作关系图 访问片内RAM的一般传送指令操作关系图 26 一累加器为目的操作数的指令MOVA RnMOVA directMOVA RiMOVA data 27 二寄存器为目的操作数的指令MOVRn AMOVRn directMOVRn data 28 三直接地址为目的操作数的指令MOVdirect A例 MOV20H AMOVdirect RnMOV20H R1MOVdirect1 direct2MOV20H 30HMOVdirect RiMOV20H R1MOVdirect dataMOV20H 34H 29 四间接地址为目的操作数的指令MOV Ri A例 MOV R0 AMOV Ri directMOV R1 20HMOV Ri dataMOV R0 34H五16位数据传送指令MOVDPTR data16 30 例1设内部RAM 30H 40H 40H 10H 10H 00H P1 CAH 分析以下程序执行后各单元及寄存器 P2口的内容 MOVR0 30H R0 30HMOVA R0 A R0 MOVR1 A R1 A MOVB R1 B R1 MOV R1 P1 R1 P1 MOVP2 P1 P2 P1 MOV10H 20H 10H 20H执行上述指令后的结果为 R0 30H R1 A 40H B 10H 40H P1 P2 CAH 10H 20H 31 3 4 2片内特殊传送指令1 堆栈操作指令堆栈操作有进栈和出栈 即压入和弹出数据 常用于保存或恢复现场 进栈 出栈指令用于保存 恢复片内RAM单元 低128字节 或特殊功能寄存器SFR的内容 32 PUSHdirect sp 1sp direct sp POPdirect sp direct sp 1sp注意 1留出足够的存储单元作栈区 避免数据重叠 2使用堆栈时 一般要重设SP的初始值 由于压入堆栈的第一个数必须存放在SP 1存储单元 故实际栈顶是在SP 1所指出的单元 33 例 已知片内RAM50H单元中存放数值AAH 设堆栈指针为30H 把此数值压入堆栈 然后再弹出到40H单元中 MOVSP 30H 30HSPPUSH50H SP 1SP 50H 31H POP40H 31H 40H SP 1SP40单元内装入数值AAH SP终值为30H 34 2 数据交换指令数据传送指令一般都是将操作数自源地址单元传送到目的地址单元 指令执行后 源地址单元的操作数不变 目的地址单元的操作数则修改为源地址单元的操作数 交换指令数据作双向传送 涉及传送的双方互为源地址 目的地址 指令执行后每方的操作数都修改为另一方的操作数 因此 两操作数均未冲掉 丢失 数据交换指令共有如下5条指令 35 36 例3设 R0 30H 30H 4AH A 28H 则执行XCHA R0后 结果为 A 4AH 30H 28H XCHDA R0后 结果为 A 2AH 30H 48H SWAPA后 结果为 A 82H 37 3 4 3片外数据存储器数据传送指令 CPU对外RAM的访问只能用寄存器间接寻址的方式 通过累加器A来完成 且仅有4条指令 由于51系统中没有专门对外设的I O指令 而片外扩展的I O口与片外RAM是统一编址 所以该指令可作为输入 输出指令 用于和外部设备间传送 38 MOVXA DPTRMOVXA RiMOVX DPTR AMOVX Ri A i 0 1 39 例1把片内6AH单元中数取出 传送到外部RAM单元3000H单元中 MOVDPTR 3000HMOVA 6AHMOVX DPTR A 40 例2现有一输入设备口地址E000H 在这个口中已有数字量89H 欲将此值读入ACC MOVDPTR 0E000HMOVXA DPTR 41 3 4 4访问程序存储器的数据传送指令 又称作查表指令 采用基址寄存器加变址寄存器间接寻址方式 把程序存储器中存放的表格数据读出 传送到累加器A 两条指令均为单字节指令 42 一MOVCA A PC功能 将新的PC内容与累加器A内8位无符号数相加形成地址 取出该地址单元中的内容送累加器A 注意 查表范围只能在256个字节范围内二MOVCA A DPTR功能 以DPTR为基址寄存器进行查表 允许数表存放在程序存储器的任意单元 43 例ORG8000HMOVA 30HMOVCA A PC ORG8030HDB ABCDEFGHI 执行结果 A 44 例ORG1004HMOVA 10HMOVDPTR 7000HMOVCA A DPTR ORG7010HDB02 04 06 08执行结果 A PC 45 3 5算术运算指令 加减法指令形式结构图 a 加减法指令关系图 b 加1 减1指令关系图 46 47 注意 对INCdirect和DECdirect两条指令 若直接地址是P0 P3端口 则进行 读 改 写 操作 其功能是修改输出口的内容 即先读入端口的内容 然后在CPU中加 减 1 再输出到端口 读入内容来自端口锁存器而不是引脚 48 例 设 A 53H R0 0FCH 执行指令 ADDA R001010011 11111100 1 01001111结果 A 4FH CY 1 AC 0 OV 0 P 1注意 对标志AC CY OV P位的影响 49 例 编写1234H 0FE7H的程序 和的高8位存入41H单元 低8位存入40H单元 MOVA 34HADDA 0E7HMOV40H AMOVA 12HADDCA 0FHMOV41H A 50 1该指令功能是对BCD码的加法结果进行调整的 它是一条单字节指令 2两个压缩BCD码按二进制相加 必须在加法指令ADD ADDC后 经过本指令调整后才能得到正确的压缩BCD码和数 实现十进制的加法运算 DAA 十进制调整指令 51 52 十进制调整的修正方法 1当A低4位大于9或半进位标志AC 1时 则进行低4位加6修正 2当A高4位大于9或进位标志CY 1时 则进行高4位加6修正 53 例对BCD码加法65 58 BDH 进行十进制调整 参考程序如下 MOVA 65H A 65ADDA 58H A A 58DAA 十进制调整 54 55 乘法指令 MULAB 功能是把累加器A和寄存器B中的两个8位无符号数相乘 将乘积16位数中的低8位存放在A中 高8位存放在B中 若乘积大于FFH 255 则溢出标志OV置1 否则OV清零 乘法指令执行后进位标志CY总是零 即CY 0 56 DIVAB 功能是把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数 所得商存于累加器A中 余数存于寄存器B中 进位标志位CY和溢出标志位OV均被清零 若B中的内容为0时 溢出标志OV被置1 即OV 1 而CY仍为0 除法指令 57 3 6逻辑运算及移位指令 逻辑指令形式结构图 58 逻辑操作指令表 59 60 例 P1 C
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号