MCS-51单片机指令系统-数据传送类指令

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3) 以direct 为目的操作数的指令 A Rn direct1 @Ri #data
MOV direct, ,
例:若(R0)=30H,(30H)=25H ) ( ) 执行MOV 40H,@R0 指令 执行 , 结果:( 结果:(40H)=25H。 :( ) 。
4) 以@Ri为目的操作数的指令 为目的操作数的指令
题1答 答 题2答 答 题3答 答 题4答 答
题5答 答
题1答 答
MOV 50H, R5
题2答 答
MOV A, R7 A, MOV R6, A ,
题3答 答
MOV A, #40H MOV @R0, A
题4答 答
MOV R0,#50H MOVX A, @R0 MOV 40H, A
1FFDH 1FFEH 1FFFH 2000H 2001H
83H
2009H
0 1 4 9 16 25 36 49 64 81
(2) 读、写片外 写片外RAM 指令 • MCS-51单片机CPU对片外扩展的数据存储器 RAM或I/O口进行数据传送,必须采用寄存 器间接寻址的方法,通过累加器A来完成。 这类指令共有以下4条单字节指令,指令 操作码助记符都为MOVX。
(2) 8位传送指令 位传送指令 目的操作数 目的操作数 传送关系 A Rn direct1 @Ri … 源操作数 A Rn direct2 @Ri #data
注: (1) #data(立即数)不能用作目的操作数; (立即数)不能用作目的操作数; 2) 源操作数与目的操作数不能相同(除 direct外); 源操作数与目的操作数不能相同( 外 3) 寄存器寻址与寄存器及其间址间不能相互传送。 寄存器寻址与寄存器及其间址间不能相互传送。
3.3 MCS-51指令系统 指令系统
3.3.1 数据传送类指令(29条) 数据传送类指令( 条 传送类指令分成两大类 1. MOV,一般传送 , 2. 非MOV,特殊传送, ,特殊传送, 、 、 、 、 如:MOVC、MOVX、PUSH、POP、 XCH、XCHD及SWAP。 、 及 。 对PSW的影响 PSW的影响
2. 特殊传送指令

访问程序存储器的数据传送指令又称作 查表指令,采用基址寄存器加变址寄存器 间接寻址方式,把程序存储器中存放的表 格数据读出,传送到累加器A。共有如下两 条单字节指令,指令操作码助记符为MOVC。
2. 特殊传送指令 (1) ROM查表指令 查表指令 1) MOVC A,@A+DPTR , 以DPTR与偏移量之和作为程序存储器地 与偏移量之和作为程序存储器地 将该地址单元的内容传送到A。 址,将该地址单元的内容传送到 。指令 执行后DPTR的内容不变。 的内容不变。 执行后 的内容不变 2) MOVC A,@A+PC , 的当前值与 以PC的当前值与偏移量之和作为程序存储 的当前值 偏移量之和作为程序存储 器地址,将该地址单元的内容传送到A。 器地址,将该地址单元的内容传送到 。 指令执行后PC的内容不变 的内容不变。 指令执行后 的内容不变。
(4) 数据交换指令
双向的 交换类指令, 传送是双向 交换类指令, 传送是双向的 1) 字节交换指令 Rn direct @Ri ,(A) 例 若(R0)=67H,( )=45H。 ) ,( 。 执行 XCH A,R0 指令 , 结果:( ) ,(R0) 结果:(A)=67H,( )=45H。 :( ,( 。 XCH A, A,
•执行上述指令后的结果为:(R0)=30H,(R1)=(A)=40H, 执行上述指令后的结果为:(R0)=30H,(R1)=(A)=40H, 执行上述指令后的结果为 •(B)=10H,(40H)=(P1)=(P2)=CAH,(10H)=20H。 (B)=10H, (B)=10H (40H)=(P1)=(P2)=CAH,(10H)=20H。
1) 以A为目的操作数的指令 为目的操作数的指令 Rn MOV A, , direct @Ri #data ,(30H)= 68H 例:若(R1)= 30H,( ) ,( ) 执行 MOV A,@R1 , 结果: 结果:(A)= 68H。 ) 。
2) 以Rn 为目的操作数的指令 A MOV Rn, , direct #data 例:若(60H)= 30H ) 执行 MOV R6,60H , 结果: 结果:(R6)= 30H。 ) 。
(3) 堆栈操作指令
1) 原则:向地址高端生长,后进先出 原则:向地址高端生长, 2) SP :指向栈顶(活动端 ,复位值 活动端), 指向栈顶 活动端 复位值07H 3) 操作指令 PUSH direct POP direct ,(40H)=88H 例 若(SP)=07H,( ) ,( ) 执行 PUSH 40H 指令 结果:( ) ,(08H)=88H。 结果:(SP)=08H,( :( ,( ) 。
• 前一条指令采用DPTR作基址寄存器,因此可以很方便地把 一个16位地址送到DPTR,实现在整个64 KB程序存储器单 元到累加器A的数据传送。即数据表格可以存放在程序存 储器64 KB地址范围的任何地方。 • 后一条指令以PC作为基址寄存器,CPU取完该指令操作码 时PC会自动加1,指向下一条指令的第一个字节地址,即 此时是用(PC)+1作为基址的。另外,由于累加器A中的内 容为8位无符号数,这就使得本指令查表范围只能在256个 字节范围内(即(PC)+1H~(PC)+100H),使表格地址空间分 配受到限制。同时编程时还需要进行偏移量的计算,即 MOVC A,@A+PC指令所在地址与表格存放首地址间的距离 字节数的计算,并需要一条加法指令进行地址调整。偏移 量计算公式为: • 偏移量 = 表首地址-(MOVC指令所在地址+1) 表首地址-(MOVC指令所在地址+1) 指令所在地址
(3) 堆栈操作指令 堆栈操作有进栈和出栈,即压入和弹出数据, 堆栈操作有进栈和出栈,即压入和弹出数据,常 用于保存或恢复现场。进栈指令用于保存片内RAM 用于保存或恢复现场。进栈指令用于保存片内RAM 单元(低128字节)或特殊功能寄存器SFR的内容; 单元( 128字节)或特殊功能寄存器SFR的内容; 字节 SFR的内容 出栈指令用于恢复片内RAM单元( 128字节 字节) 出栈指令用于恢复片内RAM单元(低128字节)或特 RAM单元 殊功能寄存器SFR的内容。 殊功能寄存器SFR的内容。 SFR的内容
(2) 读、写片外 写片外RAM 指令
1) 读片外 读片外RAM MOVX A,@DPTR , MOVX A,@Ri , 2) 写片外 写片外RAM MOVX @DPTR,A , MOVX @Ri,A ,
• 例 设外部RAM(0203H)= 0FFH,分析以下指令执 设外部RAM(0203H)= 0FFH, 行后的结果。 行后的结果。 • MOV DPTR,#0203H DPTR, • MOVX A,@DPTR A, • MOV 30H,A 30H, • MOV A,#0FH A, • MOVX @DPTR,A @DPTR, • 执行结果为:(DPTR)=0203H,(30H)=FFH, 执行结果为:(DPTR)=0203H,(30H)=FFH, (0203H)=(A)=0FH。 (0203H)=(A)=0FH。
2) 半字节交换指令 )
XCHD A,@Ri , SWAP A )=30H,( ,(30H)= )=67H, 例:若(R0)= )= ,( )= , )=20H。 (A)= )= 。 执行 XCHD A,@R0 后, , )=27H,( ,(30H)= )=60H。 (A)= )= ,( )= 。 )=30H,执行 例 若(A)= )= ,执行SWAP A 后, )=03H。 (A)= )= 。
(4) 数据交换指令
数据传送指令一般都是将操作数自源地址单元传送到目的 地址单元,指令执行后,源地址单元的操作数不变,目的 地址单元的操作数则修改为源地址单元的操作数。交换指 交换指 令数据作双向传送,涉及传送的双方互为源地址、 令数据作双向传送,涉及传送的双方互为源地址、目的地 址,指令执行后每方的操作数都修改为另一方的操作数。 指令执行后每方的操作数都修改为另一方的操作数。 数据交换指令共有如下5条指令:
A
MOV @Ri, ,
direct #data
,(A) 例 若(R1)=56H,( )=35H ) ,( 执行 MOV @R1,A 指令 , 结果:( 结果:(56H)=35H :( )
来自百度文库
访问片内RAM的一般传送指令操作关系图
累加器A
Direct 直接地址
@Ri间址
Rn寄存器
Data立即数
设内部RAM(30H)=40H (40H)=10H, RAM(30H)=40H, 例 设内部RAM(30H)=40H,(40H)=10H, (10H)=00H(P1)=0CAH, (10H)=00H(P1)=0CAH,分析以下程序执行后各单元 及寄存器、P2口的内容 口的内容。 及寄存器、P2口的内容。
• MOV • MOV • MOV • MOV • MOV • MOV • MOV R0,#30H R0, A, A,@R0 R1, R1,A B, B,@R1 @R1, @R1,P1 P2, P2,P1 10H, 10H,#20H ;R0=30H ;A=40H ;R1=40H ;B=10H ;(40H) =0CAH ;(P2)=0CAH ;(10H)←20H
• • • • •
如果用以DPTR为基址寄存器 2001H 的查表指令,其程序如下: MOV DPTR, #2000H;置表首地址 MOV A, #03H MOVC A, @A+DPTR 2009H
• 设MOVC指令所在地址(PC)=1FFDH,则 偏移量=2000H-(1FFDH+1)=02H。 • 相应的程序如下: MOV A,#03H ;(A)←03H ADD A,#02H ;用加法指令 进 行地址调整 MOVC A,@A+PC ;(A)←(A+PC+1) 执行结果为:(PC)=1FFEH,(A)=09。
• 例 从片外程序存储器2000H单元 从片外程序存储器2000H 2000H单元 开始存放0~9的平方值, DPTR作 0~9的平方值 开始存放0~9的平方值,以DPTR作 为基址寄存器进行查表得3 为基址寄存器进行查表得3的平方 值。
1FFDH 1FFEH 1FFFH 2000H 0 1 4 9 16 25 36 49 64 81
练习题
试按下列要求传送数据 1. 将R5中的数据传送到 中的数据传送到50H。 中的数据传送到 。 2.将R7中的数据传送到 。 将 中的数据传送到R6。 中的数据传送到 3.将立即数 将立即数40H传送到以 中内 传送到以R0中内 将立即数 传送到以 容为地址的存储单元中。 容为地址的存储单元中。 4.将片外 将片外RAM50H中的数据传 将片外 中的数据传 送到片内RAM40H单元中。 送到片内 单元中。 单元中 5.将R1中的数据传送到以 中 将 中的数据传送到以 中的数据传送到以R0中 内容为地址的存储单元中。 内容为地址的存储单元中。
1. 一般传送指令 (1) 16位传送指令 位传送指令 MOV DPTR,# data16 , 将源操作数data16(通常是常数) 将源操作数data16(通常是常数) 送入目的操作数DPTR中。 送入目的操作数 中 例 MOV DPTR,#5678H , 结果为: 结果为: (DPH)= 56H,( ) ,(DPL)= 78H。 ) 。 ,(
• 1. 访问片内数据存储器的一般数据传送指令 • 该类指令的功能是实现数在片内RAM单元之间、 寄存器之间、寄存器与RAM单元之间的传送。所有 指令具有统一的格式,其格式如下: • MOV <目的操作数>,<源操作数>;目的操作数单 元←源操作数(或单元) • 操作码助记符都是"MOV",目的操作数和源操作数 不同寻址方式的组合就派生出该类的全部指令。 因此,记忆这类指令的关键在于掌握两个操作数 的各种寻址方式的组合关系。
相关文档
最新文档