微机原理3汇编语言程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第3章第3章:教学重点汇编语言源程序格式与开发常量、变量和标号汇编语言程序设计方法顺序程序设计分支程序设计循环程序设计子程序设计第3章例3.1:在屏幕上显示一段信息;数据段(定义要显示的字符串)stringdb’Hello,Assembly!’,0dh,0ah,’$’;代码段(显示字符串的程序)movdx,offsetstringmovah,9int21hHello,Assembly!程序功能第3章:3.1.1完整汇编程序的简化段定义格式.modelsmall;定义程序的存储模式(小型模式).stack;定义堆栈段(默认是1KB空间).data;定义数据段……;数据定义.code;定义代码段start:movax,@data;程序起始点movds,ax;设置DS指向用户定义的数据段……;程序代码movax,4c00hint21h;程序结束点,返回DOS……;子程序代码endstart;汇编结束第3章:第一个源程序文件wjl301.asm;wjl301.asm.modelsmall.stack.datastringdb’Hello,Assembly!’,0dh,0ah,’$’.codestart:movax,@datamovds,axmovdx,offsetstringmovah,9int21hmovax,4c00hint21hendstart汇编语言masm6.11的上机过程汇编语言的上机过程(基于MASM6.11).doc第3章:汇编语言程序的开发过程(附录B)编辑文本编辑器,如记事本源程序:文件名.asm汇编汇编程序,如ML.EXE目标模块:文件名.obj连接连接程序,如LINK.EXE可执行文件:文件名.exe调试调试程序,如DEBUG.EXE应用程序错误错误错误错误开发过程1:源程序的编辑源程序文件要以ASM为扩展名源程序文件的形成(编辑)可以通过任何一个文本编辑器实现:其他程序开发工具中的编辑环境Windows中的记事本Notepad、写字板word。。。开发过程2:源程序的汇编(MASM6.x)汇编是将源程序翻译成由机器代码组成的目标模块文件的过程MASM6.x提供的汇编程序是ML.EXE:ML/cwjl301.asm(c:compile)生成wjl301.obj;若有错误,MASM将给出相应的错误信息。应根据错误信息,重新编辑修改源程序后,再进行汇编。开发过程2:源程序的汇编(生成列表文件)汇编过程中,可以通过参数选择生成列表文件(.LST)。列表文件是一种文本文件,含有源程序和目标代码,对我们学习汇编语言程序设计和发现错误很有用汇编程序ML.EXE可带其他参数,为了生成列表文件,可以:ML/Flwjl301.asm该命令除产生模块文件wjl301.obj(和可执行文件wjl301.exe)外,还将生成列表文件wjl301.lst开发过程3:目标模块的连接连接程序能把一个或多个目标文件和库文件合成一个可执行程序(.EXE、.COM文件):LINKwjl301.obj;如果没有严重错误,LINK将生成一个可执行文件(wjl301.exe);否则将提示相应的错误信息。这时需要根据错误信息重新修改源程序文件后再汇编、连接,直到生成可执行文件实际上,ML.EXE汇编程序(MASM6.x)可自动调用LINK连接程序,实现汇编和连接的依次进行MLwjl301.asm开发过程4:可执行程序的调试经汇编、连接生成的可执行程序在操作系统下只要输入文件名就可以运行:wjl301操作系统装载该文件进入主存,并开始运行如果出现运行错误,可以从源程序开始排错,也可以利用调试程序帮助发现错误采用DEBUG.EXE调试程序:DEBUGwjl301.exe常用debug指令-提示符-u反汇编,例:-u1469:010,显示偏移地址0-10范围内的16进制代码及相应指令-d显示一定范围内存地址的内容。例:-dds:1020-g运行当前内存中的程序。例:-g30,从当前地址运行到偏移地址30h详情参考课本P345,附录A第3章:硬指令与伪指令硬指令(Instruction)——使CPU产生动作、并在程序执行时才处理的指令硬指令就是第2章学习的处理器指令,与具体的处理器有关、与汇编程序无关伪指令(Directive)——不产生CPU动作、在程序执行前由汇编程序处理的说明性指令伪指令与具体的处理器类型无关,但与汇编程序有关。不同版本的汇编程序支持不同的伪指令硬指令和伪指令采用易于记忆的符号表达,这就是助记符第3章:汇编语言的应用领域1、适用的领域要求执行效率高、反应快的领域,如:操作系统内核,工业控制,实时系统等;与硬件资源密切相关的软件开发,如:设备驱动程序等;受存储容量限制的应用领域,如:家用电器的计算机控制功能等。2、不宜使用的领域大型软件的整体开发;没有特殊要求的一般应用系统的开发等。第3章:汇编语言的特点“与机器相关”和“执行的高效率”机器指令的一种符号表示可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序第3章:第一个源程序文件wjl301.asm;wjl301.asm.modelsmall.stack.datastringdb’Hello,Assembly!’,0dh,0ah,’$’.codestart:movax,@datamovds,axmovdx,offsetstringmovah,9int21hmovax,4c00hint21hendstart标号名字标识符第3章:标号、名字与标识符标号是反映硬指令位置(逻辑地址)和属性的标识符,后跟一个冒号分隔名字是反映伪指令位置(逻辑地址)和属性的标识符,后跟空格,没有冒号标识符(Identifier):用户自定义的符号。规定见P34第三段一个源程序中,每个标识符的定义是唯一的,不能是汇编语言采用的保留字第3章:保留字保留字(ReservedWord)是汇编程序已经利用的标识符(也称为关键字),主要有:硬指令助记符——例如:MOV、ADD伪指令助记符——例如:DB、DW操作符——例如:OFFSET(偏移地址)、PTR(指针)寄存器名——例如:AX、CS预定义符号——例如:@data(表示data段名,实际上是段地址)汇编语言大小写不敏感第3章:1.存储模式(MemoryModel)存储模式决定了一个程序的规模当使用简化段定义的源程序格式时,必须有存储模式.MODEL语句,且位于所有简化段定义语句之前。其格式为:.MODEL存储模式.MODEL语句确定了程序采用的存储模式,MASM有7种可以选择,如表3.1所示本课程学习过程中,均采用小型模式SMALL第3章:2.逻辑段的简化定义(参照P61,汇编程序典型格式).STACK[大小];堆栈段定义伪指令.STACK创建一个堆栈段,段名是:STACK。可选的“大小”参数指定堆栈段所占存储区的字节数,默认是1KB(=1024=400H字节).DATA;数据段定义伪指令.DATA创建一个数据段,段名是:_DATA。数据段名可用@DATA预定义标识符表示.CODE[段名];代码段定义伪指令.CODE创建一个代码段,可选的“段名”参数指定该代码段的段名。如果没有给出段名,则采用默认段名。SMALL模式下,默认段名是_TEXT。一个段的开始自动结束前面的一个段第3章:3.程序开始为了指明程序开始执行的位置,需要使用一个标号(如start标识符)连接程序会根据程序起始点正确地设置CS和IP值,根据程序大小和堆栈段大小设置SS和SP值连接程序没有设置DS和ES值。程序如果使用数据段或附加段,必须明确给DS或ES赋值大多数程序需要数据段,程序的执行开始应是:start:movax,@data;@data表示数据段的段地址movds,ax;设置DS第3章:4.程序终止应用程序执行结束,应该将控制权交还操作系统汇编语言程序设计中,有多种返回DOS的方法,但一般利用DOS功能调用的4CH子功能实现,它需要的入口参数是AL=返回数码(通常用0表示程序没有错误)所以,应用程序的终止代码就是:movax,4c00hint21h第3章:5.汇编结束源程序的最后必须有一条END伪指令END[标号]————不要糊涂————程序终止和汇编结束是两码事第3章:3.1.2完整段定义格式完整段定义利用SEGMENT和ENDS一对伪指令定义逻辑段同时需要配合ASSUME伪指令指明逻辑段是代码段、堆栈段、数据段还是附加段参照P63,汇编程序典型格式第3章:3.2常量、变量和标号3.2.1常量常量表示一个固定的数值,它又分成多种形式1.常数2.字符串3.符合常量4.数值表达式第3章:1.常数可以是10、16、2和8进制形式,默认不加后缀字母的是十进制数十进制由0~9数字组成,以字母D(d)结尾(缺省情况可以省略)100,255D十六进制由0~9、A~F数字组成,以字母H(h)结尾,以字母开头的常数需要加一个前导064H,0FFH0B800H二进制由0和1两个数字组成,以字母B(b)结尾01100100B八进制由0~7数字组成,以字母Q或O结束356Q第3章:2.字符串字符串常量是用单引号或双引号括起来的单个字符或多个字符,其数值是每个字符对应的ASCII码值例如:‘d’(等于64H)‘AB’(等于4142H)‘Hello,Assembly!’第3章:3.符号常量常量用有意义的符号表示,就是符号常量。使用它,可以提高程序的可读性。符号定义伪指令有“等价EQU”和“等号=”:符号名EQU数值表达式符号名=数值表达式例如:X=7;等效于:Xequ7X=X+5;“XEQUX+5”是错误的,P66第3章:4.数值表达式汇编语言支持多种运算符(P67表3-3)我们经常使用的是加减乘除(+-*/)例如:movax,3*4+5;等价于:movax,17自己看书上P67页的例子第3章:3.2.2变量1.变量的定义变量定义的汇编语言格式为:变量名伪指令初值表变量名为用户自定义标识符,表示初值表首元素的逻辑地址。初值表是用逗号分隔的参数,主要由常量、数值表达式或“?”组成。其中“?”表示未赋初值多个存储单元如果初值相同,可以用复制操作符DUP进行定义:重复次数DUP(重复参数)参见P67变量定义伪指令有DB、DW、DD等(表3-4);数据段Xdb'a',5db2dup(100),?Ydb'ABC'第3章:字节变量的应用moval,X;此处X表示它的第1个数据,故AL←'a'decX+1;对X为始的第2个数据减1,故成为4movY,al;现在Y这个字符串成为'aBC'字变量定义实例;数据段countdw8000h,?,'AB'maxintequ64hnumberdwmaxintarraydwmaxintdup(0)第3章:3.变量的定位ORG参数将当前偏移地址指针指向参数表达的偏移地址。例如:ORG100h;从100H处安排数据或程序ORG$+10;偏移地址加10,即跳过10个字节空间符号“$”表示当前偏移地址值P69arr_size=$-array第3章:3.2.3名字和标号的属性1.地址2.类型地址操作符取得名字或标号的段地址和偏移地址[]将括起的表达式作为存储器地址指针$当前偏移地址:段前缀,采用指定的段地址寄存器OFFSET名字/标号返回名字或标号的偏移地址SEG名字/标号返回名字或标号的段地址第3章:2.类型操作符类型操作符对名字或标号的类型属性进行设置类型名PTR名字/标号moval,byteptr[2000h]movax,wordptr[2000h]对变量:LENGTHOF操作符获知某变量名指向元素个数SIZEOF操作符获知变量共占用多少字节空间data1dw100dup(?)movcx,lengthofdata1;movcx,sizeofdata1;movcx,typedata1;变量和标号的区别:都具有逻辑地址和类型变量是数据区的名字标号是某条执行指令起始地址的符号表示变量的类型是指数据项存取单位的字节数大小标号的类型是指使用该标号的两条指令之间的

1 / 67
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功