第7章1微型计算机的汇编语言及汇编程序课件

上传人:无*** 文档编号:241647377 上传时间:2024-07-12 格式:PPTX 页数:44 大小:651.72KB
返回 下载 相关 举报
第7章1微型计算机的汇编语言及汇编程序课件_第1页
第1页 / 共44页
第7章1微型计算机的汇编语言及汇编程序课件_第2页
第2页 / 共44页
第7章1微型计算机的汇编语言及汇编程序课件_第3页
第3页 / 共44页
点击查看更多>>
资源描述
第第7章章微型计算机汇编语言及汇编程序微型计算机汇编语言及汇编程序7.1宏汇编语言的基本语法宏汇编语言的基本语法7.2伪指令伪指令7.3宏指令宏指令7.4系统功能调用系统功能调用7.5汇编程序的功能及汇编过程汇编程序的功能及汇编过程7.6汇编语言程序设计汇编语言程序设计P153 图图7.17.1.2 常数、变量和标号常数、变量和标号1.常数常数(1)二进制数:如二进制数:如01011010B。(2)八进制数:八进制数:723Q,35O。(3)十进制数:十进制数:129,129D。(4)十六进制数:如十六进制数:如3A5BH,0FH。(5)实数:它由整数、小数和指数部分组成,实数:它由整数、小数和指数部分组成,整数部分整数部分.小数部分小数部分E指数部分指数部分其中,整数和小数部分形成这个数的值,称作尾其中,整数和小数部分形成这个数的值,称作尾数,它可以是带符号的数。指数部分由指数标数,它可以是带符号的数。指数部分由指数标识符识符E开始,它表示了值的大小,如开始,它表示了值的大小,如5.213E-4。(6)字符串常数:字符串常数:AB,在内存中就是,在内存中就是41H,42H。在程序中,常数主要出现在:在程序中,常数主要出现在:(1)指令语句中源操作数中作立即数,它应与目的操指令语句中源操作数中作立即数,它应与目的操作数的位数相一致,可以是作数的位数相一致,可以是8位或位或16位,例如:位,例如:MOVAX,0A5F1H(2)在指令语句的基址加变址的寻址方式中作位移量,在指令语句的基址加变址的寻址方式中作位移量,例如:例如:MOVBX,SI+32H(3)在数据定义伪指令中,例如:在数据定义伪指令中,例如:Aa1 DB12H;定义一个字节数据定义一个字节数据Aa2 DW1234H;定义一个字数据定义一个字数据Aa3 DD12345678H;定义一个双字数据定义一个双字数据Aa4 DBA B C D;定义定义4个字节的字符串数据个字节的字符串数据2.变量变量(1)变量的定义与预置变量的定义与预置:定义变量就是给变量分配存定义变量就是给变量分配存储单元,且对这个存储单元赋于一个符号名储单元,且对这个存储单元赋于一个符号名变量名,同时将这些存储单元预置初值。变量名,同时将这些存储单元预置初值。定义变量是用数据定义伪指令定义变量是用数据定义伪指令DB,DW,DD等。等。例如:例如:VAR-DATASEGMENT DATA1DB12H DATA2DB34H DATA3DW 5678HVAR-DATAENDS经过定义的变量,每个变量均有经过定义的变量,每个变量均有3个属性:个属性:段属性段属性(SEG):表示变量存放在哪一个逻辑段中:表示变量存放在哪一个逻辑段中(即变量所在段的段基值即变量所在段的段基值)。偏移量属性偏移量属性(OFFSET):表示变量在逻辑段中离段:表示变量在逻辑段中离段起始点的字节数。例如,变量起始点的字节数。例如,变量DATA1的偏移量为的偏移量为0,而,而DATA2的偏移量为的偏移量为1,DATA3的偏移量为的偏移量为2。上述段和偏移量两个属性就构成了变量的逻辑地址。上述段和偏移量两个属性就构成了变量的逻辑地址。类型属性类型属性(TYPE):表示变量占用存储单元的字节:表示变量占用存储单元的字节数。这一属性是由数据定义伪指令数。这一属性是由数据定义伪指令DB,DW,DD来规定的。变量来规定的。变量DATA1,DATA2是用是用DB定义的,定义的,它的类型属性为字节;而它的类型属性为字节;而DATA3是用是用DW定义的,定义的,类型属性为字;如果用类型属性为字;如果用DD定义,类型属性为双字。定义,类型属性为双字。3.标号标号标号是一条指令目标代码的符号地址,它常作为转移标号是一条指令目标代码的符号地址,它常作为转移指令指令(含子程序调用指令含子程序调用指令)的操作数。例如:的操作数。例如:LOP1:LOOPLOP1 JNENEXT NEXT:与变量类似,每个标号亦具有与变量类似,每个标号亦具有3个属性:个属性:(1)段属性段属性(SEG):(2)偏移量属性偏移量属性(OFFSET)上述两个属性构成了这条指令目标代码首字节的逻辑地址。上述两个属性构成了这条指令目标代码首字节的逻辑地址。(3)距离属性:距离属性:NEAR(近近)FAR(远远)7.1.3 表达式与运算符表达式与运算符表达式由操作数和运算符组成,在汇编时一个表表达式由操作数和运算符组成,在汇编时一个表达式得到一个值。达式得到一个值。用一个运算符可以对一个操作数或几个操作数进用一个运算符可以对一个操作数或几个操作数进行运算,这就构成了一个表达式,从而得到一行运算,这就构成了一个表达式,从而得到一个新的值。个新的值。ASM86中分中分6类运算符,包括类运算符,包括算术运算符、逻辑运算符、关系运算符、分析算术运算符、逻辑运算符、关系运算符、分析运算符、组合运算符和分离运算符运算符、组合运算符和分离运算符,它们在汇,它们在汇编时完成相应运算。编时完成相应运算。4.分析运算符分析运算符(1)SEG 求段基址求段基址格式:格式:SEG符号名符号名(2)OFFSET 求偏移地址求偏移地址格式:格式:OFFSET符号名符号名(3)TYPE 求符号名类型值求符号名类型值格式:格式:TYPE符号名符号名5.组合运算符组合运算符组合运算符是用来改变或建立符号名的新类型。组合运算符是用来改变或建立符号名的新类型。(1)定义符号名为新类型定义符号名为新类型格式:格式:类型类型PTR符号名符号名例如,设内存变量例如,设内存变量D1是字节属性,把它的两个字节是字节属性,把它的两个字节内容送到内容送到AX中。中。MOV AX,WORD PTR D1这里的符号名可以是间址、变址寻址、基址加变址寻这里的符号名可以是间址、变址寻址、基址加变址寻址表示的存储器操作数。址表示的存储器操作数。7.2 伪指令伪指令伪指令没有对应的机器指令,它不是由伪指令没有对应的机器指令,它不是由86系列系列CPU来执行,而是由来执行,而是由MASM-86识别,并完成识别,并完成相应的功能。它在很大程度上规定了相应的功能。它在很大程度上规定了MASM-86的性能,因此称之为汇编命令的性能,因此称之为汇编命令(Directives)。MASM-86中允许使用的伪指令相当丰富,必中允许使用的伪指令相当丰富,必须搞清楚这些伪指令的功能及其用法,才能编须搞清楚这些伪指令的功能及其用法,才能编制出高质量的汇编语言源程序。制出高质量的汇编语言源程序。MASM-86中中使用的伪指令可分成使用的伪指令可分成14类,下面逐一进行介绍。类,下面逐一进行介绍。图图7.2它与指令语句不同,伪指令语句它与指令语句不同,伪指令语句(又叫命令语句又叫命令语句)中中的伪指令本身不产生对应的机器目标代码。它仅仅的伪指令本身不产生对应的机器目标代码。它仅仅是告诉汇编程序,对后面的指令语句和伪指令语句是告诉汇编程序,对后面的指令语句和伪指令语句的操作数应该如何产生机器目标代码。每一条伪指的操作数应该如何产生机器目标代码。每一条伪指令语句共分令语句共分4个字段,它的指令格式如图个字段,它的指令格式如图7.2所示。所示。7.1.1 伪指令语句格式伪指令语句格式1.标号名字段标号名字段这是一个任选字段。标号名后面不能用冒号这是一个任选字段。标号名后面不能用冒号“:”,这是它与指令语句的突出区别。不同的伪指令,标这是它与指令语句的突出区别。不同的伪指令,标号名可以是常量名、变量名、过程名、结构名、记号名可以是常量名、变量名、过程名、结构名、记录名等。它们可以作为指令语句和伪指令语句的操录名等。它们可以作为指令语句和伪指令语句的操作数,这时,标号名就表示一个常量或存储器地址。作数,这时,标号名就表示一个常量或存储器地址。2.伪指令字段伪指令字段这是伪指令语句不可省略的主要成分。伪指令种类很这是伪指令语句不可省略的主要成分。伪指令种类很多,如定义数据伪指令多,如定义数据伪指令DB,DW,DD;段定义伪;段定义伪指令指令SEGMENT;定义过程伪指令;定义过程伪指令PROC;。它。它们是伪指令语句要求汇编程序完成的具体操作命令。们是伪指令语句要求汇编程序完成的具体操作命令。3.操作数字段操作数字段本字段是否需要,需要几个,需要什么样的操作数等本字段是否需要,需要几个,需要什么样的操作数等都由伪指令字段中伪指令来确定。操作数可以是一都由伪指令字段中伪指令来确定。操作数可以是一个常数个常数(二进制、十进制、十六进制等二进制、十进制、十六进制等)、字符串、字符串、常量名、变量名、标号、一些专用的符号常量名、变量名、标号、一些专用的符号(如如BYTE,FAR,PARA等等)。4.注释字段注释字段这是一个任选字段,它必须以分号为开始,它的作用这是一个任选字段,它必须以分号为开始,它的作用与指令语句的注释字段相同。与指令语句的注释字段相同。1.符号定义伪指令符号定义伪指令(赋值语句赋值语句)(1)名字名字EQU表达式表达式(2)名字名字表达式表达式该语句把表达式的值赋给符号名,在同一程序中,该语句把表达式的值赋给符号名,在同一程序中,用用EQU语句赋值的符号名不能被重新赋值,但语句赋值的符号名不能被重新赋值,但用用“”号赋值的符号名可以被重新赋值。号赋值的符号名可以被重新赋值。“”号表示此项不能默认,但该符号不需要号表示此项不能默认,但该符号不需要输入。输入。例如例如:Aa=8+2 2.数据定义伪指令:数据定义伪指令:3.这种伪指令主要为数据项分配存储单元并预置初这种伪指令主要为数据项分配存储单元并预置初值。由这种伪指令构成的语句格式是:值。由这种伪指令构成的语句格式是:DB变量名变量名DW表达式表达式1,表达式,表达式2,DD DQ DT 其中表达式其中表达式1,表达式,表达式2,是给变量赋予的初值。表是给变量赋予的初值。表达式可以有如下几种情况:达式可以有如下几种情况:数值表达式。例如:数值表达式。例如:DA_BYTEDB50H,50DA_WORD DW0A3F1H,4981H变量变量DA-BYTE的内容为的内容为50H,它的下一个字节为,它的下一个字节为32H(即即DA-BYTE+1字节单元的内容为十进制字节单元的内容为十进制50)。DA-WORD字单元内容为字单元内容为0A3F1H(低字节为低字节为F1H,高字节为高字节为0A3H)它的下一字单元内容为它的下一字单元内容为4981H(即即DA-WORD+2字单元字单元)。?表达式:不带引号的表达式:不带引号的?表示可预置任何内容。例表示可预置任何内容。例如:如:DA_BDB?,?DA_WDW?,?第第1条语句是要求汇编程序分配两个字节单位,第条语句是要求汇编程序分配两个字节单位,第2条条语句是要求分配两个字单元。这些单元里现在可以语句是要求分配两个字单元。这些单元里现在可以是任意值。是任意值。字符串表达式:对于字符串表达式:对于DB伪指令,为字符串中每一伪指令,为字符串中每一个字符分配一个字节单元。字符串必须是用引号括个字符分配一个字节单元。字符串必须是用引号括起来且不超过起来且不超过255个字符。字符串自左至右以字符个字符。字符串自左至右以字符的的ASCII码按地址递增的排列顺序依次存放。例如:码按地址递增的排列顺序依次存放。例如:STRING1 DB ABCDEFP157 图图7.3 带带DUP表达式:表达式:DUP是定义重复数据操作符。在表达式中,是定义重复数据操作符。在表达式中,使用使用DUP操作符格式是:操作符格式是:DB变量名变量名DW表达式表达式1 DUP (表达式表达式2)DD 其中表达式其中表达式1是重复的次数,表达式是重复的次数,表达式2 是是 重复的内容。例如:重复的内容。例如:D_B1DB20HDUP(?)D_B2DB10HDUP(ABCD)D_W1DW10HDUP(4)第第1语句语句:表示保留表示保留20H个字节,每个字节可预置任意内容。个字节,每个字节可预置任意内容。第第2语句:重复语句:重复10H个字符串个字符串“ABCD”,共占,共占40H字节。字节。第第3语句:重复语句:重复10H个字单元,每单元预置个字单元,每单元预置4,共占,共占20H字节。字节。在指令中引用上述定义的符号时,必须考虑符号命的在指令中引用上述定义的符号时,必须考虑符号命的类型,否则会出现错误。类型,否则会出现错误。D1 DB 3 DUP(12H)例如:例如:MOVAX,D1;D1 类型错误类型错误MOVAX,WORD PTR D1;正确;正确3.段定义伪指令段定义伪指令存储器在逻辑上是分段的,各段的定义由伪指令实现。存储器在逻辑上是分段的,各段的定义由伪指令实现。格式:格式:段名段名SEGMENT定位方式连接方式定位方式连接方式类别名类别名 段名段名ENDS段定义伪指令为程序的汇编和连接说明了段名、分段的段定义伪指令为程序的汇编和连接说明了段名、分段的各种属性以及分段的开始和结束。段名是自定义符,各种属性以及分段的开始和结束。段名是自定义符,开始的段名与结束的段名必须相同。段的长度不超过开始的段名与结束的段名必须相同。段的长度不超过64KB。SEGMENT后面的参数是可选项。后面的参数是可选项。例如:例如:data SEGMENT data ENDS(1)定位方式定位方式(定位类型定位类型):定位方式指定段的起始地址边界,定位方式指定段的起始地址边界,方式有方式有4种。种。PAGE指定起始地址的低指定起始地址的低8位是位是0,即其值能被,即其值能被256整除整除(称称为页边界为页边界)。PARA指定起始地址的低指定起始地址的低4位是位是0,即其值能被,即其值能被16整除整除(称称为段边界为段边界)。这是系统隐含定位方式。这是系统隐含定位方式。WORD指定起始地址的最低位是指定起始地址的最低位是0,即其值能被,即其值能被2整除整除(称称为字边界为字边界)。BYTE指定起始地址是任意值。指定起始地址是任意值。以上以上4种边界如下所示:种边界如下所示:0 0 0 0 0 0 0 0PAGE 0 0 0 0PARA 0WORDBYTE4.段寄存器说明伪指令段寄存器说明伪指令ASSUME 段寄存器:段定义名段寄存器:段定义名1,段寄存器:段定义名,段寄存器:段定义名2,该伪指令告诉汇编程序在汇编时,段寄存器该伪指令告诉汇编程序在汇编时,段寄存器CS:,:,DS:,:,SS:和:和ES:应具有的符号段基址,以便:应具有的符号段基址,以便汇编指令时确定段和建立错误信息。但是段寄存汇编指令时确定段和建立错误信息。但是段寄存器实际值器实际值(CS除外除外)还要由传送指令在执行程序时还要由传送指令在执行程序时赋值。赋值。例如:例如:ASSUME CS:CODE,DS:DATA5.过程过程(子程序子程序)定义伪指令定义伪指令格式:格式:过程名过程名PROCNEAR(或或FAR)过程名过程名ENDP过程名是自定义符。定义过程是为实现子程序调用而设的。过程名是自定义符。定义过程是为实现子程序调用而设的。调用格式为:调用格式为:CALL过程名过程名过程由过程由RET指令返回,它可以不是最后一条指令,它在过程指令返回,它可以不是最后一条指令,它在过程中可以设多点返回。中可以设多点返回。过程起始名和终止名必须相同。类型过程起始名和终止名必须相同。类型NEAR和和FAR默认时系统默认时系统约定是近过程,当选约定是近过程,当选NEAR时,过程是段内调用,过程中的时,过程是段内调用,过程中的RET是段内返回。当选是段内返回。当选FAR时,过程是段间调用,过程中时,过程是段间调用,过程中的的RET是段间返回。是段间返回。例如:例如:STAR PROC FARSTAR PROC FAR STAR ENDP STAR ENDP6.模块开始伪指令模块开始伪指令格式:格式:NAME 模块名模块名该伪指令指明程序模块的开始,并指出模块名。模块名是自该伪指令指明程序模块的开始,并指出模块名。模块名是自定义符,它不能是系统保留字,每次汇编只能出现一次。定义符,它不能是系统保留字,每次汇编只能出现一次。若该伪指令默认,则取若该伪指令默认,则取TITLE语句中的页标题前语句中的页标题前6个字符;个字符;若没有若没有TITLE语句,则取源程序文件名为模块名。语句,则取源程序文件名为模块名。例如例如 :NAME EX1NAME EX17.模块结束伪指令模块结束伪指令格式:格式:END启动标号或过程名启动标号或过程名该伪指令告诉汇编程序源文件结束,并给出执行程序的入口该伪指令告诉汇编程序源文件结束,并给出执行程序的入口位置。启动地址只有在主模块才有意义。位置。启动地址只有在主模块才有意义。例如例如 :END END8.定位伪指令定位伪指令格式:格式:ORG表达式表达式该伪指令把以下语句定义的内存数据或程序,从表达该伪指令把以下语句定义的内存数据或程序,从表达式指定的起点式指定的起点(偏移地址偏移地址)开始连续存放,直至遇到开始连续存放,直至遇到新的新的ORG指令。表达式的值是一个无符号数。指令。表达式的值是一个无符号数。例如例如:DATA SEGMENT A1 DB 12H ORG 1000H A2 DB 24H DATA ENDS9.列表伪指令列表伪指令(1)建立标题建立标题格式:格式:TITLE标题标题为列表文件每页第一行定义大标题。为列表文件每页第一行定义大标题。(2)建立小标题建立小标题格式:格式:SUBTTL小标题小标题为列表文件每页定义小标题,输出在大标题之后。为列表文件每页定义小标题,输出在大标题之后。(3)自动排版自动排版(行数、列数行数、列数)格式:格式:PAGE行数,行字数行数,行字数为列表文件定义每页行数为列表文件定义每页行数(10255)和每行字符数和每行字符数(60132),默认值是,默认值是66行,行,80列。列。为了简化汇编语言源程序的书写,把一些频繁出现的为了简化汇编语言源程序的书写,把一些频繁出现的程序段定义为程序段定义为“宏指令宏指令”,当程序中遇到这个程序,当程序中遇到这个程序段时,只需用一条宏调用语句,这样有效地缩短了段时,只需用一条宏调用语句,这样有效地缩短了源程序的长度,使源程序易读,也减少了由于重复源程序的长度,使源程序易读,也减少了由于重复书写而引起的错误。从某种意义上讲,它与前述的书写而引起的错误。从某种意义上讲,它与前述的“过程过程”有相似之处,也可以将构成一条宏指令的有相似之处,也可以将构成一条宏指令的程序段定义为一个程序段定义为一个“过程过程”,但两者具有明显的区,但两者具有明显的区别,主要表现如下:别,主要表现如下:(1)宏调用语句由宏汇编程序宏调用语句由宏汇编程序MASM86中的宏处中的宏处理程序来识别,并完成相应的处理;而调用过程的理程序来识别,并完成相应的处理;而调用过程的CALL语句由语句由CPU来执行。来执行。7.3 宏指令宏指令(2)汇编语言源程序在汇编过程中要将宏指令所代替汇编语言源程序在汇编过程中要将宏指令所代替的程序段汇编成相应的机器代码,并插入到源程序的程序段汇编成相应的机器代码,并插入到源程序的目标代码中,每次调用均要插入,这样,使用宏的目标代码中,每次调用均要插入,这样,使用宏调用并不能缩短目标代码的长度。但被定义的调用并不能缩短目标代码的长度。但被定义的“过过程程”经汇编后的机器代码是与主程序分开而独立存经汇编后的机器代码是与主程序分开而独立存在的,其目标代码在存储器中只需保留一份,因此,在的,其目标代码在存储器中只需保留一份,因此,采用过程调用能有效地缩短目标代码的长度,即节采用过程调用能有效地缩短目标代码的长度,即节省内存空间,而宏指令却没有这一优点。省内存空间,而宏指令却没有这一优点。(3)过程调用时需要保留程序的断点和现场,待过程过程调用时需要保留程序的断点和现场,待过程执行完毕还要恢复现场和断点,这些操作需要耗费执行完毕还要恢复现场和断点,这些操作需要耗费CPU的时间,而宏调用则不需进行这些操作。因此,的时间,而宏调用则不需进行这些操作。因此,过程调用可节省程序占用的存储空间,但会降低程过程调用可节省程序占用的存储空间,但会降低程序的执行速度;而宏调用不能节省存储空间,却能序的执行速度;而宏调用不能节省存储空间,却能有较快的执行速度。有较快的执行速度。(4)在每次宏调用时允许修改有关参数,使得同一条在每次宏调用时允许修改有关参数,使得同一条宏指令在各次调用过程中可完成不同的操作;而宏指令在各次调用过程中可完成不同的操作;而“过程过程”一旦被定义,一般不允许修改。因此,任何一旦被定义,一般不允许修改。因此,任何一个一个“过程过程”在各次调用中只能完成完全相同的功在各次调用中只能完成完全相同的功能。能。从上述特点可看出,当需要多次执行的程序段比较长,从上述特点可看出,当需要多次执行的程序段比较长,对速度要求不很高,并且不要求修改参数的情况下,对速度要求不很高,并且不要求修改参数的情况下,宜采用过程调用方式;若要求多次执行的程序段比宜采用过程调用方式;若要求多次执行的程序段比较短,或希望在各次调用中能修改某些参数时,则较短,或希望在各次调用中能修改某些参数时,则宜采用宏调用方式。宜采用宏调用方式。在使用高级语言时,各语句的定义在使用高级语言时,各语句的定义(即它对应哪些机即它对应哪些机器指令器指令)是由相应的编译程序去处理的,但宏指令是由相应的编译程序去处理的,但宏指令却不一样,它需要定义。宏指令的使用要经过如下却不一样,它需要定义。宏指令的使用要经过如下3个步骤:个步骤:(1)宏定义:对各个宏指令进行定义,并分别起一个宏定义:对各个宏指令进行定义,并分别起一个名字;名字;(2)宏调用:在需要使用的地方,通过宏指令名来调宏调用:在需要使用的地方,通过宏指令名来调用它;用它;(3)宏扩展:由宏汇编程序用宏定义中的指令来代替宏扩展:由宏汇编程序用宏定义中的指令来代替宏调用中的宏指令名。宏调用中的宏指令名。下面介绍各种宏语句及其功能。下面介绍各种宏语句及其功能。1.宏代换语句宏代换语句格式:格式:宏名宏名 MACRO形式参数形式参数1,形式参数,形式参数2,宏体宏体(指令序列指令序列)ENDM功能:功能:宏代换语句为指令序列定义一个宏名,称为宏指令,宏代换语句为指令序列定义一个宏名,称为宏指令,宏名可以像指令一样在程序中引用。宏名可以像指令一样在程序中引用。形式参数是任选项,可用来代换宏体中某些参数或符号。当形式参数是任选项,可用来代换宏体中某些参数或符号。当代换指令中的符号时,在其前面需加一个宏代换符。例代换指令中的符号时,在其前面需加一个宏代换符。例如:如:AH MACRO Y,X MOV CL,X RO&Y ax,CLENDM 例如例如 AH L,1经宏代换语句定义的宏名,在应用时可直接引用,称为宏调经宏代换语句定义的宏名,在应用时可直接引用,称为宏调用。宏调用时,形式参数要用实在参数取代,顺序也应与用。宏调用时,形式参数要用实在参数取代,顺序也应与形式参数顺序相同。例如:形式参数顺序相同。例如:7.4 系统功能调用系统功能调用为给编写汇编语言源程序提供方便,为给编写汇编语言源程序提供方便,MS-DOS系统中设置系统中设置了几十个内部子程序,它们可完成了几十个内部子程序,它们可完成I/O设备管理、存储设备管理、存储管理、文件管理和作业管理等功能。对我们来说,它管理、文件管理和作业管理等功能。对我们来说,它们是几十个独立中断服务程序,它们的入口已由系统们是几十个独立中断服务程序,它们的入口已由系统置入中断入口地址表中,在汇编语言源程序中可用软置入中断入口地址表中,在汇编语言源程序中可用软中断指令调用它们。一般我们常用的软中断指令有中断指令调用它们。一般我们常用的软中断指令有8条,条,系统规定它们的中断类型码为系统规定它们的中断类型码为20H27H,它们各自的它们各自的功能及入口功能及入口/出口参数如表出口参数如表7-3所示所示(见书第见书第168页页)。从表从表7-3中可看出,这些软中断完全隐蔽了设备的物理特中可看出,这些软中断完全隐蔽了设备的物理特性和接口方式,调用它们时只需要先设置好入口参数,性和接口方式,调用它们时只需要先设置好入口参数,随后安排一条软中断指令随后安排一条软中断指令“INT n”(n2027H),即可转去执行相应的子程序。其中即可转去执行相应的子程序。其中“INT 21H”是系是系统功能调用,它本身包含统功能调用,它本身包含80多个子程序,每个子程多个子程序,每个子程序对应一个功能号,其编号从序对应一个功能号,其编号从057H。系统功能调用中的几十个子程序成为汇编语言程序员系统功能调用中的几十个子程序成为汇编语言程序员的重要工具,程序员不必了解所使用设备的物理特的重要工具,程序员不必了解所使用设备的物理特性、接口方式及内存分配等,不必编写繁锁的控制性、接口方式及内存分配等,不必编写繁锁的控制程序。调用它们时采用统一的格式,只需使用以下程序。调用它们时采用统一的格式,只需使用以下3个语句:个语句:(1)传送入口参数到指定寄存器中;传送入口参数到指定寄存器中;(2)功能号送入功能号送入AH寄存器中;寄存器中;(3)INT 21H。有的子程序无入口参数,则只需安排后两个语句有的子程序无入口参数,则只需安排后两个语句.输出单字符输出单字符这是这是2号系统功能调用,使用格式如下所示:号系统功能调用,使用格式如下所示:MOVDL,A MOVAH,2 INT 21H执行执行2号系统功能调用时,将置入号系统功能调用时,将置入DL寄存器中的字符寄存器中的字符从屏幕上显示输出从屏幕上显示输出(或打印机打印输出或打印机打印输出)。4.输出字符串输出字符串这是这是9号系统功能调用,其功能是将指定的内存缓冲号系统功能调用,其功能是将指定的内存缓冲区中的字符串从屏幕显示输出区中的字符串从屏幕显示输出(或从打印机打印输或从打印机打印输出出)。缓冲区中的字符串以。缓冲区中的字符串以“”字符作为结束标字符作为结束标志。志。9号系统功能调用的使用格式如下所示:号系统功能调用的使用格式如下所示:BUF DB good bye MOV DX,OFFSET BUFMOV AH,9INT 21H10.返回操作系统返回操作系统这是这是4CH号系统功能调用,其使用格式如下:号系统功能调用,其使用格式如下:MOV AH,4CHINT 21H它没有入口参数,执行结果是结束当前正在执行的程它没有入口参数,执行结果是结束当前正在执行的程序,并返回操作系统。屏幕显示操作系统提示符序,并返回操作系统。屏幕显示操作系统提示符(N),N为当前使用的驱动器名。为当前使用的驱动器名。7.5 汇编程序的功能及汇编过程汇编程序的功能及汇编过程7.5.1 汇编程序的功能汇编程序的功能汇编程序的主要功能是将由汇编语言汇编程序的主要功能是将由汇编语言(助记符助记符)编编写的源程序翻译成用机器语言写的源程序翻译成用机器语言(二进制代码二进制代码)编编写的目标程序。图写的目标程序。图7.4可用以说明这个功能。可用以说明这个功能。图图7.4从图从图7.4中可以看到,汇编语言源程序作为汇编程序中可以看到,汇编语言源程序作为汇编程序(MASM或或ASM)这个这个“翻译翻译”的输入,而这个的输入,而这个“翻翻译译”的输出是的输出是3个文件。个文件。目标代码文件就是机器码文件,在目标代码文件中的目标代码文件就是机器码文件,在目标代码文件中的地址数据还是浮动的地址数据还是浮动的(相对的相对的),因此,它还不能直,因此,它还不能直接运行;接运行;列表文件包含了程序的逻辑地址、代码程序及源程序列表文件包含了程序的逻辑地址、代码程序及源程序对照清单,并在该文件后附有引用符号表,该文件对照清单,并在该文件后附有引用符号表,该文件可用可用DOS的的TYPE命令输出;命令输出;交叉索引文件包含了符号定义行号和引用行号,该文交叉索引文件包含了符号定义行号和引用行号,该文件不能用件不能用TYPE命令输出,它需要执行命令输出,它需要执行CREF文件文件后生成索引列表文件后生成索引列表文件(.REF)才能输出。才能输出。P173图图7.57.6 汇编语言程序设计汇编语言程序设计在第在第4章中已经讲过,章中已经讲过,8086/8088/80286/80386等等CPU把存把存储器分成若干段,每个段是一个可独立寻址的逻辑单储器分成若干段,每个段是一个可独立寻址的逻辑单位。段是位。段是8086系列汇编语言程序的基础,一个段就是系列汇编语言程序的基础,一个段就是一些指令和数据的集合,一些指令和数据的集合,8086系列汇编语言源程序就系列汇编语言源程序就是建立在段结构的基础上。所以,在编制汇编语言源是建立在段结构的基础上。所以,在编制汇编语言源程序时,首先要使用段定义伪指令和段寻址伪指令来程序时,首先要使用段定义伪指令和段寻址伪指令来构成一个由若干指令和数据组成的程序。一个程序有构成一个由若干指令和数据组成的程序。一个程序有几个段,完全根据实际情况来确定,通常是按照程序几个段,完全根据实际情况来确定,通常是按照程序中的用途来划分段。如存放数据的段,作堆栈使用的中的用途来划分段。如存放数据的段,作堆栈使用的段,存放程序的段,存放子程序的段等等。我们在刚段,存放程序的段,存放子程序的段等等。我们在刚开始编制程序时,不妨先设开始编制程序时,不妨先设34个段,由个段,由4个段寄存器个段寄存器CS,DS,SS,ES分分p经常不断地学习,你就什么都知道。你知道得越多,你就越有力量pStudyConstantly,AndYouWillKnowEverything.TheMoreYouKnow,TheMorePowerfulYouWillBe写在最后谢谢你的到来学习并没有结束,希望大家继续努力Learning Is Not Over.I Hope You Will Continue To Work Hard演讲人:XXXXXX 时 间:XX年XX月XX日
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!