汇编语言的特点课件.ppt

上传人(卖家):晟晟文业 文档编号:4707453 上传时间:2023-01-03 格式:PPT 页数:160 大小:490.71KB
下载 相关 举报
汇编语言的特点课件.ppt_第1页
第1页 / 共160页
汇编语言的特点课件.ppt_第2页
第2页 / 共160页
汇编语言的特点课件.ppt_第3页
第3页 / 共160页
汇编语言的特点课件.ppt_第4页
第4页 / 共160页
汇编语言的特点课件.ppt_第5页
第5页 / 共160页
点击查看更多>>
资源描述

1、汇编语言程序设计汇编语言程序设计第第 3 3 章章1汇编语言的特点汇编语言的特点n汇编语言汇编语言是一种以处理器指令系统为基础的低是一种以处理器指令系统为基础的低级程序设计语言,它采用级程序设计语言,它采用助记符助记符表达指令操作表达指令操作码,采用码,采用标识符号标识符号表示指令操作数表示指令操作数n利用汇编语言编写程序的主要利用汇编语言编写程序的主要优点优点是可以是可以直接、直接、有效地控制计算机硬件有效地控制计算机硬件,因而容易创建,因而容易创建代码序代码序列短小、运行快速列短小、运行快速的可执行程序的可执行程序n在有些应用领域,汇编语言的作用是不容置疑在有些应用领域,汇编语言的作用是不

2、容置疑和无可替代的和无可替代的n汇编程序设计的过程是与其他高级语言程序设汇编程序设计的过程是与其他高级语言程序设计大致相同计大致相同2教学重点教学重点n汇编语言源程序格式与开发汇编语言源程序格式与开发n常量、变量和标号常量、变量和标号n汇编语言程序设计方法汇编语言程序设计方法n顺序程序设计顺序程序设计n分支程序设计分支程序设计n循环程序设计循环程序设计n子程序设计子程序设计33.1 汇编语言源程序格式汇编语言源程序格式n完整的汇编语言源程序由段组成完整的汇编语言源程序由段组成n一个汇编语言源程序可以包含若干个代码段、数据一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间

3、的顺序可随意排段、附加段或堆栈段,段与段之间的顺序可随意排列列n需独立运行的程序必须包含一个需独立运行的程序必须包含一个代码段代码段,并指示程,并指示程序执行的序执行的起始点起始点,一个程序只有一个起始点,一个程序只有一个起始点n所有的可执行性语句必须位于某一个代码段内,说所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内明性语句可根据需要位于任一段内n通常,程序还需要一个堆栈段通常,程序还需要一个堆栈段 源程序由语句序列构成源程序由语句序列构成4汇编语言的语句格式汇编语言的语句格式执行性语句执行性语句执行性语句用于表达处理器执行性语句用于表达处理器指令指令(也称为硬指

4、令也称为硬指令),汇编后对应一条指令,汇编后对应一条指令代码。由处理器指令组成的代码序列是程序代码。由处理器指令组成的代码序列是程序设计的主体设计的主体标号标号:硬指令助记符硬指令助记符 操作数操作数,操作数操作数 ;注释注释说明性语句说明性语句说明性语句用于表达伪指令,说明性语句用于表达伪指令,指示源程序如何汇编、变量怎样定义、过程指示源程序如何汇编、变量怎样定义、过程怎么设置等怎么设置等名字名字 伪指令助记符伪指令助记符 参数参数,参数参数,;注释注释5硬指令与伪指令硬指令与伪指令n硬指令硬指令(Instruction)使使CPU产生动作、并在产生动作、并在程序执行时才处理的程序执行时才处

5、理的指令指令硬指令就是第硬指令就是第2章学习的处理器指令章学习的处理器指令,与具体的处理,与具体的处理器有关、与汇编程序无关器有关、与汇编程序无关n伪指令伪指令(Directive)不产生不产生CPU动作、在程序动作、在程序执行前由汇编程序处理的说明性执行前由汇编程序处理的说明性指令指令伪指令与具体的处理器类型无关,但与汇编程序有伪指令与具体的处理器类型无关,但与汇编程序有关。不同版本的汇编程序支持不同的伪指令关。不同版本的汇编程序支持不同的伪指令 硬指令和伪指令采用易于记忆的符合表硬指令和伪指令采用易于记忆的符合表达,这就是助记符达,这就是助记符6标号、名字与标识符标号、名字与标识符n标号标

