资源描述:
《指令系统及汇编.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、3.4汇编语言及汇编语言程序设计3.4.1机器语言、汇编语言和高级语言用户要使计算机能完成各式各样的任务,就要设计各种相应的应用程序,而设计程序就要用到程序设计语言。程序设计语言有3种:机器语言、汇编语言和高级语言。1.机器语言计算机能直接识别和执行的二进制代码形式的指令称为机器指令,而该类指令的集合称为计算机的机器语言,或称指令系统。机器语言是面向计算机系统的。由于各种计算机内部结构,线路的不同,每种计算机系统都有它自己的机器语言,即使执行同一操作,其指令也不相同。它是唯一能被计算机直接执行的程序。2.
2、汇编语言计算机所能执行的每条指令都对应一组二进制代码。为了容易理解和记忆计算机的指令,人们用一些英语的单词和字符以及数字作为助记符来描述每一条指令的功能。用助记符描述的指令系统,称为机器的汇编语言系统,简称汇编语言。MCS—51系列单片机是用51系列单片机的指令系统来编程的,其汇编语言的语句格式,也就是单片机的指令格式,即:[标号:]操作码[操作数][;注释]3.高级语言高级语言(如:PASCAL、C、FORTRAN、BASIC等)克服了汇编语言的缺点,是一种面向问题或过程的语言。它是一种接近于自然语言和
3、数学算法的语言,与机器的硬件无关,用户编程时不必仔细了解所用计算机的具体性能和指令系统。3.4.2汇编程序与伪指令1.汇编程序MCS—51指令所编写的汇编语言源程序,还必须经过从汇编源程序到机器语言目标程序的“翻译”,才能在51系列单片机运行,这种翻译的过程称为汇编。完成汇编工作有两种途径:一种是人工汇编;一种是机器汇编。汇编程序是将汇编源程序转变为相应目标程序的翻译程序。由于指令助记符与机器语言指令是一一对应的等价关系,所以汇编程序能很容易将汇编源程序迅速、准确、有效地翻译成目标程序。2.伪指令在汇编源
4、程序的过程中,还有一些指令不要求计算机进行任何操作,也没有对应的机器码,不产生目标程序,不影响程序的执行,仅仅是能够帮助汇编进行的一些指令,称之为伪指令。它主要用来指定程序或数据的起始位置,给出一些连续存放数据的确定地址,或为中间运算结果保留一部分存储空间以及表示源程序结束等等。(1)设置目标程序起始地址伪指令ORG。格式:[标号:]ORG16位地址该伪指令的功能是规定其后面目标程序的起始地址。它放在一段源程序(主程序、子程序)或数据块的前面,说明紧跟在其后的程序段或数据块的起始地址就是指令中的16位地址
5、(4位十六进制数)。例如:ORG2000HSTART:MOVA,#7FH…(2)结束汇编伪指令END。格式:[标号:]ENDEND是汇编语言源程序的结束标志,表示汇编结束。在END以后所写的指令,汇编程序都不予以处理。一个源程序只能有一个END命令。(3)定义字节伪指令DB。格式:[标号:]DB项或项表其中项或项表指一个字节,或用逗号分开的字符串,或以引号括起来的字符串(一个字符用ASCII码表示,就相当于一个字节)。该伪指令的功能是把项或项表的数值(字符则用ASCII码)存入从标号开始的连续存储单元中
6、。例如:ORG2000HTAB1:DB30H,8AH,7FH,73HDB′5′,′A′,′BCD′又如:1FFDHLJMP1234HDB30H,8AH,7FH,73,′5′,′A′,′BCD′不以跳转指令为转移???(4)定义字伪指令DW。格式:[标号:]DW项或项表DW伪指令与DB的功能类似,所不同的是DB用于定义一个字节(8位二进制数),而DW则用于定义一个字(即两个字节,16位二进制数)。在执行汇编程序时,机器会自动按高8位先存入,低8位后存入的格式排列,这和MCS—51指令中16位数据存放的方式
7、一致。例如:ORG1500HTAB2:DW1234H,80H汇编以后:(1500H)=12H,(1501H)=34H,(1502H)=00H,(1503H)=80H。(5)预留存储空间伪指令DS。格式:[标号:]DS表达式该伪指令的功能是从标号指定的单元开始,保留若干字节的内存空间以备源程序使用。存储空间内预留的存储单元数由表达式的值决定。例如:ORG1000HDS20HDB30H,8FH在达爱思的仿真环境中体现不出来。(6)等值伪指令EQU。格式:标号:EQU项该伪指令的功能是将指令中项的值赋予本语句的
8、标号。项可以是常数、地址标号或表达式。例如:TABEQU1000HTAB1EQUTAB前一条伪指令表示TAB地址的值为1000H,后一条表示符号地址TAB1与TAB等值(可以互换),需要注意的是,在同一程序中,用EQU伪指令对某标号赋值后,该标号的值在整个程序中不能再改变。本指令要出现在标号的后面。(7)位地址赋值伪指令BIT。格式:标号BIT位地址该伪指令的功能是将位地址赋予特定位的标号,经赋值后就可用指令中BIT左面的标号