版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章指令系统内容提要寻址方式传送与交换指令算术运算、逻辑运算指令控制转移指令位操作指令计算机通过执行程序完成人们指定的任务,程序由一条一条指令构成,能为CPU识别并执行的指令的集合就是该CPU的指令系统。MCS-51单片机汇编语言指令格式:
操作符
目的操作数,源操作数操作符指明该指令完成什么操作;操作数是指明该指令的操作对象。目的操作数是存放结果的。指令中操作数提供的方式称为寻址方式。MCS-51单片机汇编语言指令格式:
操作符
目的操作数,源操作数 指令中的常用符号Rn:n=(0~7),表示当前工作寄存器R0~R7中的一个。Ri:i=(0、1),代表R0和R1寄存器中的一个,用于寄存器间接寻址。dir:8位直接字节地址(片内RAM和SFR)#data:8位立即数,即8位常数。可以为2进制(B)、10进制、16进制(H)、字符(‘
’)、#data16:表示16位立即数,即16位常数,取值范围为#0000H~#0FFFFHaddr16:表示16位地址addr11:表示11位地址rel:相对偏移量(为一字节补码)用于相对转移指令中bit:位地址,在位地址空间中。
$:表示当前指令的地址。
2.1寻址方式1、立即寻址
指令中直接给出操作数的寻址方式。在51系列单片机的指令系统中,立即数用一个前面加“#“号的8位数(#data,如#30H)或16位数(#data16,如#2052H)表示。例如指令:MOVA,#30H;机器码:7430h movdptr,#2052h;机器码:902052h2、直接寻址--用来访问内部RAM 指令中出现的数值是操作数的地址。 寻址对象:①内部数据存贮器:使用它的地址。
②特殊功能寄存器:既可使用它的地址,也可以直接使用寄存器名。
41H 78H40H 56H41H 78H40H 78H例:MOVA,40H;A=56H机器码E540MOVP0,#45H;45H→P0,P0地址为80H,机器码为758045等价指令:MOV80H,#45HMOV40H,41H;机器码为854140内部RAM(41H)→(40H)(40H)=(41H)=78H
3、寄存器寻址 操作数存放在通用寄存器中。寻址对象:A,B,DPTR,R0~R7。B仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。A可以寄存器寻址又可以直接寻址,直接寻址时写作ACC。 例如:MOVA,R0
;R0→A,A、R0均为寄存器寻址,机器码E8
MULAB
;A*B→BA,A、B为寄存器寻址,机器码A4 MOVB,R0
;R0→B,R0为寄存器寻址,B为直接寻址;机器码88F0,其中F0为B的字节地址;等价指令movF0H,R0
PUSHACC
;A的内容压入堆栈,机器码C0E0寄存器寻址的好处:指令短,速度快4、寄存器间址--用来访问RAM(外部、内部) 操作数存放在以寄存器内容为地址的单元中。只能是@R0、@R1、@DPTR,例如:
MOVR0,#20H
MOV@R0,A
;A→(20H)地址的内部RAM
MOVXA,@R1
;外部RAM(高8位地址:P2)的内容→A
MOVX@DPTR,A
;A→以DPTR内容为地址的外部RAM
5、变址寻址--用来访问ROM 以DPTR或PC寄存器内容为基地址,与A的内容相加形成操作数的地址。只能作为源操作数。例如:MOVCA,@A+DPTR6、相对寻址--访问ROM,用于跳转类指令 相对寻址是将程序计数器PC的值与指令第二字节给出的偏移量相加,从而形成转移的目标地址。 例如:JZ10H寻址方式与指令有关7、位寻址对片内RAM中20H~2FH中的128个位地址及SFR中的可位寻址的位地址区寻址。 例如:MOVC,20H;20H位的内容送CY标志位,C称为位累加器。MOVA,20H;字节寻址,将内部RAM区20H单元中的内容送A以上两条指令的寻址方式是位寻址还是字节寻址,根据两操作数类型一致的原则,由另一个操作数决定。寻址方式与操作数有关2.2数据传输与交换指令1、内部RAM、SFR之间的传送MOV指令数据在A、dir、#data、Rn和@Ri之间传输任何一个可到A或dir;#data可到任何一个;Rn和@Ri除了不能互达,其他均可达;只有dir可自达。
dir@Ri
Rn#dataAMOVA,
Rn
#datadir
@RiMOVdir,
ARn@Ri
#data
dir
MOVRn,MOV@Ri,
A
dir
#data内部RAM、SFR之间的传送MOV指令
Adir
#data例判断下列指令的正误:MOV29H,R7MOV25H,P1MOV56H,#70HMOV34H,28HMOVR3,R7MOV@R3,R7MOVR3,#0D2HMOV#34H,28HMOVA,#280HMOVP3,P1编程将R7的内容送R3。√√×√×√√××√MOVA,R7MOVR3,A任何一个可到A或dir,#data可到任何一个Rn和@Ri除了不能互达,其他均可只有dir可自达A外部数据存储器程序存储器
@Ri,A@DPTR,AA,@RiA,@DPTRMOVXMOVCA,@A+PCA,@A+DPTR2、外部存储器和累加器A之间的传送MOVXMOVCMOVX指令举例
例:实现片外数据存储器数据传送(2000H)→(2100H)。
MOVDPTR,#2000H MOVXA,@DPTR MOVDPTR,#2100H MOVX@DPTR,A
;DPTR=2000H
;DPTR=2100H;A←X
;(2100H)←Xx片外数据存储器不能直接寻址。下列为非法指令:
MOVXA,2000H×MOVX2100H,2000H×方法一:利用@DPTR使用P2口和8位寄存器Ri间址:MOVP2,#20H ;高位地址MOVR0,#00 ;低位地址MOVXA,@R0 ;读片外RAM(2000H)MOVP2,#21H ;改变高位地址MOVX@R0,A ;写片外RAM(2100H)方法二:利用@Ri利用MOVC指令实现查表功能
注:①从程序存储器读取数据只能送到A累加器。
②只能使用变址寻址方式
多用于查常数表,直接读取常数表中的值1)DPTR为基址寄存器
MOVCA,@A+DPTR;A←(A+DPTR) 查表范围为64KB程序存储器任意空间。2)PC为基址寄存器
MOVCA,@A+PC ;A←(A+PC)
常数表只能在MOVC指令后256B范围内。(因为PC的值我们不能改变)例查表法求Y=X2。设X(0≤X≤15)在片内RAM20H单元,查表求Y,存入片内RAM21H单元1)用DPTR作基址寄存器
ORG0100H SQU: MOVDPTR,#TAB ;确定表首地址
MOVA,20H ;取X
MOVCA,@A+DPTR;查表求Y=X2 MOV21H,A ;保存Y RET ;子程序结束
… ;其它程序段
ORG0200H ;常数表格首地址TAB: DB00,01,04,09,…,225;平方表指令地址
源程序
ORG0100H ;程序起始地址
0100H SQU:MOVA,20H ;取X
0102H ADDA,#3 ;修正偏移量
0104H
MOVCA,@A+PC;查表求Y=X2
0105H MOV21H,A ;存结果
0107H RET ;子程序结束
0108H TAB:DB00,01,04 ;平方表
010BH DB09,…,225 2)用PC作基址寄存器3、堆栈操作指令
入栈指令:PUSHdir;SP←SP+1,(SP)←(dir)例:设
A=02,B=56,执行下列指令序列后,SP=?A=?,B=?SBR:MOVSP,#30H PUSHACC PUSHB MOVA,#0 MOVB,#01
…
POP B POPACC RET ;设栈底;保护现场;恢复现场出栈指令:POP dir;(dir)←(SP),SP←SP-1 × × ×SP→ 02 × × ×SP→ 56 02 × × × 56SP→ 02 × × × 56 02SP→ × × × × ×SP→ ×堆栈操作示意:4、交换指令
实现片内RAM区的数据双向传送1.字节交换指令
XCHA,Rn ;A←→Rn XCHA,@Ri ;A←→(Ri)XCHA,dir ;A←→(dir)eg:将片内RAM60H单元与61H单元的数据交换XCH60H,61H←?2.半字节交换指令
XCHDA,@Ri;A0~3←(Ri)0~3 SWAPA ;A4~7←A0~32.半字节交换指令
XCHDA,@Ri;A0~3←(Ri)0~3 SWAPA ;A4~7←A0~3例:将片内RAM2AH和2BH单元中的ASCII码表示的数字转换成压缩型BCD码存入20H单元数字0~9的ASCII码30H~39H85H压缩的BCD码和非压缩的BCD码见图如1823压缩的BCD码为1823H非压缩的BCD码为01080203H非压缩BCD08例将片内RAM2AH和2BH单元中的ASCII码转换成压缩式BCD码存入20H单元MOVA,#00H;A=00MOVR0,#2AH 85HR1→R0→习题:交换片内RAM40H单元和41H单元的低半字节00MOV R1,#2BH XCHDA,@R0SWAPAXCHDA,@R1XCH A,20H;低4位交换A=08;A=80H;低4位交换;(20H)=85H3800A358085@R1@R030302.3算术运算和逻辑运算指令算术运算
add、addc、subb、inc、dec、mulab、divab逻辑运算
anl、orl、xrl
dir@Ri
Rn#dataA
dir@Ri
Rn#dataAADDADDCSUBBANLORLXRLA,
Rn,@Ri
#datadir加进位加借位减与或异或以A为目的操作数的算术、逻辑运算指令(24条)以dir为目的操作数逻辑运算指令(6条)A#data
dir与ANL或ORL异或XRLdir,#dataA
算术类指令的操作意义非常明确,不一一赘述,注意减指令只有带借位减,因此在多字节减法中,最低字节作减法时,注意先清CY。逻辑运算是按位进行的,两数运算的运算法则是:与:有“0”则“0”;或:有“1”则“1”异或:同为“0”
,异为“1”;与“0”异或值不变:与“1”异或值变反。逻辑指令常用于对数据位进行加工。
00001111
100001101000111100001111
1000011010001001例:A=0FH,执行ORLA,#86H后A=8FH例:A=0FH,执行XRLA,#86H后A=89H^+ARn@RidirDPTRINC减1指令:DECARn@Ridir加1指令:问:没有DECDPTR指令,怎么解决DPTR的减1?指令对标志位的影响有如下规律:
1)对A操作指令(包括传送指令)会对P标志位产生影响。
2)传送类、自加1、自减1、逻辑运算指令不影响Cy、OV、AC标志位。
3)加减指令影响所有标志位,乘除指令使Cy=0,当乘积大于255,或除数为0时,OV置1。
4)对进位Cy位(指令中用C表示)进行操作的指令和大环移指令,影响Cy。 例A=9AH,R2=E3H,PSW=0,执行指令
ADDCA,R2后求:
A=,Cy=,OV=,AC=,P= PSW=?
10011010
11100011
+
0
1
011111017DH110010000100=84HCYACF0RS1RS0OV---P10000100针对A的指令A取反:CPLAA清零:CLRACYCYRRARLARLCARRCA移位指令(仅对A)1001011000101101AA设01001011A1CY11001011A000101101A1CYCY2.4控制转移指令
这一类指令的功能是改变指令的执行顺序,转到指令指示的新的地址执行。MCS-51单片机的控制转移指令有以下三类分类:无条件转移:无需判断,执行该指令就转移到目的地址。条件转移:需判断标志位是否满足条件,满足条件转移到目的地址,否则顺序执行。长转移或长调用:目的地址距当前PC64KB地址范围内。短转移或短调用:目的地址距当前PC2KB地址范围。1.长调用
LCALLaddrl16;addr16→PC0~15
说明:(1)该指令功能是①保护断点,即当前PC(本指令的下一条指令的首地址)压入堆栈。②子程序的入口地址addr16送PC,转子程序执行。(2)本指令用于调用64KB地址范围内的子程序,子程序可在64KB地址空间的任一处。(3)本指令的机器码为12addr16。(三字节指令)2.短调用
ACALLaddr11;addr11→PC0~10说明:(1)该指令的功能是①保护断点,即当前PC压入堆栈。
②addrl11→PC0~10,而PC11~15不变。(2)本指令用于调用2KB地址范围的子程序,子程序入口距当前PC不得超过2KB地址范围。(3)是为了与MCS-48中的CALL指令兼容而设的。3.子程序返回指令RET;从被调子程序返回。功能:从栈顶弹出断点到PC。RETI;从中断服务程序返回。功能:从栈顶弹出断点到PC,并恢复中断优先级状态触发器。2.4.2转移指令1.无条件转移指令(1)短转移
AJMPaddr11;addr11→PC0~10说明:①转移范围:与PC距离2KB地址范围内。②机器码形式:本指令为2字节指令。设addr11的各位是a10a9a8…a2a1a0,则指令的机器码为a10a9a800001a7a6a5a4a3a2a1a0。③本指令是为能与MCS-48的JMP指令兼容而设的(2)长转移LJMPaddr16;addr16→PC0~15说明:①转移地址为16位地址中的任意值。②本指令为3字节指令:02addr16。(3)间接转移
JMP@A+DPTR;A+DPTR→PC例2-20A=12H,DPTR=2000H,指令JMP@A+DPTR执行后,PC=2012H。例2-21现有一段程序如下:
MOVDPTR,#TABLEJMP@A+DPTRTABLE:AJMPPROC0AJMPPROC1AJMPPROC2AJMPPROC2根据JMP@A+DPTR指令的操作可知,当A=00H时,程序转入到地址PROC0处执行;当A=02H时,转到PROC1处执行……可见这是一段多路转移程序,进入的支路由A确定。因为AJMP指令是2字节指令,所以A必须为偶数。
以上均为绝对转移指令,下面介绍相对转移指令。(4)无条件相对转移
SJMPrel;PC+rel→PC,即As+2+rel→PC,机器码为80rel说明:As为源地址(本指令的首地址),该指令为2字节指令,执行本指令时
当前PC=As+2,
rel
为转移的偏移量,转移可以向前转(目的地址小于源地址),也可以向后转(目的地址大于源地址),因此偏移量rel是1字节有符号数,用补码表示(-128~+127),所以指令转移范围在离源地址As的-126~+129字节之间。2.条件转移指令(1)累加器为零(非零)转移JZrel;A=0则转移(As+2+rel→PC)
JNZrel;A≠0则转移,机器码为60rel
dir@Ri
Rn#dataADJNZDJNZ(2)减1不等于零转移DJNZRn,rel;Rn-1DJNZdir,rel本指令有自动减1功能。(3)比较转移指令(不相等则转移)CJNEA,dir,relCJNEA,#data,relCJNERn,#data,relCJNE@Ri,#data,rel说明:①CJNE指令都是3字节指令,作减操作,不回送结果,影响CY标志。②若第一操作数>=第二操作数,则标志CY=0。若第一操作数<第二操作数,则CY=1。这几条指令除实现两操作数相等与否的判断外,利用对CY的判断,还可完成两数大小的比较。试说明以下一段程序运行后A中的结果。
MOV23H,#0AHCLRALOOP:ADDA,23HDJNZ23H,LOOPSJMP$根据程序可知A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《GB-Z 28820.3-2012聚合物长期辐射老化 第3部分:低压电缆材料在役监测程序》专题研究报告
- 《GBT 32789-2016 轮胎噪声测试方法 转鼓法》专题研究报告
- 《GB-T 25800-2010纺织染整助剂命名原则》专题研究报告
- 《MySQL数据库技术与应用》课件-7.3.1左外连接查询
- 2026年云南工程职业学院单招职业适应性考试题库及答案详解一套
- 《幼儿文学》课件-2.2儿歌特点
- 冷链物流路径优化信息咨询合同
- 中药材行业中药炮制师岗位招聘考试试卷及答案
- 2026年度全年各类安全工作计划
- 2025年低温原油高效破乳剂项目合作计划书
- 对人类教育四个发展阶段的探析
- 护理部竞聘副主任
- 《统计学-基于Excel》(第 4 版)课件 贾俊平 第5-9章 概率分布- 时间序列分析和预测
- 中国计量大学《文科数学》2021-2022学年第一学期期末试卷
- 信阳师范大学《伦理学》2021-2022学年第一学期期末试卷
- 中国普通食物营养成分表(修正版)
- 20道长鑫存储设备工程师岗位常见面试问题含HR常问问题考察点及参考回答
- 抖音ip孵化合同范本
- 小升初语文总复习《文章主要内容概括》专项练习题(附答案)
- DL-T606.5-2009火力发电厂能量平衡导则第5部分-水平衡试验
- python程序设计-说课
评论
0/150
提交评论