单片机指令系统习题.docx
- 文档编号:10228278
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:23
- 大小:36.87KB
单片机指令系统习题.docx
《单片机指令系统习题.docx》由会员分享,可在线阅读,更多相关《单片机指令系统习题.docx(23页珍藏版)》请在冰豆网上搜索。
单片机指令系统习题
第四章汇编语言程序设计
第一节汇编语言源程序的格式和伪指令
(一)学习要求
1、掌握汇编语言源程序格式和伪指令。
2、掌握各种伪指令功能。
(二)内容提要
一:
汇编语言源程序的格式
1、语句格式
汇编语言源程序是由汇编语句(即指令)组成的。
汇编语言一般由四部分组成。
其典型的汇编语句格式如下:
标号:
操作码操作数;注释
START:
MOVA,30H;A←(30H)
(1)标号段标号是用户定义的符号地址。
(2)操作码段操作码段是每一语句中不可缺少的部分,也是语句的核心部分,用于指示计算机进行何种操作,汇编程序就是根据这一字段生成目标代码的。
(3)操作数段指出了参与操作的数据或存放该数据的地址。
通常有目的操作数和源操作数之分。
(4)注释段为了增强程序的可读性,可在某行指令的后面用分号起头,加上注释,用以说明该条指令或该段程序的功能、作用,以供编程人员参考。
此注释内容程序汇编时CPU不予处理,不产生目标代码。
二:
伪指令
1、定位伪指令ORG(Origin)
格式:
[标号:
]ORGm
m:
16位二进制数,代表地址。
功能:
指出汇编语言程序通过编译,得到的机器语言程序的起始地址。
2、定义字节伪指令DB(DefineByte)
格式:
[标号:
]DBX1,X2,~Xn
Xn:
单字节二进制、十进制、十六进制数,或以‘’括起来的字符串,数据符号。
功能:
定义程序存储器从标号开始的连续单元,用来存放常数、字符和表格。
3、定义字伪指令DW(DefineWord)
格式:
[标号:
]DWY1,Y2,~Yn
Yn:
双字节二进制、十进制、十六进制数,或以‘’括起来的字符串,数据符号。
功能:
同DB,不同的是为16位数据。
4、汇编结束命令END
格式:
[标号:
]END
功能:
END是汇编语言源程序的汇编结束标志,在它后面所写的指令均不予处理。
5、等值命令EQU
格式:
字符名称EQU数或汇编符号
功能:
将一个数或特定的汇编符号赋予规定的字符名称。
先定义后使用。
6、数据地址赋值命令DATA
格式:
字符名称DATA表达式
功能:
将数据地址或代码地址赋予规定的字符名称
(三)习题与思考题
1、汇编语言源程序的格式及含义是什么?
2、什么叫伪指令?
伪指令与指令有什么区别?
第二节汇编语言源程序汇编
(一)学习要求
(1)掌握汇编程序的过程。
(2)了解机器汇编与人工汇编的区别。
(二)内容提要
用汇编语言编写的源程序称为汇编语言源程序。
汇编通常由专门的汇编程序来进行,通过编译后自动得到对应于汇编源程序的机器语言目标程序,这个过程叫机器汇编。
另外还可用人工汇编。
一、汇编程序的汇编过程
汇编过程是将汇编语言源程序翻译成目标程序的过程。
汇编程序是两次扫描。
第一次扫描是进行语法检查并建立该源程序使用的全部符号名字表。
在这个表中,每个符号名字后面跟着一个对应的值。
第一次扫描中如有错误则显示出错信息,扫描完,显示出错数目,然后返回编辑状态。
这时可对源程序进行修改。
如没有错误可进行第二次扫描,最后生成目标程序的机器码并得到对应于符号地址(即标号地址)的实际地址值。
第二次扫描还产生相应的列表文件,此文件中有与每条源程序相对应的机器码、地址和编辑行号以及标号地址的实际地址等,可作为程序调试时使用。
二、人工汇编
由程序员根据MCS-51的指令集将汇编语言源程序的指令逐条人工翻译成机器码的过程叫人工汇编。
人工汇编同样采用两次汇编方法。
第一次汇编,首先查出各条指令的机器码,并根据初始地址和各条指令所占的字节数,确定每条指令所在的地址单元。
第二次汇编,求出标号地址所代表的实际地址及相对应地址偏移量的具体补码值。
例:
对下列程序进行人工汇编
ORG1000H
START:
MOVR7,#200
DLY1:
NOP
NOP
NOP
DJNZR7,DLY1
RET
第一次汇编查指令集,确定每条指令的机器码和字节数。
通过ORG伪指令可依次确定各指令的首址。
结果如下:
地址指令码ORG1000H
1000H7FC8START:
MOVR7,#200
1002H00DLY1:
NOP
1003H00NOP
1004H00NOP
1005HDF地址偏移量relDJNZR7,DLY1
1007H22RET
第二次汇编计算出转移指令中的地址偏移量rel。
当DJNZR7,DLY1指令中的条件成立时,程序将发生转移,从执行这条指令后的当前地址转移到DLY1标号地址上。
因此,地址偏移量rel=1002H-1007H=-05H,补码表示的偏移量为0FBH。
将计算结果填入第一次汇编时待定的偏移量值处。
人工汇编很麻烦而且容易出错,一般不采用。
(三)习题与思考题
1、机器汇编程序两次扫描的过程及作用是什么?
2、人工汇编与机器汇编的的区别是什么?
第三节汇编语言的程序举例
(一)学习要求
(1)掌握顺序、循环、子程序、分支程序。
(2)掌握延时程序的设计方法。
(二)内容提要
1、程序设计的基本步骤
一般步骤为:
(1)分析题意,明确要求;
(2)建立思路,确定算法;
(3)编制框图,绘出流程;
(4)编写程序,上机调试;
显然,算法和流程是至关重要的。
程序结构有简单顺序、分支、循环和子程序等几种基本形式。
2、画流程图
画流程图是指用各种图形、符号、指向线等来说明程序
设计的过程。
国际通用的图形和符号说明如下:
椭圆框:
起止框,在程序的开始和结束时使用。
矩形框:
处理框,表示要进行的各种操作。
菱形框:
判断框,表示条件判断,以决定程序的流向。
指向线:
流程线,表示程序执行的流向。
圆圈:
连接符,表示不同页之间的流程连接。
各种几何图形符号如下图所示。
一、简单程序的设计
例4-1已知两个压缩BCD码分别放在内部RAM的31H30H和33H32H等4个单元中,试编程求和,结果存入R4R3R2中。
分析:
流程如图:
程序如下:
ORG0000H
LJMPMAIN
ORG0040H
MAIN:
MOVA,30H
ADDA,32H
DAA
MOVR2,A
MOVA,31H
ADDCA,33H
DAA
MOVR3,A
CLRA
MOVACC.0,C
MOVR4,A
HERE:
SJMPHERE
END
例4-2利用查表指令将内部RAM中20H单元的压缩BCD码拆开,转换成相应的ASCII码,存入21H、22H中,高位存在22H。
分析:
控制流程图(略),程序如下:
START:
MOVDPTR,#TABLE
MOVA,20H
ANLA,#0FH
MOVCA,@A+DPTR
MOV21H,A
MOVA,20H
ANLA,#0F0H
SWAPA
MOVCA,@A+DPTR
MOV22H,A
SJMP$
TABLE:
DB30H,31H,32H,33H,34HDB35H,36H,37H,38H,39H
二、分支程序设计
1、单分支程序
单分支结构程序使用转移指令实现,即根据条件对程序的执行进行判断,满足条件是转移执行,否则顺序执行。
在MCS-51指令系统中条件转移指令有:
(1)判A转移指令JZ、JNZ;
(2)判位转移指令JB、JNB、JBC、JC、JNC;
(3)比较转移指令CJNE;
(4)减1不为0转移指令DJNZ;
例4-3假定在外部RAM中有ST1、ST2和ST3共3个连续单元,其中ST1、ST2单元中分别存放着两个8位无符号数,要求找出其中的大数并存入ST3单元。
分析:
两个无符号数的大小比较可利用两数相减是否有借位来判断,流程图和程序如下所示:
START:
CLRC
MOVDPTR,#ST1
MOVXA,@DPTR
MOVR7,A
INCDPTR
MOVXA,@DPTR
SUBBA,R7
JCBIG1
MOVXA,@DPTR
SJMPBIG2
BIG1:
XCHA,R7
BIG2:
INCDPTR
MOVX@DPTR,A
SJMP$
2、多分支程序
(1)嵌套分支结构
例4-4设变量X存放于30H单元,函数值Y存放31H单元。
试按照式:
1X>0
Y=0X=0的要求给Y赋值
-1X<0
分析:
X是有符号数,判断符号位是0还是1可利用JB或JNB指令。
判断X是否等于0则直接可以使用累加器A的判0指令。
流程、程序如右:
START:
MOVA,30H
JZOVER
JNBACC.7,LAB1
MOVA,#0FFH
SJMPOVER
LAB1:
MOVA,#1
OVER:
MOV31H,A
SJMP$
(2)多重分支结构
利用MCS-51单片机的散转指令JMP@A+DPTR,可方便地实现多重分支控制,因此,又称为散转程序。
假定多路分支的最大序号为n,则分支的结构如图所示。
例4-5根据条件0、1、2…、n,分别转向处理程序PRG0、PRG1、…、PRGn,条件K设在R2中。
START:
MOVDPRT,#TABLE
MOVA,R2
ADDA,R2
JNCNEXT
INCDPH
NEXT:
JMP@A+DPTR
TABLE:
AJMPPRG0
……
AJMPPRGn
PRG0:
…
……
PRGn:
…
三、循环程序设计
1、循环程序的结构
循环程序包括以下四个部分:
置循环初
值循环体
循环控制变量修改
循环终止控制
常用于循环控制的指令有:
DJNZ、CJNE、JC、JNC
等控制类指令。
2、单循环
终止循环控制采用计数的方法,即用一个寄存器作为循环次数计数器,每次循环后计数加1或减1,达到终止值后退出循环。
例4-6计算50个8位二进制数(单字节)之和。
要求:
50个数存放在30H开头的内部RAM中,和放在R6R7中。
分析:
采用DJNZ循环体的流程框图如下页所示,在参考程序中,R0为数据地址指针,R2为减法循环计数器。
在使用DJNZ控制时,循环计数器初值不能为0,当为0时,第一次进入循环执行到DJNZ时,减1使R2变为FFH,循环次数成了256,显然不合题意。
START:
MOVR6,#0
MOVR7,#0
MOVR2,#50
MOVR0,#30H
LOOP:
MOVA,R7
ADDA,@R0
MOVR7,A
CLRA
ADDCA,R6
MOVR6,A
INCR0
DJNZR2,LOOP
SJMP$
3、多重循环
如果在一个循环程序中嵌套了其他的循环程序,称为多重循环程序。
在用软件实现延时时显得特别有用。
例4-7设计1秒延时子程序,假设fosc=12MHz。
分析:
软件延时与指令的执行时间关系密切,在使用12MHz晶振时,一个机器周期的时间为1,us,执行一条DJNZ指令的时间为2us,我们可以采用三重循环的方法写出延时1秒的子程序
流程、程序如右图所示:
DELAY:
MOVR7,#10;
DL3:
MOVR6,#200;
DL2:
MOVR5,#250;
DL1:
DJNZR5,DL1;
DJNZR6,DL2;
DJNZR7,DL3;
RET
4、按条件转移控制的循环
例4-8把内部RAM中从ST1地址开始存放的数据传送到以ST2开始的存储区中,数据块长度未知,但已知数据块的最后一个字节内容为00H,而其它字节均不为0。
并设源地址与目的地址空间不重复。
分析:
显然,我们可以利用判断每次传送的内容是否为0这一条件来控制循环。
也可用CJNE来比较与0是否相等设计。
利用判A转移控制的循环流程图如右图所示。
START:
MOVR0,#ST1
MOVR1,#ST2
LOOP:
MOVA,@R0
JZENT
MOV@R1,A
INCR0
INCR1
SJMPLOOP
ENT:
RET
四、查表程序设计
用于查表的指令有两条:
MOVCA,@A+PC;
MOVCA,@A+DPTR;
当使用DPTR作为基址寄存器时查表比较简单,查表的步骤分三步
1)基址(表格首地址)送DPTR数据指针;
2)变址值(在表中的位置是第几项)送累加器A;
3)执行查表指令MOVCA,@A+DPTR,进行读数,查表结果送回累加器A。
当使用PC作为基址寄存器时,由于PC本身是一个程序计数器,与指令的存放地址有关,查表时其操作有所不同。
查表的步骤也分三步:
1)变址值(在表中的位置是第几项)送累加器A;
2)偏移量(查表指令的下一条指令的首地址到表格首地址之间的字节数)+A→A;(修正)
3)执行查表指令MOVCA,@A+PC。
例4-9二位十六进制数与ASCII码的转换程序。
设数值在R2中,结果低位存在R2中,高位存在R3中。
分析:
对于2位16进制数必须进行2次查表,因此,取数后通过屏蔽的方法来实现高低位分开。
(1)利用DPTR作基址的参考程序如下
HEXASC:
MOVDPTR,#TABLE
MOVA,R2
ANLA,#0FH
MOVCA,@A+DPTR;查表
XCHR2,A
ANLA,#0F0HSWAPA;
MOVCA,@A+DPTR;查表
MOVR3,ARET
TABLE:
DB30H,31H,32H,33H,34H;ASCII表
DB35H,36H,37H,38H,39H
DB41H,42H,43H,44H,45H,46H
(2)利用PC作基址的参考程序如下:
HEXASC:
MOVA,R2
ANLA,#0FH
ADDA,#9
MOVCA,@A+PC;查表
XCHR2,A
ANLA,#0F0H
SWAPA
ADDA,#2
MOVCA,@A+PC;查表
MOVR3,A
RET
TABLE:
DB“0”,“1”,…,“F”;ASCII表
例4-10利用查表指令,根据R2的分支序号找到对应的转向入口地址送DPTR,清ACC后,执行散转指令JMP@A+DPTR,转向对应的分支处理,假定分支处理程序在ROM64KB的范围内分布。
程序如下:
ORG1000H
START:
MOVDPTR,#TAB
MOVA,R2
ADDA,R2
JNCST1
INCDPH
ST1:
MOVR3,A
MOVCA,@A+DPTR;查表
XCHA,R3
INCA
MOVCA,@A+DPTR
MOVDPL,A
MOVDPH,R3
CLRA
JMP@A+DPTR
TAB:
DWPRG0
DWPRG1
……
五、应用控制流程设计
例4-11电机的简单起停控制;其框图如下页图a所示
1)分析:
简单的电机起动停止控制,其控制的示意图及I/O分配如图b所示。
输入信号:
启动按钮SB1、停止按钮SB2
输出信号:
继电器KA
假定:
按下按钮,相应的接口信号为低电平(P1.1=0)时;
若:
程序使P1.3=1,即KA=1;
则:
电机启动。
2)按照上述的控制思路,我们可以方便的画出流程图,如下图所示。
ORG1000H
STR:
MOVP1,#00000110B
WT1:
JBP1.1,WT1;启动?
SETBP1.3;电机启
WT2:
JBP1.2,WT2;停止?
CLRP1.3;电机停
SJMPWT1
END
(三)习题与思考题
1、循环程序由哪几部分构成。
2、什么是子程序?
对子程序设计有什么要求?
3、将(R2R3)和(R6R7)两个双字节无符号数相加,结果送R4R5。
NADD:
MOVA,R3
ADDA,R7
MOVR5,A
MOVA,R2
ADDCA,R6
MOVR4,A
RET
4、将(R2R3)和(R6R7)两个双字节无符号数相减,结果送R4R5。
NSUB:
MOVA,R3
CLRC
SUBBA,R7
MOVR5,A
MOVA,R2
SUBBA,R6
MOVR4,A
RET
5、将A中所存放的8位二进制数转换为BCD码,存于片内RAM的20H、21H单元。
MOVB,#100
DIVAB
MOVR0,#21H
MOV@R0,A
DECR0
MOVA,#10
XCHA,B
DIVAB
SWAPA
ADDA,B
MOV@R0,A
RET
6、将A中所存的一位十六进制数转换为ASCII码。
TRANS:
MOVR2,A
ADDA,#F6H
MOVA,R2
JNCAD30
ADDA,#07H
AD30:
ADDA,#30H
RET
7、编写一程序段,其功能为:
内部RAM的30H(高)~32H(低)和33H(高)~35H(低)两个三字节无符号数相加,结果存入30H(高)~32H(低)单元,设三字节相加时无进位。
MOVR0,#32H
MOVR1,#35H
MOVR2,#03H
CLRC
LOOP:
MOVA,@R0
ADDCA,@R1
MOV@R0,A
DECR0
DECR1
DJNZR2,LOOP
END
8、编写一程序段,其功能为:
内部RAM的32H(高)~30H(低)和35H(高)~33H(低)两个三字节无符号数相加,结果存入32H(高)~30H(低)单元,设三字节相加时无进位。
MOVR0,#30H
MOVR1,#33H
MOVR2,#03H
CLRC
LOOP:
MOVA,@R0
ADDCA,@R1
MOV@R0,A
INCR0
INCR1
DJNZR2,LOOP
END
9、编写一程序段,其功能为:
内部RAM的30H(高)~32H(低)和33H(高)~35H(低)两个三字节无符号数相减,结果存入30H(高)~32H(低)单元,设三字节相减时无进位。
MOVR0,#32H
MOVR1,#35H
MOVR2,#03H
CLRC
LOOP:
MOVA,@R0
SUBBA,@R1
MOV@R0,A
DECR0
DECR1
DJNZR2,LOOP
END
10、编写一程序段,其功能为:
内部RAM的43H(高)~40H(低)和33H(高)~30H(低)两个四字节无符号数相减,结果存入43H(高)~40H(低)单元,设四字节相减时无进位。
(10分)
MOVR0,#40H
MOVR1,#30H
MOVR2,#04H
CLRC
LOOP:
MOVA,@R0
SUBBA,@R1
MOV@R0,A
INCR0
INCR1
DJNZR2,LOOP
END
11、编写一程序段,将内部RAM30H~3FH的内容传送到外部RAM的8000H~800FH中。
MOVR0,#30H
MOVDPTR,#8000H
MOVR2,#10H
LOOP:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR2,LOOP
12、编写程序,求出内部RAM20H单元中的数据含“1”的个数,并将结果存入21H单元。
解:
MOVR1,#08H
MOVR0,#20H
CLRC
CLR21H
LOOP:
MOVA,@R0
RLCA
JNCLOOP
13、设片内RAM20H~4FH单元中有若干个无符号数,试编程求出其中的最大值及最大
值所在单元地址,将最大值存入片内RAM50H单元,最大值所在单元地址存入片内RAM
51H单元。
10、设片外RAM从1000H单元开始存放100个无符号8位二进制数。
试编程将它们从大到
小依次存入片内RAM从10H开始的单元中。
11、设有两个四字节BCD数:
X=24350809,Y=12450379。
X从片内RAM25H单元开始存放,Y从片内RAM35H开始存放,求两数的和并存放X所在的单元中。
设数据在内存中按照低字节在前,高字节在后的顺序存放。
12、试编一采用查表法求1~20的平方数子程序。
要求:
X在累加器A中,1≤X≤20,平方数高位存放在R6中,低位存放在R7中。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 指令系统 习题