微控制器技术应用电子教案30.docx
- 文档编号:24420577
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:8
- 大小:18.43KB
微控制器技术应用电子教案30.docx
《微控制器技术应用电子教案30.docx》由会员分享,可在线阅读,更多相关《微控制器技术应用电子教案30.docx(8页珍藏版)》请在冰豆网上搜索。
微控制器技术应用电子教案30
§4.3汇编语言控制转移与循环指令
表1内部RAM数据传送指令功能操作、机器代码和执行机器周期数
指令
功能操作
机器代码(十六进制)
机器周期数
MOVA,#data
(A)
←data
74data
1
MOVRn,#data
(Rn)
78~7Fdata
1
MOV@Ri,#data
((Ri))
76~77data
1
MOVdirect,#data
(direct)
75directdata
2
MOVDPTR,#data16
(DPTR)
90data15~8data7~0
2
MOVA,direct
(A)
←(direct)
E5direct
1
MOVRn,direct
(Rn)
A8~AFdirect
2
MOV@Ri,direct
((Ri))
A6~A7direct
2
MOVdirect1,direct2
(direct1)
←(direct2)
85direct2direct1
2
MOV@Ri,A
((Ri))
←(A)
F6~F7
1
MOVA,Rn
(A)
←(Rn)
E8~EF
1
MOVRn,A
(Rn)
←(A)
F8~FF
1
MOVdirect,A
(direct)
←(A)
F5direct
1
MOVdirect,Rn
(direct)
←(Rn)
88~8fdirect
2
MOVA,@Ri
(A)
←((Ri))
E6~E7
1
MOVdirect,@Ri
(direct)
←((Ri))
86~87direct
2
注:
n=0~7, i=0~1
1.内部RAM数据传送指令
表1列出了内部RAM数据传送指令、功能操作、机器代码和执行机器周期数。
此类指令的特征是操作码为“MOV”。
【例】写出下列指令的机器代码和对源操作数的寻址方式,并注释其操作功能。
MOVR6,#88H;机器代码7E88,立即寻址,将立即数88H传送到寄存器R6中。
MOV@R1,48H;机器代码A748,直接寻址,将内RAM中48H地址单元中内容传送到以寄存器R1中的内容为地址的存储单元中去。
MOV30H,R0;机器代码8830,寄存器寻址,将寄存器R0中的内容传送到内RAM30H地址单元中去
MOV50H,@R0;机器代码8650,寄存器间址寻址,以R0中的内容为地址,再将该地址中的内容传送到内RAM的50H地址单元中去。
【例】用符号标识法标出以下顺序执行的各条指令操作功能、执行结果和每条指令带下划线操作数的寻址方式。
ORG0000H;伪指令,指出下一指令首地址为0H
MOVA,#30H;(A)←30H,(A)=30H,立即寻址
MOVR0,#23H;(R0)←23H,(R0)=23H,寄存器寻址
MOV23H,#40H;(23H)←40H,(23H)=40H,立即寻址
MOV@R0,#50H;((R0))←50H,(R0)=23H,(23H)=50H,寄存器间接寻址
MOVA,23H;(A)←(23H),(A)=50H,直接寻址
MOVR1,23H;(R1)←(23H),(R1)=50H,寄存器寻址
MOV12H,23H;(12H)←(23H),(12H)=50H,直接寻址
MOV@R1,12H;((R1))(12H),(R1)=50H,(50H)=12H,寄存器间接寻址
MOVA,@R0;(A)←((R0)),(A)=50H,寄存器间接寻址
MOV34H,@R1;(34H)←((R1)),(34H)=12H,直接寻址
MOVDPTR,#6712H;(DPTR)←6712H,(DPTR)=6712H,寄存器寻址
MOV12H,DPH;(12H)←(DPH),(12H)=67H,直接寻址
MOVR0,DPL;(R0)←(DPL),(R0)=12H,直接寻址
MOVA,@R0;(A)←((R0)),(A)=67H,寄存器寻址
MOV@R0,A;((R0))←(A),(R0)=12H,(12H)=67H,寄存器寻址
MOVA,R0;(A)←(R0),(A)=12H,寄存器寻址
SJMP$;短转到本指令的首地址,相对寻址
END;伪指令结束汇编
2.外部RAM数据传送指令
表2列出了外部RAM数据传送指令、功能操作、机器代码和执行机器周期数,它们都是与外RAM有关的数据传送指令,其特征是操作码为“MOVX”。
该类指令均涉及对外RAM64K地址单元操作,而指令MOVX@Ri,AMOVXA,@Ri中Ri只提供外RAM地址的低8位地址,所以高8位应由P2提供。
表2外部RAM数据传送指令、功能操作、机器代码和执行机器周期数(注:
i=0~1)
指令
功能操作
机器代码(十六进制)
机器周期数
MOVXA,@Ri
(A)
←((Ri))
E2~E3
2
MOVX@Ri,A
((Ri))
←(A)
F2~F3
2
MOVXA,@DPTR
(A)
←((DPTR))
E0
2
MOVX@DPTR,A
((DPTR))
←(A)
F0
2
【例】将立即数18H传送到外部RAM中的0100H单元中去。
接着从外RAM中的0100H单元取出数再送到外部RAM中的0280H单元中去。
ORG0000H;伪指令,指出下一指令首地址为0H
MOVA,#18H;将立即数18H传送到累加器A中
MOVDPTR,#0100H;将立即数外RAM的地址0100H送到DPTR中
MOVX@DPTR,A;将A中内容18H送到外RAM地址0100H中
MOVXA,@DPTR;将外RAM的0100H单元中内容18H送到累加器A中
MOVR0,#80H;将立即数80H送到寄存器R0中,作为外RAM地址低8位
MOVP2,#02;将外RAM地址高8位置2,由P2给出地址的高8位
MOVX@R0,A;将A中内容18H送到外RAM的0280H单元地址中
SJMP$
END;伪指令,表示程序结束
3.ROM数据传送指令(查表指令)
表3列出了ROM数据传送指令、功能操作、机器代码和执行机器周期数。
这类指令共有两条,其特征是操作码为“MOVC”。
均属变址寻址指令,涉及ROM的寻地址空间均为64K。
它们在程序中多用于查数据表,故又称查表指令。
一般,A中内容称变址,DPTR、PC中内容称基地址。
MOVCA,@A+DPTR指令首先执行A中内容与DPTR中内容的16位无符号数的加法操作,获得基址与变址之和,将和作为地址,再将该地址中的内容传送到累加器A中。
低8位相加产生进位时,直接加到高位,并不影响标志。
表3ROM数据传送指令、功能操作、机器代码和执行机器周期数
指令
功能操作
机器代码(十六进制)
机器周期数
MOVCA,@A+DPTR
(A)←((A)+(DPTR))
93
2
MOVCA,@A+PC
(PC)←(PC)+1
(A)←((A)+(PC))
83
2
MOVCA,@A+PC指令首先将PC值修正到指向该指令的下一条指令地址,然后执行16位无符号数加法操作,获得基址与变址之和,将和作为地址,再将该地址中的内容传送到累加器A中。
低8位相加产生进位时,直接加到高位,并不影响标志。
【例】若(A)=10H,(DPTR)=2000H,ROM中(2010H)=68H。
则执行MOVCA,@A+DPTR后,(A)=68H。
若(A)=10H,MOVCA,@A+PC指令的首地址为2000H,(2010H)=66H,(2011H)=88H,指令执行后,(A)=88H。
4.堆栈操作指令
表3列出了堆栈操作指令、功能操作、机器代码和执行机器周期数。
表3堆栈操作指令、功能操作、机器代码和执行机器周期数
指令
功能操作
机器代码(十六进进制)
机器周期数
PUSHdirect
(SP)←(SP)+1;((SP))←(direct)
C0direct
2
POPdirect
(direct)←((SP));(SP)←(SP)-1
D0direct
2
第一条指令称为入栈指令,用于把direct地址中的内容传送到堆栈中去。
这条指令执行分为两步走:
第一步使SP中的值加1,使之指向新的栈顶单元;第二步是把direct中的数压入由(SP)为地址的栈顶单元中,即((SP))←(direct)。
第二条指令称为弹出指令。
第一步把栈顶单元中数传送到direct单元中,即(direct)←((SP));第二步是使SP中的原栈顶地址减1,使之指向新的栈顶地址。
堆栈操作指令对堆栈指针SP而言是寄存器间接寻址指令,对direct而言是直接寻址,所以编写程序时应注意direct所表示的是直接地址。
例在KEIL中认定A、R1为寄存器,ACC、01H为直接地址;所以,指令PUSHACC、PUSH01H、POP01H和POPACC均为正确指令书写格式;而PUSHA、PUSHR1、POPR1和POPA均为错误书写格式。
【例】写出以下程序每条指令的运行结果并指出(SP)的值。
设(SP)初值为07H。
ORG0000H
MOV30H,#12H;(SP)=07H,(30H)=12H
MOVA,#23H;(SP)=07H,(A)=23H
PUSH30H;(SP)=08H,(08H)=12H
PUSHACC;(SP)=09H,(09H)=23H
POP30H;(30H)=23H,(SP)=08H
POPACC;(A)=12H,(SP)=07H
SJMP$
END
结果是(30H)=23H,而(A)=12H。
即30H与A的内容进行了交换。
从这个例子可以看出,使用堆栈时,利用“先进后出”的原则,可实现两地址单元的数据交换。
5.数据交换指令
表4列出了数据交换指令、功能操作、机器代码和执行机器周期数。
表4数据交换指令、功能操作、机器代码和执行机器周期数
指令
功能操作
解释
机器代码
机器周期数
XCHA,Rn
(A)←→(Rn)
A的内容和片内RAM单元内容相交换
C8~CF
1
XCHA,direct
(A)←→(direct)
C5direct
XCHA,@Ri
(A)←→((Ri))
C6~C7
XCHDA,@Ri
(A)←→((Ri))
低四位相交换,高四位不变
D6~D7
1
SWAPA
(A3~0)←→(A7~4)
同一字节中高低四位互换
C4
1
【例】设(A)=12H,(R5)=34H,指出执行下列程序段中每条指令后的结果。
程序如下:
ORG0000H
MOVA,#12H;(A)=12H
MOVR5,#34H;(R5)=34H
XCHA,R5;(A)←→(R5),(A)=34H,(R5)=12H
SJMP$
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 控制器 技术 应用 电子 教案 30