资源描述:
《keil 汇编程序设计实例课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、c4MCS-51汇编程序设计山东职业学院单片机编程语言概述程序设计语言有3种:机器语言、汇编语言和高级语言。1机器语言:计算机能直接识别和执行的二进制代码形式的指令称为机器指令,机器指令的集合称为机器语言。每种计算机系统都有自己的机器语言,即不同计算机系统机器语言不相同。2汇编语言用助记符描述的指令系统,称为汇编语言。汇编语言也是面向机器的,每种计算机系统都有它自己的汇编语言,用汇编语言编写的程序,称为汇编语言源程序或汇编源程序。特点:(1)汇编语言比机器语言容易理解,但必须通过编译程序翻译成机器语言,才能被计算机执行。(2)汇
2、编语言直接访问CPU硬件,响应速度快,程序存储器利用率高。(3)利用汇编语言编程要求程序设计人员必须对机器的硬件结构和指令系统熟悉。3高级语言高级语言(如PASCAL、C、FORTRAN、BASIC等)是一种面向问题或过程的语言。接近于自然语言和数学算法,与机器的硬件无关,用户编程时不必仔细了解所用计算机的具体性能和指令系统。高级语言不但直观、易学、易懂,而且通用性强,可以在不同的计算机上运行,因此可移植性好。本章内容伪指令源程序的编辑与汇编汇编语言程序设计设计步骤流程图设计实例伪指令在编制汇编语言源程序的过程中,除了使用mcs-
3、51指令系统外,还使用伪指令。汇编语言源程序通过汇编程序的编译生成目标代码(机器语言程序),伪指令是对汇编过程进行控制的指令,主要用来指定程序或数据的起始位置,给出一些连续存放数据的确定地址,或为中间运算结果保留一部分存储空间以及表示源程序结束等。伪指令不要求计算机进行任何操作,也没有对应的机器码,不产生目标程序,不影响程序的执行。不同版本的汇编语言,伪指令的符号和含义可能有所不同,但是基本用法是相似的。(1)设置目标程序起始地址的伪指令[标号:]ORG16位地址该伪指令的功能是规定其后面目标程序的起始地址。它放在一段源程序(主程
4、序、子程序)或数据块的前面,说明紧跟在其后的程序段或数据块的起始地址就是指令中的16位地址。例如:ORG2000HSTART:MOVA,#7FH…伪指令(2)结束汇编伪指令END。格式:[标号:]ENDEND是汇编语言源程序的结束标志,表示汇编结束。在END以后所写的指令,汇编程序都不予以处理。一个源程序只能有一个END命令。在同时包含有主程序和子程序的源程序中,也只能有一个END命令,并放到所有指令的最后,否则,就有一部分指令不能被汇编。(3)定义字节伪指令DB。格式:[标号:]DB项或项表其中项或项表指一个字节,或用逗号分开
5、的字符串,或以引号括起来的字符串(一个字符用ASCII码表示,就相当于一个字节)。该伪指令的功能是把项或项表的数值(字符则用ASCII码)存入从标号开始的连续存储单元中。例如:ORG2000HTAB1:DB30H,8AH,7FH,73DB′5′,′A′,′BCD′由于ORG2000H,所以TAB1的地址为2000H,因此以上伪指令经汇编以后,将对2000H开始的若干内存单元赋值:(2000H)=30H(2005H)=41H;字母A的ASCII码(2001H)=8AH(2006H)=42H;′BCD′中B的ASCII码(2002H)
6、=7FH(2007H)=43H;′BCD′中C的ASCII码(2003H)=49H;十进制数73以十六进制数存放(2008H)=44H;′BCD′中D的ASCII码(2004H)=35H;数字5的ASCII码伪指令(4)定义字伪指令DW。格式:[标号:]DW项或项表DW伪指令与DB的功能类似,所不同的是DB用于定义一个字节(8位二进制数),而DW则用于定义一个字(即两个字节,16位二进制数)。在执行汇编程序时,机器会自动按高8位先存入,低8位后存入的格式排列,这和MCS—51指令中16位数据存放的方式一致。例如:ORG1500HT
7、AB2:DW1234H,80H汇编以后:(1500H)=12H,(1501H)=34H,(1502H)=00H,(1503H)=80H。(5)预留存储空间伪指令DS。格式:[标号:]DS表达式该伪指令的功能是从标号指定的单元开始,保留若干字节的内存空间以备源程序使用。存储空间内预留的存储单元数由表达式的值决定。例如:ORG1000HDS20HDB30H,8FH汇编后:从1000H开始,预留32(20H)个字节的内存单元,然后从1020H开始,按照下一条DB指令赋值,即(1020H)=30H,(1021H)=8FH。保留的存储空间将
8、由程序的其它部分决定它们的用处。伪指令(6)等值伪指令EQU。格式:标号:EQU项该伪指令的功能是将指令中项的值赋予本语句的标号。项可以是常数、地址标号或表达式。例如:TAB:EQU1000HTAB1:EQUTAB前一条伪指令表示TAB地址的值为1