




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、12汇编语言的特点n汇编语言汇编语言是一种以处理器指令系统为基础的低是一种以处理器指令系统为基础的低级程序设计语言,它采用级程序设计语言,它采用助记符助记符表达指令操作表达指令操作码,采用码,采用标识符号标识符号表示指令操作数表示指令操作数n利用汇编语言编写程序的主要利用汇编语言编写程序的主要优点优点是可以是可以直接、直接、有效地控制计算机硬件有效地控制计算机硬件,因而容易创建,因而容易创建代码序代码序列短小列短小、运行快速运行快速的可执行程序的可执行程序n在有些应用领域,汇编语言的作用是不容置疑在有些应用领域,汇编语言的作用是不容置疑和无可替代的和无可替代的n汇编程序设计的过程是与其他高级语
2、言程序设汇编程序设计的过程是与其他高级语言程序设计大致相同计大致相同3教学重点n汇编语言源程序格式与开发汇编语言源程序格式与开发n常量、变量和标号常量、变量和标号n汇编语言程序设计方法汇编语言程序设计方法n顺序程序设计顺序程序设计n分支程序设计分支程序设计n循环程序设计循环程序设计n子程序设计子程序设计43.1 汇编语言源程序格式n完整的汇编语言源程序由段组成完整的汇编语言源程序由段组成n一个汇编语言源程序可以包含若干个代码段、数据一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排段、附加段或堆栈段,段与段之间的顺序可随意排列列n需独立运行的程序必须包含一
3、个需独立运行的程序必须包含一个代码段代码段,并指示程,并指示程序执行的序执行的起始点起始点,一个程序只有一个起始点,一个程序只有一个起始点n所有的可执行性语句必须位于某一个代码段内,说所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内明性语句可根据需要位于任一段内n通常,程序还需要一个堆栈段通常,程序还需要一个堆栈段 源程序由语句序列构成源程序由语句序列构成5汇编语言的语句格式执行性语句执行性语句执行性语句用于表达处理器执行性语句用于表达处理器指令指令(也称为硬指令也称为硬指令),汇编后对应一条指令,汇编后对应一条指令代码。由处理器指令组成的代码序列是程序代码。由处理器
4、指令组成的代码序列是程序设计的主体设计的主体标号标号: : 硬指令助记符硬指令助记符 操作数操作数, ,操作数操作数 ; ;注释注释说明性语句说明性语句说明性语句用于表达伪指令,说明性语句用于表达伪指令,指示源程序如何汇编、变量怎样定义、过程指示源程序如何汇编、变量怎样定义、过程怎么设置等怎么设置等名字名字 伪指令助记符伪指令助记符 参数参数, ,参数参数, , ; ;注释注释6硬指令与伪指令n硬指令硬指令(Instruction)使使CPU产生动作、并产生动作、并在程序执行时才处理的指令在程序执行时才处理的指令硬指令就是第硬指令就是第2章学习的处理器指令,与具体的处章学习的处理器指令,与具体
5、的处理器有关、与汇编程序无关理器有关、与汇编程序无关n伪指令伪指令(Directive)不产生不产生CPU动作、在程动作、在程序执行前由汇编程序处理的说明性指令序执行前由汇编程序处理的说明性指令伪指令与具体的处理器类型无关,但与汇编程序有伪指令与具体的处理器类型无关,但与汇编程序有关。不同版本的汇编程序支持不同的伪指令关。不同版本的汇编程序支持不同的伪指令 硬指令和伪指令采用易于记忆的符合表硬指令和伪指令采用易于记忆的符合表达,这就是助记符达,这就是助记符7第3章:标号、名字与标识符n标号标号是反映硬指令是反映硬指令位置位置(逻辑地址)和(逻辑地址)和属性属性的标识的标识符,后跟一个冒号分隔符
6、,后跟一个冒号分隔n名字名字是反映伪指令是反映伪指令位置位置(逻辑地址)和(逻辑地址)和属性属性的标识的标识符,后跟空格或制表符分隔,符,后跟空格或制表符分隔,没有冒号没有冒号n标识符标识符(Identifier)一般最多由)一般最多由31个字母、数字个字母、数字及规定的特殊符号(如及规定的特殊符号(如 _、$、?、)组成,不能)组成,不能以数字开头。默认情况下,汇编程序不区别标识符以数字开头。默认情况下,汇编程序不区别标识符中的字母大小写中的字母大小写n一个源程序中,每个标识符的定义是唯一的,且不一个源程序中,每个标识符的定义是唯一的,且不能是汇编系统所采用的能是汇编系统所采用的保留字保留字
7、8保留字n保留字(保留字(Reserved Word)是汇编程序已)是汇编程序已经利用的标识符(也称为关键字),主要有:经利用的标识符(也称为关键字),主要有:n硬指令助记符硬指令助记符例如:例如:MOV、ADDn伪指令助记符伪指令助记符例如:例如:DB、DWn操作符操作符例如:例如:OFFSET、PTRn寄存器名寄存器名例如:例如:AX、CSn预定义符号预定义符号例如:例如:data 汇编语言对大小写不敏感汇编语言对大小写不敏感9操作数和参数n处理器指令中的处理器指令中的操作数操作数可以是立即数、寄可以是立即数、寄存器和存储单元存器和存储单元n伪指令中的伪指令中的参数参数可以是常数、变量名、
8、表可以是常数、变量名、表达式等,可以有多个,参数之间用逗号分达式等,可以有多个,参数之间用逗号分隔隔10注释n语句中由分号语句中由分号“;”开始的部分为注释内开始的部分为注释内容,用以增加源程序的可读性容,用以增加源程序的可读性n必要时,一个语句行也可以由分号开始作必要时,一个语句行也可以由分号开始作为阶段性注释为阶段性注释n汇编程序在翻译源程序时将跳过该部分,汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理不对它们做任何处理11分隔符n语句的语句的4个组成部分个组成部分要用要用分隔符分隔符分开分开n标号后用标号后用冒号冒号,注释前用,注释前用分号分号n操作数之间和参数之间使用操作数之间
9、和参数之间使用逗号逗号分隔分隔n其他部分通常采用其他部分通常采用空格空格或或制表符制表符n多个空格和制表符的作用与一个相同多个空格和制表符的作用与一个相同nMASM支持支持续行符续行符 “”12例3.1 在屏幕上显示一段信息;数据段(定义要显示的字符串)数据段(定义要显示的字符串)stringdbHello, Assembly !,0dh,0ah,$;代码段(显示字符串的程序)代码段(显示字符串的程序)mov dx,offset stringmov ah,9int 21hHello, Assembly !程序功能程序功能133.1.1 简化段定义格式.model small;定义程序的;定义程
10、序的存储模式存储模式(小型模式)(小型模式).stack;定义;定义堆栈段堆栈段(默认是(默认是1KB空间)空间).data;定义;定义数据段数据段;数据定义;数据定义.code;定义;定义代码段代码段start: mov ax,data ;程序;程序起始点起始点mov ds,ax;设置;设置DS指向用户定义的数据段指向用户定义的数据段;程序代码;程序代码mov ax,4c00hint 21h;程序结束点,返回;程序结束点,返回DOS;子程序代码;子程序代码end start;汇编结束,同时指明程序起始点;汇编结束,同时指明程序起始点start14第1个源文件wjl301.asm;wjl301
11、.asm.model small.stack.datastringdb Hello, Assembly !,0dh,0ah,$.codestart:mov ax,datamov ds,axmov dx,offset stringmov ah,9int 21hmov ax,4c00hint 21hend start15汇编语言程序的处理过程(附录B)编辑编辑文本编辑器,如文本编辑器,如 PWB.EXE源程序:文件名源程序:文件名.asm汇编汇编汇编程序,如汇编程序,如 ML.EXE目标模块:文件名目标模块:文件名.obj连接连接连接程序,如连接程序,如 LINK.EXE可执行文件:文件名可执行文
12、件:文件名.exe调试调试调试程序,如调试程序,如 DEBUG.EXE应用程序应用程序错误错误错误错误错误错误错误错误16上机过程1:编辑源程序n源程序源程序文件应以文件应以. ASM为扩展名为扩展名n源程序文件的形成(编辑)可以通过任何源程序文件的形成(编辑)可以通过任何一个文本编辑器实现一个文本编辑器实现: : DOS中的全屏幕文本编辑器中的全屏幕文本编辑器EDIT EDIT wjl301.asm MASM 6.X提供的集成工作环境提供的集成工作环境PWB Windows中的记事本中的记事本Notepad 其他程序开发工具中的编辑环境其他程序开发工具中的编辑环境 17上机过程2:汇编源程序
13、MASM 6.xn汇编是将源程序翻译成由机器代码组成的汇编是将源程序翻译成由机器代码组成的目标模块文件的过程目标模块文件的过程nMASM 6.x提供的汇编程序是提供的汇编程序是ML.EXE ML /c wjl301.asmn如果源程序中没有语法错误,如果源程序中没有语法错误,MASM将自将自动生成一个目标模块文件(动生成一个目标模块文件(wjl301.obj););否则否则MASM将给出相应的错误信息。这时将给出相应的错误信息。这时应根据错误信息,重新编辑修改源程序后,应根据错误信息,重新编辑修改源程序后,再进行汇编再进行汇编18开发过程2:汇编源程序MASM 5.xnMASM 5.x提供的汇
14、编程序是提供的汇编程序是MASM.EXE MASM wjl301.asm ;n如果利用分号如果利用分号“;”结尾命令,则汇编程序不结尾命令,则汇编程序不再提示输入模块文件名、列表文件名等,直再提示输入模块文件名、列表文件名等,直接采用默认的文件名。接采用默认的文件名。n默认采用源程序文件相同的主文件名,扩展默认采用源程序文件相同的主文件名,扩展名则是相应类型文件的扩展名,例如目标文名则是相应类型文件的扩展名,例如目标文件(件(.obj)和列表文件()和列表文件(.lst)等)等19上机过程2:生成列表文件n汇编过程中,可以通过参数选择生成汇编过程中,可以通过参数选择生成列表文件列表文件(.LS
15、T)。列表文件是一种文本文件,含有源程)。列表文件是一种文本文件,含有源程序和目标代码,对我们学习汇编语言程序设计和序和目标代码,对我们学习汇编语言程序设计和发现错误很有用发现错误很有用n汇编程序汇编程序ML.EXE和和MASM.EXE都可带其他参数,都可带其他参数,为了生成列表文件,各自的命令是:为了生成列表文件,各自的命令是: ML /Fl wjl301.asm产生产生.obj/.exe/.lst MASM /l wjl301.asm;产生产生.obj/.lstn以上命令除产生模块文件以上命令除产生模块文件wjl301.obj外,还将生外,还将生成列表文件成列表文件wjl301.lst20
16、上机过程3:连接目标模块n连接程序能把一个或多个目标文件和库文件合成连接程序能把一个或多个目标文件和库文件合成一个可执行程序(一个可执行程序(.EXE、.COM文件):文件):LINK wjl301.obj;n如果没有严重错误,如果没有严重错误,LINK将生成一个可执行文件将生成一个可执行文件(wjl301.exe);否则将提示相应的错误信息。);否则将提示相应的错误信息。这时需要根据错误信息重新修改源程序文件后再这时需要根据错误信息重新修改源程序文件后再汇编、链接,直到生成可执行文件汇编、链接,直到生成可执行文件nML.EXE汇编程序(汇编程序(MASM 6.x)可自动调用)可自动调用LIN
17、K连接程序,实现汇编和连接的依次进行连接程序,实现汇编和连接的依次进行ML wjl301.asm21上机过程4:运行和调试n经汇编、连接生成的可执行程序在操作系统经汇编、连接生成的可执行程序在操作系统下只要输入文件名就可以运行:下只要输入文件名就可以运行: wjl301n操作系统装载该文件进入主存,并开始运行操作系统装载该文件进入主存,并开始运行n如果出现运行错误,可以从源程序开始排错,如果出现运行错误,可以从源程序开始排错,也可以利用调试程序帮助发现错误也可以利用调试程序帮助发现错误n采用采用DEBUG.EXE调试程序:调试程序: DEBUG wjl301.exe221. 存储模式(Memo
18、ry Model)n存储模式存储模式决定了一个程序的规模,也确定了子程序决定了一个程序的规模,也确定了子程序调用、指令转移和数据访问等的缺省属性调用、指令转移和数据访问等的缺省属性n当使用简化段定义的源程序格式时,必须有存储模当使用简化段定义的源程序格式时,必须有存储模式式.MODEL语句,且位于所有简化段定义语句之前。语句,且位于所有简化段定义语句之前。其格式为:其格式为:.MODEL 存储模式存储模式n.MODEL语句确定了程序采用的存储模式,语句确定了程序采用的存储模式,MASM有有7种可以选择,如种可以选择,如表表3.1所示所示 本课程学习过程中,均采用小型模式本课程学习过程中,均采用
19、小型模式SMALL232. 逻辑段的简化定义.STACK 大小大小堆栈段定义伪指令堆栈段定义伪指令.STACK创建创建一个堆栈段,段名是:一个堆栈段,段名是:STACK。可选的。可选的“大小大小”参参数指定堆栈段所占存储区的字节数,默认是数指定堆栈段所占存储区的字节数,默认是1KB(1024400H字节)字节).DATA数据段定义伪指令数据段定义伪指令.DATA创建一个数据创建一个数据段,段名是:段,段名是:_DATA。数据段名可用。数据段名可用DATA预定预定义标识符表示义标识符表示.CODE 段名段名代码段定义伪指令代码段定义伪指令.CODE创建一创建一个代码段,可选的个代码段,可选的“段
20、名段名”参数指定该代码段的段参数指定该代码段的段名。如果没有给出段名,则采用默认段名名。如果没有给出段名,则采用默认段名 一个段的开始自动结束前面的一个段一个段的开始自动结束前面的一个段 简化段定义伪指令之前,需有存储模式语句简化段定义伪指令之前,需有存储模式语句243. 程序开始n为了指明程序开始执行的位置,需要使用一个标号为了指明程序开始执行的位置,需要使用一个标号(例题中采用了(例题中采用了start 标识符)标识符)n连接程序会根据程序起始点正确地设置连接程序会根据程序起始点正确地设置CS和和IP值,值,根据程序大小和堆栈段大小设置根据程序大小和堆栈段大小设置SS和和SP值值n连接程序
21、没有设置连接程序没有设置DS和和ES值。程序如果使用数据值。程序如果使用数据段或附加段,必须明确给段或附加段,必须明确给DS或或ES赋值赋值n大多数程序需要数据段,程序的执行开始应是:大多数程序需要数据段,程序的执行开始应是:start: mov ax,data;data表示数据段的段地址表示数据段的段地址mov ds,ax;设置设置DS254. 程序终止并返回操作系统n应用程序执行结束,应该将控制权交还操作系统应用程序执行结束,应该将控制权交还操作系统n汇编语言程序设计中,有多种返回汇编语言程序设计中,有多种返回DOS的方法,的方法,但一般利用但一般利用DOS功能调用的功能调用的4CH子功能
22、实现,它子功能实现,它需要的入口参数是需要的入口参数是AL返回数码(通常用返回数码(通常用0表示表示程序运行正常,没有错误)程序运行正常,没有错误)n于是,应用程序的终止代码就是:于是,应用程序的终止代码就是:mov ax,4c00hint 21h265. 汇编结束n汇编结束表示通知汇编程序结束工作,即汇编结束表示通知汇编程序结束工作,即将源程序翻译成目标模块代码的过程结束。将源程序翻译成目标模块代码的过程结束。n源程序的最后必须有一条源程序的最后必须有一条END伪指令伪指令END 标号标号n可选的可选的“标号标号”参数指定程序开始执行点,参数指定程序开始执行点,连接程序据此设置连接程序据此设
23、置CS和和IP值(例题中采用值(例题中采用了了start 标识符)标识符) 程序终止和汇编结束是两码事程序终止和汇编结束是两码事27第1个源文件wjl301.asm;wjl301.asm.model small.stack.datastringdb Hello, Assembly !,0dh,0ah,$.codestart:mov ax,datamov ds,axmov dx,offset stringmov ah,9int 21hmov ax,4c00hint 21hend start28简化段定义的源程序格式.model small;小型模式;小型模式存储模式存储模式.stack; 1KB
24、空间空间堆栈段堆栈段.data;数据段数据段;数据定义;数据定义.code;代码段代码段start:mov ax,data;起始点起始点mov ds,ax;设置;设置DS;程序代码;程序代码mov ax,4c00hint 21h;结束点结束点,返回,返回DOS;子程序代码;子程序代码end start;汇编结束;汇编结束293.1.2 完整段定义格式n完整段定义利用完整段定义利用SEGMENT和和ENDS一对伪指令一对伪指令定义逻辑段定义逻辑段n同时需要配合同时需要配合ASSUME伪指令指明逻辑段是代伪指令指明逻辑段是代码段、堆栈段、数据段还是附加段码段、堆栈段、数据段还是附加段n完整段完整段
25、定义定义其其优点优点是可以指明逻辑段的是可以指明逻辑段的定定位位、组合组合、类别类别等属性;等属性;n简化段简化段定义定义只能采用系统只能采用系统默认的属性默认的属性n完整段定义和简化段定义的实质是一致的完整段定义和简化段定义的实质是一致的303.1.3 可执行程序的结构nDOS操作系统支持两种可执行程序结构操作系统支持两种可执行程序结构1. EXE程序程序 程序可以有程序可以有多个代码段多个代码段和和多个数据段多个数据段,程序,程序长度长度可以超过可以超过64KB 通常生成通常生成EXE结构的可执行程序结构的可执行程序2. COM程序程序 只有只有一个逻辑段一个逻辑段,程序,程序长度长度不超
26、过不超过64KB 需要满足一定条件才能生成需要满足一定条件才能生成COM结构的可执行结构的可执行程序(程序(MASM 6.x需要采用需要采用TINY模式)模式)313.2 常量、变量和标号 n汇编语言的数据可以简单分为汇编语言的数据可以简单分为常量常量和和变量变量n常量常量可作可作硬指令硬指令的的立即数立即数或或伪指令伪指令的的参数参数,n变量变量主要作为主要作为存储器操作数存储器操作数n汇编语言语句中的汇编语言语句中的名字名字和和标号标号具有具有逻辑地址逻辑地址和和类类型属性型属性,主要用做地址操作数,也可以作为立即,主要用做地址操作数,也可以作为立即数和存储器操作数数和存储器操作数n本节将
27、详细讨论语句中的参数和操作数、名字和本节将详细讨论语句中的参数和操作数、名字和标号,并引出相关的伪指令和操作符标号,并引出相关的伪指令和操作符323.2.1 常量n常量表示一个固定的数值,它又分成多种形常量表示一个固定的数值,它又分成多种形式式 常数常数 字符串字符串 符合常量符合常量 数值表达式数值表达式331. 常数n指由指由10、16、2和和8进制形式表达的数值,各种进制形式表达的数值,各种进制的数据以后缀字母区分,默认不加后缀字母进制的数据以后缀字母区分,默认不加后缀字母的是十进制数的是十进制数01100100B由由0和和1两个数字组成,以字母两个数字组成,以字母B/b结结尾尾二进制二
28、进制64H0FFH0B800H由由0 9、A F数字组成,以字母数字组成,以字母H/h 结尾,以字母开头的常数需要结尾,以字母开头的常数需要加一个前导加一个前导0十六进制十六进制100255D由由0 9数字组成,以字母数字组成,以字母 D/d 结尾结尾(缺省情况可以省略)(缺省情况可以省略)十进制十进制342. 字符串n字符串常量是用字符串常量是用单引号单引号或或双引号双引号括起来的括起来的单个单个字符或字符或多个多个字符字符n其数值是每个字符对应的其数值是每个字符对应的ASCII码码值值n例如:例如:d(等于(等于64H)AB(等于(等于4142H)Hello, Assembly !353.
29、 符号常量n符号常量使用标识符表达一个数值符号常量使用标识符表达一个数值nMASM提供等价机制,用来为常量定义符号名提供等价机制,用来为常量定义符号名n符号定义伪指令符号定义伪指令有有等价等价“EQU”和和等号等号“”:符号名符号名 EQU 数值表达式数值表达式符号名符号名 EQU ;MASM 5.x不支持不支持符号名符号名 数值表达式数值表达式nEQU用于数值等价时不能重复定义符号名,但用于数值等价时不能重复定义符号名,但“”允允许重复赋值。例如:许重复赋值。例如:X = 7 ;等效于:等效于:X equ 7X = X+5 ;“X EQU X+5”是错误的是错误的364. 数值表达式n数值表
30、达式数值表达式一般是指由一般是指由运算符运算符连接的各种常量所构成的连接的各种常量所构成的表达式表达式n汇编程序在汇编过程中计算表达式,最终得到一个确定汇编程序在汇编过程中计算表达式,最终得到一个确定的数值,所以也是常量的数值,所以也是常量n表达式的数值在程序运行前的汇编阶段计算,所以组成表达式的数值在程序运行前的汇编阶段计算,所以组成表达式的各部分必须在汇编时就能确定表达式的各部分必须在汇编时就能确定n汇编语言支持多种运算符(汇编语言支持多种运算符(表表3.4)n我们经常使用的是加减乘除(我们经常使用的是加减乘除( * / )n例如:例如:mov ax,3*4+5;等价于:等价于:mov a
31、x,17373.2.2 变量 n变量变量实质上是指实质上是指可以读写可以读写的的内存单元内存单元,虽然内,虽然内存单元地址不变,但其中存放的数据可以改变存单元地址不变,但其中存放的数据可以改变n变量需要事先定义才能使用变量需要事先定义才能使用n变量定义(变量定义(Define)伪指令)伪指令为变量申请固定长为变量申请固定长度为单位的存储空间,并可以同时将相应的存度为单位的存储空间,并可以同时将相应的存储单元初始化储单元初始化n定义后的变量可以通过变量名等方法引用(读定义后的变量可以通过变量名等方法引用(读写)其中的数据,即变量中的数值写)其中的数据,即变量中的数值381. 变量的定义 n变量定
32、义的汇编语言格式为:变量定义的汇编语言格式为:变量名变量名 变量定义伪指令变量定义伪指令 初值表初值表n变量定义伪指令变量定义伪指令有有DB、DW、DD等(表等(表3.5)n变量名变量名为用户自定义的标识符,有时为用户自定义的标识符,有时变量名变量名也可以缺也可以缺省省n初值表初值表是用逗号分隔的参数是用逗号分隔的参数,主要由常量、数值表达主要由常量、数值表达式或式或“?”组成。其中组成。其中“?”表示未赋初值表示未赋初值n多个存储单元如果初值相同,可以用复制操作符多个存储单元如果初值相同,可以用复制操作符DUP进行定义:进行定义:重复次数重复次数 DUP(重复参数重复参数)n表示表示初值表首
33、元素初值表首元素的逻辑地址,常称为的逻辑地址,常称为符号地址符号地址。39定义字节变量(Define Byte)nDB 伪指令用于分配一个或多个字节单元,并伪指令用于分配一个或多个字节单元,并可以将它们初始化为指定值可以将它们初始化为指定值n初值表中每个数据一定是字节量,存放一个初值表中每个数据一定是字节量,存放一个8位位数据:数据: 可以是可以是0255的无符号数的无符号数 或是或是128127带符号数带符号数 也可以是字符串常数也可以是字符串常数定义字节变量实例;数据段;数据段Xdb a,-5db 2 dup(100),?Ydb ABC41字节变量的应用 Xdb a, -5 db 2 du
34、p(100), ? Ydb ABCmov al,X ;此处此处X表示它的第表示它的第1个数据,故个数据,故ALadec X+1 ;对对X为始的第为始的第2个数据减个数据减1,故成为,故成为6mov Y,al ;现在现在Y这个字符串成为这个字符串成为 aBC符号地址符号地址变量初值变量初值初值表初值表42定义字变量(Define Word)nDW伪指令用于分配一个或多个字单元,并可以将伪指令用于分配一个或多个字单元,并可以将它们初始化为指定值它们初始化为指定值n初值表中每个数据是字量,一个字单元可用于存放初值表中每个数据是字量,一个字单元可用于存放任何任何16位数据:位数据: 一个段地址一个段地
35、址 一个偏移地址一个偏移地址 两个字符两个字符 065535之间的无符号数之间的无符号数 3276832767之间的带符号数之间的带符号数定义字变量实例;数据段;数据段countdw 8000h,?,ABmaxintequ 64hnumberdw maxintarraydw maxint dup(0)44定义双字变量(Define Double word)nDD 伪指令伪指令用于分配一个或多个双字单元,并可以将它用于分配一个或多个双字单元,并可以将它们初始化为指定值们初始化为指定值n初值表中每个数据是一个初值表中每个数据是一个3232位的双字量:位的双字量: 可以是有符号或无符号的可以是有符号
36、或无符号的3232位整数位整数 也可以用来表达也可以用来表达1616位段地址(高位字)和位段地址(高位字)和1616位的偏移位的偏移地址(低位字)的远指针地址(低位字)的远指针varddDD0,?,12345678hfarpointDD00400078h452. 变量的应用n变量变量具有存储单元的具有存储单元的逻辑地址属性逻辑地址属性n程序代码中程序代码中n通过通过变量名变量名可直接存取其所指向的可直接存取其所指向的首个首个数据数据X db a, -5 mov al, X ;X an通过变量名通过变量名加减位移量加减位移量可存取以改变量地址为基地址可存取以改变量地址为基地址的的前前/后数据后数
37、据 mov al, X+1 ;X -5 例题例题3.2 变量的定义和应用变量的定义和应用46例题3.2 变量的定义;数据段数据段bvar1 db 100, 01100100b, 64h, d;字节变量:不同进制表达同一个数值,内存中有字节变量:不同进制表达同一个数值,内存中有4个个64Hminint = 5;符号常量符号常量:minint 数值为数值为 5,不占内存空间,不占内存空间bvar2 db -1,minint,minint+5;内存中数值依次为内存中数值依次为 FFH, 5, 0AH db ? , 2 dup(20h);预留一个字节空间,重复定义了预留一个字节空间,重复定义了2个数值
38、个数值 20Hwvar1 dw 2010h, 4*4;字变量:两个数据是字变量:两个数据是 2010H、0010H,共占,共占4个字节个字节wvar2 dw ?;wvar2是是没有初值没有初值的字变量的字变量47例题3.2 变量的定义(续)dvardd 12347777h,87651111h,?;双字双字变量:变量:2个双字数据,一个双字空间个双字数据,一个双字空间abcdb a,b,c,?;定义字符,实际是字节定义字符,实际是字节变量变量maxint equ 0ah;符号常量符号常量:maxint10string db ABCDEFGHIJ;定义字符串:使用字节定义定义字符串:使用字节定义D
39、B伪指令伪指令crlfsdb 13,10,$;回车符回车符0DH、换行符换行符0AH和和美元符美元符$24Harray1dw maxint dup(0);10个初值为个初值为0的字量,可以认为是数组的字量,可以认为是数组array db 2 dup(2,3,2 dup(4);6个字节内容依次为:个字节内容依次为:02 03 04 04 02 03 04 0448例题3.2 变量的应用;代码段代码段mov dl, bvar1 ;DL100 ddec bvar2+1 ;bvar2+14mov abc3, dl ;abc3处原为处原为?现现abcabcd,mov ax,word ptr dvar0
40、;取双字到取双字到DX.AXmov dx,word ptr dvar2add ax,word ptr dvar4 ;加双字到加双字到DX.AXadc dx,word ptr dvar6mov word ptr dvar8,ax ;保存双字的求和结果保存双字的求和结果mov word ptr dvar10,dx49例题3.2 变量的应用(续)mov cx,maxint;CX10mov bx,0;BX0 again: add stringbx,3;string 每个数值加每个数值加 3inc bxloop again;循环循环lea dx,abc;从从abc开始显示开始显示,直到遇到直到遇到$mo
41、v ah,9;09H号号DOS功能调用功能调用int 21h;显示结果:显示结果:abcdDEFGHIJKLMabc串串string串串503.2 变量的定位n汇编程序按照指令的先后顺序一个接着一个分配存储空间,汇编程序按照指令的先后顺序一个接着一个分配存储空间,按照段定义伪指令规定的边界定位属性确定每个逻辑段的起按照段定义伪指令规定的边界定位属性确定每个逻辑段的起始位置(包括偏移地址)始位置(包括偏移地址)n定位伪指令定位伪指令ORG控制数据或代码所在的偏移地址控制数据或代码所在的偏移地址ORG 参数参数nORG伪指令是将当前偏移地址指针指向参数表达的偏移地址。伪指令是将当前偏移地址指针指向
42、参数表达的偏移地址。例如:例如:ORG 100h ;从从100H处安排数据或程序处安排数据或程序ORG $+10;偏移地址加偏移地址加10,即跳过,即跳过10个字节空间个字节空间n汇编语言程序中,符号汇编语言程序中,符号“$”表示当前偏移地址表示当前偏移地址值值513.2.3 名字和标号的属性n名字名字和和标号标号是用户自定义的标识符。是用户自定义的标识符。名字名字用于伪用于伪指令,指令,标号标号用于硬指令。名字和标号一经使用便用于硬指令。名字和标号一经使用便具有具有两类属性两类属性:n逻辑地址属性逻辑地址属性名字名字和和标号标号对应存储单元的逻辑地对应存储单元的逻辑地址,含址,含段地址段地址
43、和和偏移地址偏移地址;n类型属性类型属性n变量名变量名的类型可以是的类型可以是BYTE(字节)、(字节)、WORD(字)(字)和和DWORD(双字)等;(双字)等;n标号标号、段名段名、子程序名子程序名的类型可以是的类型可以是NEAR(近)(近)和和FAR(远远),分别表示段内或段间调用,分别表示段内或段间调用n汇编程序提供有关操作符,以便获取这些属性汇编程序提供有关操作符,以便获取这些属性值值521. 地址操作符n地址操作符地址操作符取得名字或标号的取得名字或标号的段地址段地址和和偏移地址偏移地址返回名字或标号的段地址返回名字或标号的段地址SEG 名字名字/标号标号返回名字或标号的偏移地址返
44、回名字或标号的偏移地址OFFSET 名字名字/标号标号段前缀,采用指定的段地址寄存器段前缀,采用指定的段地址寄存器 :当前偏移地址当前偏移地址 $将括起的表达式作为存储器地址指针将括起的表达式作为存储器地址指针 532. 类型操作符n类型操作符类型操作符对名字或标号的类型属性进行设置对名字或标号的类型属性进行设置类型名类型名 PTR 名字名字/标号标号其中类型名可以是其中类型名可以是BYTE、WORD、DWORD(依(依次表示字节、字、双字)等次表示字节、字、双字)等,或是或是NEAR、FAR(分(分别表示近、远),还可以是由结构、记录等定义的别表示近、远),还可以是由结构、记录等定义的类型类
45、型n对变量:对变量: LENGTHOF操作符获知某变量名指向多少个数操作符获知某变量名指向多少个数据项据项 SIZEOF操作符获知它共占用多少字节空间操作符获知它共占用多少字节空间543.3 顺序程序设计n没有分支、循环等转移指令的程序,会按指令没有分支、循环等转移指令的程序,会按指令书写的前后顺利依次执行,这就是顺序程序书写的前后顺利依次执行,这就是顺序程序n顺序结构是最基本的程序结构顺序结构是最基本的程序结构n完全采用顺序结构编写的程序并不多见完全采用顺序结构编写的程序并不多见例题例题3.4 顺序程序设计实例顺序程序设计实例采用查表法,实现一位采用查表法,实现一位16进制数进制数转换为转换
46、为ASCII码显示码显示55例3.4 数据段;数据段数据段ASCII db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h;对应对应0 9的的ASCII码码 db 41h,42h,43h,44h,45h,46h;对应对应A F的的ASCII码码 hex db 04h,0bh;假设两个假设两个查表查表数据数据56例3.4 代码段 ;代码段代码段mov bx,offset ASCII;BX指向指向ASCII码表首址码表首址mov al,hex;AL取得一位取得一位16进制数进制数;即要查表项在即要查表项在ASCII码表中的位移码表中的位移and al,0fh;屏蔽高
47、屏蔽高4位只取低位只取低4位位Xlat;换码:换码:ALDS:BXALXLAT57例3.4 代码段(续)mov dl,al;入口参数:入口参数:DLALmov ah,2;02号号DOS功能调用功能调用int 21h;显示一个显示一个ASCII码字符码字符mov al,hex+1;转换并显示下一个数据转换并显示下一个数据and al,0fhxlatmov dl,almov ah,2int 21hXLAT583.4 分支程序设计n分支程序分支程序根据根据条件条件是真或假决定执行与否是真或假决定执行与否n判断的判断的条件条件是各种指令,如是各种指令,如CMP、TEST等执行后形成的等执行后形成的状态
48、状态标志标志n转移指令转移指令Jcc和和JMP可以实现分支控制可以实现分支控制n分支结构有分支结构有n单分支结构单分支结构n双分支结构双分支结构n多分支结构多分支结构59单分支结构n条件成立跳转,否条件成立跳转,否则顺序执行分支语则顺序执行分支语句体句体n注意选择正确的条注意选择正确的条件转移指令和转移件转移指令和转移目标地址目标地址实例:求绝对值实例:求绝对值60计算AX中有符号数的绝对值 cmp ax,0 jge nonneg;条件满足(条件满足(AX0),转移),转移 neg ax;条件不满足,求补条件不满足,求补nonneg: mov result,ax;条件满足条件满足;不恰当的分支
49、不恰当的分支 cmp ax,0 jl yesneg;条件满足(条件满足(AX0),转移),转移 jmp nonnegyesneg: neg ax;条件不满足,求补条件不满足,求补nonneg: mov result,ax;条件满足条件满足61双分支结构n条件成立跳转执行第条件成立跳转执行第2个个分支语句体,否则顺序分支语句体,否则顺序执行第执行第1个分支语句体个分支语句体n注意第注意第1个分支体后一定个分支体后一定要有一个要有一个JMP指令跳到指令跳到第第2个分支体后个分支体后实例:显示实例:显示BX的最高位的最高位62判断BX的最高位并显示shl bx,1;BX最高位左移进入最高位左移进入C
50、F标志标志jc one;CF1,即最高位为,即最高位为1,转移,转移mov dl,30h;CF0,即最高位为,即最高位为0:DL30H0jmp two;一定要跳过另一个分支体一定要跳过另一个分支体 one: mov dl,31h;DL 31H1 two: mov ah,2int 21h;显示显示也可用也可用JNC指令实现指令实现63判断BX的最高位并显示(另解)shl bx,1;BX最高位移入最高位移入CF标志标志jnc one;CF0,即最高位为,即最高位为0,转移,转移mov dl,31h;CF1,即最高位为,即最高位为1:DL31H1jmp two;一定要跳过另一个分支体一定要跳过另一个
51、分支体 one:mov dl,30h;DL 30H0 two:mov ah,2int 21h;显示显示转换为单分支结构转换为单分支结构64判断BX的最高位并显示(另解)mov dl,0 ;DL30H0shl bx,1;BX最高位移入最高位移入CF标志标志jnc two;CF0,即最高位为,即最高位为0,转移,转移mov dl,1;CF1,即最高位为,即最高位为1:DL31H1 two:mov ah,2int 21h;显示显示 编写分支程序,需留心分支的开始和结束编写分支程序,需留心分支的开始和结束65判断BX的最高位并显示(另解)mov dl,0shl bx,1;BX最高位移入最高位移入CF标
52、志标志adc dl,30h;CF0,DL030h030H0;CF1,DL030h131H1 two:mov ah,2int 21h;显示显示66例题3.5 显示压缩BCD,去前导0;数据段数据段BCDdb 04h;代码段代码段mov dl,BCDtest dl,0ffh;如果如果BCD码为码为0,显示,显示0jz zero;双分支结构双分支结构test dl,0f0h;如果如果BCD码高位为码高位为0,不显示,不显示0jz one;单分支结构单分支结构67显示压缩BCD,去前导0(续)mov cl,4;处理高位处理高位shr dl,clor dl,30h;转换为转换为ASCII码码mov ah
53、,2;显示高位显示高位int 21hmov dl,BCDand dl,0fhone:or dl,30h;处理低位处理低位jmp twozero:mov dl,0two:mov ah,2int 21h68大小写字母转换(参例题3.6) ;如果如果DL是一个小写字母,则转换为大写是一个小写字母,则转换为大写cmp dl,a;小于小写字母小于小写字母a,不需要处理,不需要处理jb dispcmp dl,z;大于小写字母大于小写字母z,也不需要处理,也不需要处理ja dispsub dl,20h;是小写字母,则转换为大写是小写字母,则转换为大写 disp: 转换原理转换原理69多分支结构n多分支结构是
54、多个条件对应多分支结构是多个条件对应各自的分支语句体,哪个条各自的分支语句体,哪个条件成立就转入相应分支体执件成立就转入相应分支体执行行or ah,ah;cmp ah,0jz function0dec ah;cmp ah,1jz function1dec ah;cmp ah,2jz function2AH=0fuction0YNAH=1fuction1YNAH=2fuction2YN703.5 循环程序设计n循环程序循环程序结构要求在满足一定条件的情况下,结构要求在满足一定条件的情况下,重复执行某段程序重复执行某段程序n循环结构的程序通常由循环结构的程序通常由3个部分组成:个部分组成:n循环初
55、始化部分循环初始化部分为开始循环准备必要的条件,为开始循环准备必要的条件,如循环次数、循环体需要的数值等如循环次数、循环体需要的数值等n循环体部分循环体部分指重复执行的程序部分,其中包指重复执行的程序部分,其中包括对循环条件等的修改程序段括对循环条件等的修改程序段n循环参数改变及控制部分循环参数改变及控制部分判断循环条件是否判断循环条件是否成立,决定是否继续循环成立,决定是否继续循环71循环控制n循环结构循环结构程序的设计关键是循环控制部分程序的设计关键是循环控制部分n循环控制可以在进入循环之前进行,也可以在循环控制可以在进入循环之前进行,也可以在循环体后进行,于是形成两种结构:循环体后进行,
56、于是形成两种结构:n“先判断、后循环先判断、后循环”结构结构n“先循环、后判断先循环、后判断”结构结构n循环结束的控制可以用循环次数,还可以用特循环结束的控制可以用循环次数,还可以用特定条件等,于是又有:定条件等,于是又有:n计数控制循环计数控制循环n条件控制循环条件控制循环图示图示72“先循环、后判断”的循环结构循环的初始状态循环的初始状态循环的工作部分循环的工作部分及修改部分及修改部分计数控制循环计数控制循环条件控制循环条件控制循环 结束结束 初始化初始化 修改部分修改部分控制条件控制条件Y YN N 循环体循环体733.5.1 计数控制循环 n计数控制循环计数控制循环利用利用循环次数循环
57、次数作为控制条件作为控制条件n采用循环指令采用循环指令LOOP和和JCXZ易于实现易于实现n初始化:将循环次数或初始化:将循环次数或最大循环次数置入最大循环次数置入CXn循环体循环体n循环控制:用循环控制:用LOOP指指令对令对CX减减1、并判断是、并判断是否为否为074用二进制形式显示BL内容(例3.8)mov cx,8;CX8(循环次数)(循环次数)again:shl bl,1;左移进左移进CF,从高位开始显示从高位开始显示mov dl,0;MOV指令不改变指令不改变CFadc dl,30h;DL030HCF;CF若是若是0,则,则DL 0 ;CF若是若是1,则,则DL 1 mov ah,
58、2int 21h;显示显示loop again;CX减减1,如果,如果CX未减至未减至0,则循环,则循环计数控制循环计数控制循环 先循环后判断先循环后判断75例3.9 求数组中的最大/最小元素;数据段数据段arraydw 10; 设一个数组,其中头一个数据设一个数组,其中头一个数据10表示元素个数表示元素个数dw -3,0,20,900,587,-632,777, dw 234,-34,-56 ;这是一个有符号字量元素组成的数组这是一个有符号字量元素组成的数组maxaydw ?;存放最大值存放最大值minaydw ?;存放最小值存放最小值初始化:循环次数元素个数初始化:循环次数元素个数1循环体
59、:逐个比较求最大、小值循环体:逐个比较求最大、小值循环控制:比较完所有数据循环控制:比较完所有数据76例3.9 代码段;代码段代码段lea si,arraymov cx,si;取得元素个数取得元素个数dec cx;减减1后是循环次数后是循环次数add si,2mov ax,si;取出第一个元素给取出第一个元素给AX,AX用于暂存最大值用于暂存最大值mov bx,ax;取出第一个元素给取出第一个元素给BX,BX用于暂存最小值用于暂存最小值初始化77例3.9 代码段(续) maxck: add si,2cmp si,ax;与下一个数据比较与下一个数据比较jle minckmov ax,si;AX取
60、得更大的数据取得更大的数据jmp next minck: cmp si,bxjge nextmov bx,si;BX取得更小的数据取得更小的数据 next: loop maxck;计数循环计数循环mov maxay,ax;保存最大值保存最大值mov minay,bx;保存最小值保存最小值循环体结束控制783.5.2 条件控制循环n条件控制循环条件控制循环需要利用特定条件判需要利用特定条件判断循环是否结束断循环是否结束n条件控制循环用条件转移指令判断条件控制循环用条件转移指令判断循环条件循环条件n转移指令可以指定目的标号来改变转移指令可以指定目的标号来改变程序的运行顺序,如果目的标号指程序的运行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国餐具行业市场发展分析及竞争格局与投资战略研究报告
- 2025-2030中国食品吸水硬垫行业需求前景及未来销售渠道研究报告
- 2025-2030中国青梅酒行业市场深度分析及发展预测与投资策略研究报告
- 单招电工电子试题及答案
- 探索系统架构设计师考试中的思维方式试题及答案
- 激光技术的社会影响与挑战试题及答案
- 激光应用的市场前景考题试题及答案
- 停车场 施工合同标准文本
- 制作类框架合同样本
- 东城区劳务外包合同样本
- 建筑工程住宅水泥制品排气道系统应用技术规程
- 2024年中国红木家具市场调查研究报告
- DNM-9602酶标分析仪操作规程
- 四川省宜宾龙文学校2022-2023学年八年级下学期6月检测(期末模拟)历史试卷
- 以退为进的中国惠民保发展-基于73款停售惠民保产品的分析-【复旦许闲】20240719
- 公积金个人贷款合同模板
- 智能纺织技术的家居家纺应用
- DL∕T 5161.14-2018 电气装置安装工程质量检验及评定规程 第14部分:起重机电气装置施工质量检验
- 有机半导体完整版本
- 监护人考试试题
- DL-T5153-2014火力发电厂厂用电设计技术规程
评论
0/150
提交评论