6、号是反映硬指令是反映硬指令位置位置(逻辑地址)和(逻辑地址)和属性属性的标识的标识符,后跟一个符,后跟一个冒号冒号分隔分隔n名字名字是反映伪指令是反映伪指令位置位置(逻辑地址)和(逻辑地址)和属性属性的标识的标识符,后跟符,后跟空格或制表符空格或制表符分隔,分隔,没有冒号没有冒号n标识符标识符(Identifier)一般最多由一般最多由31个字母、数字及个字母、数字及规定的特殊符号(如规定的特殊符号(如 _、$、?、)组成,不能以)组成,不能以数字开头。默认情况下,汇编程序不区别标识符中数字开头。默认情况下,汇编程序不区别标识符中的字母大小写的字母大小写n一个源程序中,每个标识符的定义是唯一的

7、,且不一个源程序中,每个标识符的定义是唯一的,且不能是汇编系统所采用的能是汇编系统所采用的保留字保留字7保留字保留字n保留字(保留字(Reserved Word)是汇编程序已经是汇编程序已经利用的标识符(也称为关键字),主要有:利用的标识符(也称为关键字),主要有:n硬指令助记符硬指令助记符例如:例如:MOV、ADDn伪指令助记符伪指令助记符例如:例如:DB、DWn操作符操作符例如:例如:OFFSET、PTRn寄存器名寄存器名例如:例如:AX、CSn预定义符号预定义符号例如:例如:data 汇编语言对大小写不敏感汇编语言对大小写不敏感8操作数和参数操作数和参数n处理器指令中的处理器指令中的操作

8、数操作数可以是立即数、寄可以是立即数、寄存器和存储单元存器和存储单元n伪指令中的伪指令中的参数参数可以是常数、变量名、表可以是常数、变量名、表达式等,可以有多个,参数之间用逗号分达式等,可以有多个,参数之间用逗号分隔隔9注释注释n语句中由分号语句中由分号“;”开始的部分为注释内开始的部分为注释内容,用以增加源程序的可读性容,用以增加源程序的可读性n必要时,一个语句行也可以由分号开始作必要时,一个语句行也可以由分号开始作为阶段性注释为阶段性注释n汇编程序在翻译源程序时将跳过该部分,汇编程序在翻译源程序时将跳过该部分,不对它们做任何处理不对它们做任何处理10分隔符分隔符n语句的语句的4个组成部分个

9、组成部分要用要用分隔符分隔符分开分开n标号后用标号后用冒号冒号,注释前用,注释前用分号分号n操作数之间和参数之间使用操作数之间和参数之间使用逗号逗号分隔分隔n其他部分通常采用其他部分通常采用空格空格或或制表符制表符n多个空格和制表符的作用与一个相同多个空格和制表符的作用与一个相同nMASM支持支持续行符续行符“”11例例3.1 在屏幕上显示一段信息在屏幕上显示一段信息;数据段数据段(定义要显示的字符串)(定义要显示的字符串)stringdbHello,Assembly!,0dh,0ah,$;代码段代码段(显示字符串的程序)(显示字符串的程序)mov dx,offset stringmov ah

10、,9int 21hHello,Assembly!程序功能程序功能123.1.1 简化段定义格式简化段定义格式.model small;定义程序的定义程序的存储模式存储模式(小型模式)(小型模式).stack;定义定义堆栈段堆栈段(默认是(默认是1KB空间)空间).data;定义定义数据段数据段;数据定义;数据定义.code;定义定义代码段代码段start:mov ax,data;程序程序起始点起始点mov ds,ax;设置设置DS指向用户定义的数据段指向用户定义的数据段;程序代码;程序代码mov ax,4c00hint 21h;程序结束点,返回程序结束点,返回DOS;子程序代码子程序代码end

11、 start;汇编结束,同时指明程序起始点汇编结束,同时指明程序起始点start131.存储模式(存储模式(Memory Model)n存储模式存储模式决定了一个程序的规模,也确定了子程序决定了一个程序的规模,也确定了子程序调用、指令转移和数据访问等的缺省属性调用、指令转移和数据访问等的缺省属性n当使用简化段定义的源程序格式时,必须有存储模当使用简化段定义的源程序格式时,必须有存储模式式.MODEL语句,且位于所有简化段定义语句之前。语句,且位于所有简化段定义语句之前。其格式为:其格式为:.MODEL 存储模式存储模式n.MODEL语句确定了程序采用的存储模式,语句确定了程序采用的存储模式,M

12、ASM有有7种可以选择,如种可以选择,如表表3.1所示所示 本课程学习过程中,均采用小型模式本课程学习过程中,均采用小型模式SMALL142.逻辑段的简化定义逻辑段的简化定义.STACK 大小大小堆栈段定义伪指令堆栈段定义伪指令.STACK创建创建一个堆栈段,段名是:一个堆栈段,段名是:STACK。可选的可选的“大小大小”参参数指定堆栈段所占存储区的字节数,默认是数指定堆栈段所占存储区的字节数,默认是1KB(1024400H字节)字节).DATA数据段定义伪指令数据段定义伪指令.DATA创建一个数据创建一个数据段,段名是:段,段名是:_DATA。数据段名可用数据段名可用DATA预定预定义标识符

13、表示义标识符表示.CODE 段名段名代码段定义伪指令代码段定义伪指令.CODE创建一创建一个代码段,可选的个代码段,可选的“段名段名”参数指定该代码段的段参数指定该代码段的段名。名。一个段的开始自动结束前面的一个段一个段的开始自动结束前面的一个段 简化段定义伪指令之前,需有存储模式语句简化段定义伪指令之前,需有存储模式语句153.程序开始程序开始n为了指明程序开始执行的位置,需要使用一个标号为了指明程序开始执行的位置,需要使用一个标号(例题中采用了(例题中采用了start 标识符)标识符)n连接程序会根据程序起始点正确地设置连接程序会根据程序起始点正确地设置CS和和IP值,值,根据程序大小和堆

14、栈段大小设置根据程序大小和堆栈段大小设置SS和和SP值值n连接程序没有设置连接程序没有设置DS和和ES值。程序如果使用数据段值。程序如果使用数据段或附加段,必须明确给或附加段,必须明确给DS或或ES赋值赋值n大多数程序需要数据段,程序的执行开始应是:大多数程序需要数据段,程序的执行开始应是:start:mov ax,data;data表示数据段的段地址表示数据段的段地址mov ds,ax;设置设置DS164.程序终止并返回操作系统程序终止并返回操作系统n应用程序执行结束,应该将控制权交还操作系统应用程序执行结束,应该将控制权交还操作系统n汇编语言程序设计中,有多种返回汇编语言程序设计中,有多种

15、返回DOS的方法,的方法,但一般利用但一般利用DOS功能调用的功能调用的4CH子功能实现,它子功能实现,它需要的入口参数是需要的入口参数是AL返回数码(通常用返回数码(通常用0表示表示程序运行正常,没有错误)程序运行正常,没有错误)n于是,应用程序的终止代码就是:于是,应用程序的终止代码就是:mov ax,4c00hint 21h175.汇编结束汇编结束n汇编结束表示通知汇编程序结束工作,即汇编结束表示通知汇编程序结束工作,即将源程序翻译成目标模块代码的过程结束。将源程序翻译成目标模块代码的过程结束。n源程序的最后必须有一条源程序的最后必须有一条END伪指令伪指令END 标号标号n可选的可选的

16、“标号标号”参数指定程序开始执行点,参数指定程序开始执行点,连接程序据此设置连接程序据此设置CS和和IP值(例题中采用值(例题中采用了了start 标识符)标识符)18第第1个源文件个源文件 hb301.asm;hb301.asm.model small.stack.datastringdb Hello,Assembly!,0dh,0ah,$.codestart:mov ax,datamov ds,axmov dx,offset stringmov ah,9int 21hmov ax,4c00hint 21hend start19汇编语言程序的处理过程(附录汇编语言程序的处理过程(附录B)编辑

17、编辑文本编辑器,如文本编辑器,如 EDIT.EXE源程序:文件名源程序:文件名.asm汇编汇编汇编程序,如汇编程序,如 ML.EXE目标模块:文件名目标模块:文件名.obj连接连接连接程序,如连接程序,如 LINK.EXE可执行文件:文件名可执行文件:文件名.exe调试调试调试程序,如调试程序,如 DEBUG.EXE应用程序应用程序错误错误错误错误错误错误错误错误20上机过程上机过程1:编辑源程序:编辑源程序n源程序源程序文件应以文件应以.ASM为扩展名为扩展名n源程序文件的形成(编辑)可以通过任何源程序文件的形成(编辑)可以通过任何一个文本编辑器实现一个文本编辑器实现:DOS中的全屏幕文本编

18、辑器中的全屏幕文本编辑器EDIT EDIT hb301.asm MASM 6.X提供的集成工作环境提供的集成工作环境PWB Windows中的记事本中的记事本Notepad 其他程序开发工具中的编辑环境其他程序开发工具中的编辑环境 21上机过程上机过程2:汇编源程序:汇编源程序MASM 6.xn汇编是将源程序翻译成由机器代码组成的汇编是将源程序翻译成由机器代码组成的目标模块文件的过程目标模块文件的过程nMASM 6.x提供的汇编程序是提供的汇编程序是ML.EXE ML/c hb301.asmn如果源程序中没有语法错误,如果源程序中没有语法错误,MASM将自将自动生成一个目标模块文件(动生成一个

19、目标模块文件(hb301.obj););否则否则MASM将给出相应的错误信息。这时将给出相应的错误信息。这时应根据错误信息,重新编辑修改源程序后,应根据错误信息,重新编辑修改源程序后,再进行汇编再进行汇编22开发过程开发过程2:汇编源程序:汇编源程序MASM 5.xnMASM 5.x提供的汇编程序是提供的汇编程序是MASM.EXE MASM hb301.asm;n如果利用分号如果利用分号“;”结尾命令,则汇编程序不结尾命令,则汇编程序不再提示输入模块文件名、列表文件名等,直再提示输入模块文件名、列表文件名等,直接采用默认的文件名。接采用默认的文件名。n默认采用源程序文件相同的主文件名,扩展默认

20、采用源程序文件相同的主文件名,扩展名则是相应类型文件的扩展名,例如目标文名则是相应类型文件的扩展名,例如目标文件(件(.obj)和列表文件(和列表文件(.lst)等等23上机过程上机过程2:生成列表文件:生成列表文件n汇编过程中,可以通过参数选择生成汇编过程中,可以通过参数选择生成列表文件列表文件(.LST)。)。列表文件是一种文本文件,含有源程列表文件是一种文本文件,含有源程序和目标代码,对我们学习汇编语言程序设计和序和目标代码,对我们学习汇编语言程序设计和发现错误很有用发现错误很有用n汇编程序汇编程序ML.EXE和和MASM.EXE都可带其他参数,都可带其他参数,为了生成列表文件,各自的命

21、令是:为了生成列表文件,各自的命令是:ML/Fl hb301.asm产生产生.obj/.exe/.lst MASM/l hb301.asm;产生产生.obj/.lstn以上命令除产生模块文件以上命令除产生模块文件hb301.obj外,还将生成外,还将生成列表文件列表文件hb301.lst24上机过程上机过程3:连接目标模块:连接目标模块n连接程序能把一个或多个目标文件和库文件合成连接程序能把一个或多个目标文件和库文件合成一个可执行程序(一个可执行程序(.EXE、.COM文件):文件):LINK hb301.obj;n如果没有严重错误,如果没有严重错误,LINK将生成一个可执行文件将生成一个可执

22、行文件(hb301.exe););否则将提示相应的错误信息。这否则将提示相应的错误信息。这时需要根据错误信息重新修改源程序文件后再汇时需要根据错误信息重新修改源程序文件后再汇编、链接,直到生成可执行文件编、链接,直到生成可执行文件nML.EXE汇编程序(汇编程序(MASM 6.x)可自动调用可自动调用LINK连接程序,实现汇编和连接的依次进行连接程序,实现汇编和连接的依次进行ML hb301.asm25上机过程上机过程4:运行和调试运行和调试n经汇编、连接生成的可执行程序在操作系统经汇编、连接生成的可执行程序在操作系统下只要输入文件名就可以运行:下只要输入文件名就可以运行:hb301n操作系统

23、装载该文件进入主存,并开始运行操作系统装载该文件进入主存,并开始运行n如果出现运行错误,可以从源程序开始排错,如果出现运行错误,可以从源程序开始排错,也可以利用调试程序帮助发现错误也可以利用调试程序帮助发现错误n采用采用DEBUG.EXE调试程序:调试程序:DEBUG hb301.exe263.1.2 完整段定义格式完整段定义格式n完整段定义利用完整段定义利用SEGMENT和和ENDS一对伪指令一对伪指令定义逻辑段定义逻辑段n同时需要配合同时需要配合ASSUME伪指令指明逻辑段是代伪指令指明逻辑段是代码段、堆栈段、数据段还是附加段码段、堆栈段、数据段还是附加段n完整段定义和简化段定义的实质是一

24、致的完整段定义和简化段定义的实质是一致的27完整段定义格式完整段定义格式stacksegment stack;定义作为堆栈段的逻辑段,段名定义作为堆栈段的逻辑段,段名stackdb 1024 dup(0);分配堆栈段(默认是;分配堆栈段(默认是1KB空间)空间)stackends;堆栈段结束;堆栈段结束data segment;定义作为数据段的逻辑段,段名;定义作为数据段的逻辑段,段名data;定义数据;定义数据dataends;数据段结束;数据段结束codesegment code;定义作为代码段的逻辑段,段名定义作为代码段的逻辑段,段名codeassume cs:code,ds:data,

25、ss:stackstart:mov ax,data;程序起始点程序起始点mov ds,ax;设置设置DS指向数据段的段地址指向数据段的段地址;程序代码;程序代码mov ax,4c00hint 21h;程序结束点,返回程序结束点,返回DOS;子程序代码子程序代码code ends;代码段结束;代码段结束end start;汇编结束,同时指明程序起始点汇编结束,同时指明程序起始点start281、逻辑段的完整定义、逻辑段的完整定义n声明逻辑段的名字和属性声明逻辑段的名字和属性n段名段名segment 定位定位组合组合类别类别;语句序列语句序列段名段名ends292、建立逻辑段与段寄存器的对应关系、

26、建立逻辑段与段寄存器的对应关系n建立段寄存器与逻辑段的关系建立段寄存器与逻辑段的关系nAssume 段寄存器段寄存器:段名段名,段寄存器段寄存器:段名段名,n但并不为但并不为DS,ES段寄存器设初值,所以程序段寄存器设初值,所以程序开始就需要明确对开始就需要明确对DS,ES赋值。赋值。30完整定义格式完整定义格式 hb302.asmstack segment stack db 1024 dup(0)stack endsdata segmentstringdb Hello,Assembly!,0dh,0ah,$data endscode segment assume cs:code,ds:dat

27、a,ss:stackstart:mov ax,data mov ds,axmov dx,offset stringmov ah,9int 21hmov ax,4c00h int 21hcode ends end start313.1.3 可执行程序的结构可执行程序的结构nDOS操作系统支持两种可执行程序结构操作系统支持两种可执行程序结构1.EXE程序程序 程序可以有程序可以有多个代码段多个代码段和和多个数据段多个数据段,程序,程序长度长度可以超过可以超过64KB 通常生成通常生成EXE结构的可执行程序结构的可执行程序2.COM程序程序 只有只有一个逻辑段一个逻辑段,程序,程序长度长度不超过不超

28、过64KB 需要满足一定条件才能生成需要满足一定条件才能生成COM结构的可执行结构的可执行程序(程序(MASM 6.x需要采用需要采用TINY模式)模式)323.2 常量、变量和标号常量、变量和标号 n汇编语言的数据可以简单分为汇编语言的数据可以简单分为常量常量和和变量变量n常量常量可作可作硬指令硬指令的的立即数立即数或或伪指令伪指令的的参数参数,n变量变量主要作为主要作为存储器操作数存储器操作数n汇编语言语句中的汇编语言语句中的名字名字和和标号标号具有具有逻辑地逻辑地址址和和类型属性类型属性,主要用做地址操作数,也,主要用做地址操作数,也可以作为立即数和存储器操作数可以作为立即数和存储器操作

29、数333.2.1 常量常量n常量表示一个固定的数值,它又分成多种形常量表示一个固定的数值,它又分成多种形式:式:常数常数 字符串字符串 符号常量符号常量 数值表达式数值表达式341.常数常数n指由指由10、16、2和和8进制形式表达的数值,各种进进制形式表达的数值,各种进制的数据以后缀字母区分,默认不加后缀字母的制的数据以后缀字母区分,默认不加后缀字母的是十进制数是十进制数01100100B由由0和和1两个数字组成,以字母两个数字组成,以字母B/b结结尾尾二进制二进制64H0FFH0B800H由由0 9、A F数字组成,以字母数字组成,以字母H/h 结尾,以字母开头的常数需要结尾,以字母开头的

30、常数需要加一个前导加一个前导0十六进制十六进制100255D由由0 9数字组成,以字母数字组成,以字母 D/d 结尾结尾(缺省情况可以省略)(缺省情况可以省略)十进制十进制352.字符串字符串n字符串常量是用字符串常量是用单引号单引号或或双引号双引号括起来的括起来的单个单个字符或字符或多个多个字符字符n其数值是每个字符对应的其数值是每个字符对应的ASCII码码值值n例如:例如:d(等于等于64H)AB(等于等于4142H)Hello,Assembly!363.符号常量符号常量n符号常量使用标识符表达一个数值符号常量使用标识符表达一个数值nMASM提供等价机制,用来为常量定义符号名提供等价机制,

31、用来为常量定义符号名n符号定义伪指令符号定义伪指令有有等价等价“EQU”和和等号等号“”:符号名符号名 EQU 数值表达式数值表达式符号名符号名 EQU ;MASM 5.x不支持不支持符号名符号名 数值表达式数值表达式nEQU用于数值等价时不能重复定义符号名,但用于数值等价时不能重复定义符号名,但“”允许重复赋值。例如:允许重复赋值。例如:X=7;等效于:等效于:X equ 7X=X+5;“X EQU X+5”是错误的是错误的374.数值表达式数值表达式n数值表达式数值表达式一般是指由一般是指由运算符运算符连接的各种常量所构成的连接的各种常量所构成的表达式表达式n汇编程序在汇编过程中计算表达式

32、,最终得到一个确定汇编程序在汇编过程中计算表达式,最终得到一个确定的数值,所以也是常量的数值,所以也是常量n表达式的数值在程序运行前的汇编阶段计算,所以组成表达式的数值在程序运行前的汇编阶段计算,所以组成表达式的各部分必须在汇编时就能确定表达式的各部分必须在汇编时就能确定n汇编语言支持多种运算符(汇编语言支持多种运算符(表表3.3)n我们经常使用的是加减乘除(我们经常使用的是加减乘除(*/)n例如:例如:mov ax,3*4+5;等价于:等价于:mov ax,17383.2.2 变量变量 n变量变量实质上是指实质上是指可以读写可以读写的的内存单元内存单元,虽然内,虽然内存单元地址不变,但其中存

33、放的数据可以改变存单元地址不变,但其中存放的数据可以改变n变量需要事先定义才能使用变量需要事先定义才能使用n变量定义变量定义(Define)伪指令伪指令为变量申请固定长度为变量申请固定长度为单位的存储空间,并可以同时将相应的存储为单位的存储空间,并可以同时将相应的存储单元初始化单元初始化n定义后的变量可以通过变量名等方法引用(读定义后的变量可以通过变量名等方法引用(读写)其中的数据,即变量中的数值写)其中的数据,即变量中的数值391.变量的定义变量的定义 n变量定义的汇编语言格式为:变量定义的汇编语言格式为:变量名变量名 变量定义伪指令变量定义伪指令 初值表初值表n变量定义伪指令变量定义伪指令

34、有有DB、DW、DD等(等(表表3.4)n变量名变量名为用户自定义的标识符,表示为用户自定义的标识符,表示初值表首元素初值表首元素的的逻辑地址,常称为逻辑地址,常称为符号地址符号地址。n初值表初值表是用逗号分隔的参数是用逗号分隔的参数,主要由常量、数值表达主要由常量、数值表达式或式或“?”组成。其中组成。其中“?”表示未赋初值表示未赋初值n多个存储单元如果初值相同,可以用复制操作符多个存储单元如果初值相同,可以用复制操作符DUP进行定义:进行定义:重复次数重复次数 DUP(重复参数重复参数)40定义字节变量定义字节变量(Define Byte)nDB 伪指令用于分配一个或多个字节单元,并可伪指

35、令用于分配一个或多个字节单元,并可以将它们初始化为指定值以将它们初始化为指定值n初值表中每个数据一定是字节量,存放一个初值表中每个数据一定是字节量,存放一个8位位数据:数据:可以是可以是0255的无符号数的无符号数 或是或是128127带符号数带符号数 也可以是字符串常数,字符的也可以是字符串常数,字符的ASCII码值码值41定义字节变量定义字节变量实例实例;数据段;数据段Xdb a,-5db 2 dup(100),?Ydb ABC42字节变量的应用字节变量的应用 Xdb a,-5 db 2 dup(100),?Ydb ABCmov al,X ;此处此处X表示它的第表示它的第1个数据,故个数据

36、,故ALadec X+1 ;对对X为始的第为始的第2个数据减个数据减1,故成为,故成为-6mov Y,al ;现在现在Y这个字符串成为这个字符串成为 aBC符号地址符号地址变量初值变量初值初值表初值表43定义字变量(定义字变量(Define Word)nDW伪指令用于分配一个或多个字单元,并可以将伪指令用于分配一个或多个字单元,并可以将它们初始化为指定值它们初始化为指定值n初值表中每个数据是字量,一个字单元可用于存放初值表中每个数据是字量,一个字单元可用于存放任何任何16位数据:位数据:一个段地址一个段地址 一个偏移地址一个偏移地址 两个字符两个字符 065535之间的无符号数之间的无符号数

37、3276832767之间的带符号数之间的带符号数44定义字变量定义字变量实例实例;数据段;数据段countdw 8000h,?,ABmaxintequ 64hnumberdw maxintarraydw maxint dup(0)41h42h45定义双字变量(定义双字变量(Define Double word)nDD 伪指令伪指令用于分配一个或多个双字单元,并可以将它用于分配一个或多个双字单元,并可以将它们初始化为指定值们初始化为指定值n初值表中每个数据是一个初值表中每个数据是一个3232位的双字量:位的双字量:n可以是有符号或无符号的可以是有符号或无符号的3232位整数位整数n也可以用来表达

38、也可以用来表达1616位段地址(高位字)和位段地址(高位字)和1616位的偏移位的偏移地址(低位字)的远指针地址(低位字)的远指针varddDD0,?,12345678hfarpointDD00400078h462.变量的应用变量的应用n变量变量具有存储单元的具有存储单元的逻辑地址属性逻辑地址属性n程序代码中程序代码中n通过通过变量名变量名可直接存取其所指向的可直接存取其所指向的首个首个数据数据X db a,-5 mov al,X ;al an通过变量名通过变量名加减位移量加减位移量可存取以改变量地址为基地址可存取以改变量地址为基地址的的前前/后数据后数据 mov al,X+1;al -5 例

39、题例题3.2 变量的定义和应用变量的定义和应用47例题例题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个数值个数值 20Hwvar1 dw 2010h,4*4

40、;字字变量:两个数据是变量:两个数据是 2010H、0010H,共占共占4个字节个字节wvar2 dw?;wvar2是是没有初值没有初值的字变量的字变量48例题例题3.2 变量的定义(续)变量的定义(续)dvardd 12347777h,87651111h,?;双字双字变量:变量:2个双字数据,一个双字空间个双字数据,一个双字空间abcdb a,b,c,?;定义字符,实际是字节定义字符,实际是字节变量变量maxint equ 0ah;符号常量符号常量:maxint10string db ABCDEFGHIJ;定义字符串:使用字节定义定义字符串:使用字节定义DB伪指令伪指令crlfsdb 13,

41、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 0449例题例题3.2 变量的应用变量的应用;代码段代码段mov dl,bvar1 ;DL100 ddec bvar2+1 ;bvar2+14mov abc3,dl ;abc3处原为?现处原为?现abcabcd,mov ax,word ptr dvar0 ;取双字到取双字到DX.

42、AXmov dx,word ptr dvar2add ax,word ptr dvar4 ;加双字到加双字到DX.AXadc dx,word ptr dvar6mov word ptr dvar8,ax ;保存双字的求和结果保存双字的求和结果mov word ptr dvar10,dx50例题例题3.2 变量的应用(续)变量的应用(续)mov cx,maxint;CX10mov bx,0;BX0 again:add stringbx,3;string 每个数值加每个数值加 3inc bxloop again;循环循环lea dx,abc;从从abc开始显示开始显示,直到遇到直到遇到$mov a

43、h,9;09H号号DOS功能调用功能调用int 21h;显示结果:显示结果:abcdDEFGHIJKLMabc串串string串串513.2 变量的定位变量的定位n汇编程序按照指令的先后顺序一个接着一个分配存汇编程序按照指令的先后顺序一个接着一个分配存储空间,按照段定义伪指令规定的边界定位属性确储空间,按照段定义伪指令规定的边界定位属性确定每个逻辑段的起始位置(包括偏移地址)定每个逻辑段的起始位置(包括偏移地址)n定位伪指令定位伪指令ORG控制数据或代码所在的偏移地址控制数据或代码所在的偏移地址ORG 参数参数nORG伪指令是将当前偏移地址指针指向参数表达的伪指令是将当前偏移地址指针指向参数表

44、达的偏移地址。例如:偏移地址。例如:ORG 100h;从从100H处安排数据或程序处安排数据或程序ORG$+10;偏移地址加偏移地址加10,即跳过,即跳过10个字节空间个字节空间n汇编语言程序中,符号汇编语言程序中,符号“$”表示当前偏移地址表示当前偏移地址值值523.2.3 名字和标号的属性名字和标号的属性n名字和标号是用户自定义的标识符。名字和标号是用户自定义的标识符。名字名字用于伪用于伪指令,指令,标号标号用于硬指令。名字和标号一经使用便用于硬指令。名字和标号一经使用便具有具有两类属性两类属性:n逻辑地址属性逻辑地址属性名字和标号对应存储单元的逻辑地名字和标号对应存储单元的逻辑地址,含址

45、,含段地址段地址和和偏移地址偏移地址;n类型属性类型属性n变量名变量名的类型可以是的类型可以是BYTE(字节)、字节)、WORD(字)字)和和DWORD(双字)等;双字)等;n标号、段名、子程序名标号、段名、子程序名的类型可以是的类型可以是NEAR(近)近)和和FAR(远远),分别表示段内或段间调用,分别表示段内或段间调用n汇编程序提供有关操作符,以便获取这些属性汇编程序提供有关操作符,以便获取这些属性值值531.地址操作符地址操作符n地址操作符地址操作符取得名字或标号的取得名字或标号的段地址段地址和和偏移地址偏移地址返回名字或标号的段地址返回名字或标号的段地址SEG 名字名字/标号标号返回名

46、字或标号的偏移地址返回名字或标号的偏移地址OFFSET 名字名字/标号标号段前缀,采用指定的段地址寄存器段前缀,采用指定的段地址寄存器:当前偏移地址当前偏移地址$将括起的表达式作为存储器地址指针将括起的表达式作为存储器地址指针 542.类型操作符类型操作符n类型操作符类型操作符对名字或标号的类型属性进行设置对名字或标号的类型属性进行设置类型名类型名 PTR 名字名字/标号标号其中其中类型名类型名可以是可以是BYTE、WORD、DWORD(依依次表示字节、字、双字)等次表示字节、字、双字)等,或是或是NEAR、FAR(分分别表示近、远),还可以是由结构、记录等定义的别表示近、远),还可以是由结构

47、、记录等定义的类型类型n对变量:对变量:TYPE操作符返回一个字量数值,表明类型操作符返回一个字量数值,表明类型 LENGTHOF操作符获知某变量名指向多少个数操作符获知某变量名指向多少个数据项据项 SIZEOF操作符获知它共占用多少字节空间操作符获知它共占用多少字节空间SIZEOF=TYPE*LENGTHOF553.3 顺序程序设计顺序程序设计n没有分支、循环等转移指令的程序,会按指令没有分支、循环等转移指令的程序,会按指令书写的前后顺利依次执行,这就是顺序程序书写的前后顺利依次执行,这就是顺序程序n顺序结构是最基本的程序结构顺序结构是最基本的程序结构n完全采用顺序结构编写的程序并不多见完全

48、采用顺序结构编写的程序并不多见例题例题3.4 顺序程序设计实例顺序程序设计实例采用查表法,实现一位采用查表法,实现一位16进制数进制数转换为转换为ASCII码显示码显示56例例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;假设两个假设两个查表查表数据数据57例例3.4 代码段代码段;代码段代码段mov bx,offset ASCII;BX指向指向ASCII码表首

49、址码表首址mov al,hex;AL取得一位取得一位16进制数进制数;即要查表项在即要查表项在ASCII码表中的位移码表中的位移and al,0fh;屏蔽高屏蔽高4位只取低位只取低4位位xlat;换码:换码:ALDS:BXALXLAT58XLAT指令的功能指令的功能59例例3.4 代码段(续)代码段(续)mov dl,al;入口参数:入口参数:DLALmov ah,2;02号号DOS功能调用功能调用int 21h;显示一个显示一个ASCII码字符码字符mov al,hex+1;转换并显示下一个数据转换并显示下一个数据and al,0fhxlatmov dl,almov ah,2int 21hX

50、LAT603.4 分支程序设计分支程序设计n分支程序分支程序根据根据条件条件是真或假决定执行与否是真或假决定执行与否n判断的判断的条件条件是各种指令,如是各种指令,如CMP、TEST等执行后形成的等执行后形成的状态状态标志标志n转移指令转移指令Jcc和和JMP可以实现分支控制可以实现分支控制n分支结构有分支结构有n单分支结构单分支结构n双分支结构双分支结构n多分支结构多分支结构61单分支结构单分支结构n条件成立跳转,否条件成立跳转,否则顺序执行分支语则顺序执行分支语句体句体n注意选择正确的条注意选择正确的条件转移指令和转移件转移指令和转移目标地址目标地址实例:求绝对值实例:求绝对值62计算计算

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(汇编语言的特点课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|