第5章汇编语言程序设计课件

上传人:仙*** 文档编号:241660364 上传时间:2024-07-14 格式:PPT 页数:75 大小:580.04KB
返回 下载 相关 举报
第5章汇编语言程序设计课件_第1页
第1页 / 共75页
第5章汇编语言程序设计课件_第2页
第2页 / 共75页
第5章汇编语言程序设计课件_第3页
第3页 / 共75页
点击查看更多>>
资源描述
1第5章 汇编语言程序设计5.1宏汇编语言的基本语法宏汇编语言的基本语法 5.2 伪指令伪指令5.3 宏指令宏指令5.4汇编语言程序的结构汇编语言程序的结构5.5 DOS系统功能调用系统功能调用5.6 汇编语言程序设计方法汇编语言程序设计方法5.7 软件调试技术软件调试技术习题习题2汇编语言是用意义明确的助记符来表示指令的操汇编语言是用意义明确的助记符来表示指令的操作码、操作数。汇编语言是面向机器的语言,不同的作码、操作数。汇编语言是面向机器的语言,不同的机器有不同的汇编语言。用汇编语言编写的程序具有机器有不同的汇编语言。用汇编语言编写的程序具有执行执行速度快、占用存储空间小、实时性能好速度快、占用存储空间小、实时性能好等特点。等特点。汇编语言被大量用于编写计算机系统程序、实时控制汇编语言被大量用于编写计算机系统程序、实时控制程序等。程序等。用汇编语言编写的程序称为汇编语言源程序(简用汇编语言编写的程序称为汇编语言源程序(简称汇编语言程序)。计算机必须将汇编语言程序翻译称汇编语言程序)。计算机必须将汇编语言程序翻译成由机器代码组成的目标程序才能执行。这个翻译过成由机器代码组成的目标程序才能执行。这个翻译过程称为汇编。自动完成汇编过程的软件叫汇编程序。程称为汇编。自动完成汇编过程的软件叫汇编程序。35.1 5.1 5.1 5.1 宏汇编语言的基本语法宏汇编语言的基本语法宏汇编语言的基本语法宏汇编语言的基本语法5.1.1 5.1.1 常数、变量和标号常数、变量和标号1.1.常数常数 常常数数没没有有任任何何属属性性的的纯纯数数值值。在在汇汇编编期期间间,它它的的值值已已经经完完全全确确定定,而而且且在在程程序序的的运运行行中中也也不不会发生变化。它可以有以下几种类型:会发生变化。它可以有以下几种类型:二二进进制制数数:以以字字母母B B结结尾尾的的由由一一串串“0 0”和和“1 1”组组成成的序列。例如:的序列。例如:00101100010110B B。八八进进制制数数:以以字字母母o o或或Q Q结结尾尾,由由若若干干个个0 0到到7 7的的数数字字组成的序列。例如:组成的序列。例如:255255Q Q、十十进进制制数数:由由若若干干个个0 0到到9 9的的数数字字组组成成的的序序列列,可可以以以以字字母母D D结结尾尾,也也可可以以省省略略字字母母D D。例例如如:12341234D D或或12341234。4十十六六进进制制数数:以以字字母母H H结结尾尾,由由若若干干个个0 0到到9 9的的数数字字和和字字母母A A到到F F组组成成的的序序列列,且且必必须须以以数数字开头。例如:字开头。例如:5656H H,0B3FH0B3FH。字字符符串串常常数数:用用引引号号括括起起来来的的一一个个或或多多个个字字符符。这这些些字字符符以以ASCII ASCII 码码形形式式存存在在内内存存中中。例例如如A A的的值值是是4141H H,而而B B的的值值是是4242H H。因因此此串串常常量量与与整整数数常常量量可可以以交交替替使用。使用。5总之,常数主要以立即数、位移量的形式出现在指令总之,常数主要以立即数、位移量的形式出现在指令语句或数据定义伪指令中。语句或数据定义伪指令中。注意:注意:为了区别由为了区别由AF组成的一个字符串是十六进制组成的一个字符串是十六进制数还是英文符号,规定凡以字母数还是英文符号,规定凡以字母AF为起始字为起始字符的十六进制数,必须在前面冠以数字符的十六进制数,必须在前面冠以数字“0”。6变量变量变变量量通通常常是是存存放放在在某某些些存存储储单单元元的的数数据据,这这些些数数据在程序运行期间可以修改。据在程序运行期间可以修改。变量的三个属性:变量的三个属性:(1)(1)段属性段属性(SEGMENT)SEGMENT):表示变量所在段的段首地址表示变量所在段的段首地址(2)(2)偏移属性偏移属性(OFFSET)OFFSET):表示变量的偏移地址表示变量的偏移地址(3)(3)类型属性类型属性(TYPE)TYPE):表示变量占用存储单元的字节数。表示变量占用存储单元的字节数。变量名变量名表示数据在段中的有效地址,由用户指定。表示数据在段中的有效地址,由用户指定。变量名是可选的,如果使用变量名,它代变量名是可选的,如果使用变量名,它代表数据区中第一个数据项的地址。表数据区中第一个数据项的地址。7 变量是用数据定义伪指令变量是用数据定义伪指令DBDB、DWDW、DDDD等定义的。等定义的。DB DB字节字节 DW DW字(字(2 2字节)字节)DD DD双字(双字(4 4字节)字节)注注意意:变变量量也也可可以以定定义义为为一一个个数数据据区区或或存存储储区区,但但变变量量名名仅仅表表示示该该数数据据区区或或存存储储区区的的第第一一个个数数据据单单元元(即即数数据据区或存储区的首地址)。区或存储区的首地址)。8标号标号l表表示示一一条条指指令令所所在在的的地地址址,也也是是指指令令语语句句的的地地址址符符号号,常常用用作作转转移移指指令令(包包含含子子程程序序调调用用指指令令)的的操操作数,即目标地址。作数,即目标地址。l通通常常由由字字母母数数字字串串组组成成,但但第第一一个个字字符符必必须须为为字字母母。最最多多允允许许使使用用3131个个字字符符,且且可可以以使使用用下下划划线线(-)使标号容易阅读。使标号容易阅读。9标号的三个属性:标号的三个属性:(1)段属性(段属性(SEGMENT):表示标号所在段的段基址表示标号所在段的段基址(2)偏移属性(偏移属性(OFFSET):表示标号的偏移地址表示标号的偏移地址(3)距离属性(类型属性距离属性(类型属性TYPE):表示标号作为段内或表示标号作为段内或段间的转移属性段间的转移属性距离属性分为两种:距离属性分为两种:NEAR(近近):表表示示本本标标号号只只能能被被标标号号所所在在段段内内的的转转移和调用指令访问(即段内转移)。移和调用指令访问(即段内转移)。FAR(远远):表表示示本本标标号号可可以以被被其其他他段段(不不是是标标号号所所在在段段)的的转转移移和和调调用用指指令令访访问问(即即段段间间转移)。转移)。105.1.25.1.2运算符与表达式运算符与表达式表达式表达式地址表达式:产生的结果是一个存储器地址,地址表达式:产生的结果是一个存储器地址,若该地址存放的是数据,一般称若该地址存放的是数据,一般称它为变量,若存放的是指令,一它为变量,若存放的是指令,一般称它为标号般称它为标号.数值表达式:只产生数值结果数值表达式:只产生数值结果11运算符主要包括以下运算符主要包括以下6 6种种类型:型:算术运算符算术运算符 包括:包括:+、-、*、/、MOD(MOD(求余求余)、SHLSHL(左移左移)和右移和右移(SHRSHR)例:例:CONT=14*4 CONT=CONT/8MOVAL,21HSHL22.逻辑运算符逻辑运算符包包括括:AND、OR、XOR和和NOT。只只适适用用于于对对常常数数进进行逻辑运算。行逻辑运算。例例:ANDDX,PORTAND0FEH123.关系运算符关系运算符包括:包括:EQ(相等)、相等)、NE(不相等)、不相等)、LT(小于)、小于)、GT(大于)、大于)、LE(小于或等于)、小于或等于)、GE(大于或等于)。大于或等于)。结果:若关系为假(不成立),结果为结果:若关系为假(不成立),结果为0;若关系为真(成立),结果为若关系为真(成立),结果为0FFH或或0FFFFH。例例:MOVBX,PORTLT5例例:MOVBX,(PORTLT5)AND20)OR(PORTGE5)AND30)当当PORT5时,等价时,等价MOVBX,3013分析操作符(数值返回运算符)分析操作符(数值返回运算符)取地址的偏移量取地址的偏移量格式:格式:OFFSET变量名或标号变量名或标号功能:取变量名或标号所在段的段内偏移量。功能:取变量名或标号所在段的段内偏移量。取段基址取段基址格式:格式:SEG变量名或标号变量名或标号功能:取变量名或标号所在段的段首地址。功能:取变量名或标号所在段的段首地址。14求变量名或标号的类型值求变量名或标号的类型值格式:格式:TYPE变量名或标号变量名或标号功功能能:返返回回一一个个数数字字值值。若若TYPE加加在在变变量量名名前前,返返回回该该变变量量的的类类型型属属性性;若若加加在在标标号号前前,返返回回该该变量的距离属性。变量的距离属性。属性属性类型值类型值变量变量BYTE1WORD2DWORD4标号标号NEAR-1FAR-2存储器操作数的类型值存储器操作数的类型值15求长度求长度格式:格式:LENGTH变量名变量名功能:返回一个变量名所占存储单元(字节、字或双功能:返回一个变量名所占存储单元(字节、字或双字)的数目。若变量是用重复定义子句说明的,字)的数目。若变量是用重复定义子句说明的,则返回则返回DUP前面的数值;其余返回前面的数值;其余返回1。求大小求大小格式:格式:SIZE变量名变量名功功能能:返返回回变变量量名名所所占占存存储储单单元元的的字字节节数数,它它等等于于LENGTH和和TYPE两个运算符返回值的乘积。两个运算符返回值的乘积。16综合运算符综合运算符(1)PTR运算符运算符格式:类型格式:类型PTR表达式表达式功功能能:用用于于指指出出变变量量、标标号号或或地地址址表表达达式式的的类类型型属属性性,新的类型只在当前指令内有效。新的类型只在当前指令内有效。例例:MOVBYTEPTRDI,4;指明目的操作数为字节类型指明目的操作数为字节类型JMPDWORDPTRBP;指明目的操作数为双字类型指明目的操作数为双字类型 17(2)THIS运算符运算符格式:格式:THIS类型类型功能:把它后面指定的类型或距离属性赋给当前的变功能:把它后面指定的类型或距离属性赋给当前的变量、标号或地址表达式。量、标号或地址表达式。例例:AEQUTHISBYTEBDW20DUP(?)(?)说明:说明:A、B对应同一存储器地址,对变量对应同一存储器地址,对变量A为字为字节节访问,对变量访问,对变量B为字访问,且为字访问,且A和和B具有相同的具有相同的段基址和偏移量。段基址和偏移量。18例:将数据表原来按字节定义使用,现改为按字定义例:将数据表原来按字节定义使用,现改为按字定义使用。使用。WBUFFER1EQUTHISWORDBUFFERDB100DUP(0)二者段地址,偏移地址相同,类型不同。二者段地址,偏移地址相同,类型不同。注:注:THIS使下面的原标号或原变量有新的名字和类使下面的原标号或原变量有新的名字和类型,但不分配新的存储单元。型,但不分配新的存储单元。19其他运算符其他运算符HIGH和和LOW运算符运算符格式:格式:HIGH表达式表达式LOW表达式表达式功能:从运算对象中分离出高字节或低字节。功能:从运算对象中分离出高字节或低字节。例:例:K1EQU1234HMOVAL,LOWK1;AL34HMOVBL,HIGHK1;BL12H20SHORT运算符运算符格式:格式:SHORT标号标号功能:当转移的目标地址与本转移指令的下一条功能:当转移的目标地址与本转移指令的下一条指令之间的字节距离在指令之间的字节距离在-128127范围时,范围时,可以用可以用SHORT运算符进行说明。运算符进行说明。例例10:L1:JMPSHORTL2 L2:MOVAX,BX 7.运算符的优先级别运算符的优先级别(P122表表5-2)215.2 5.2 伪指令伪指令80868086宏汇编语言有两种类型的语句宏汇编语言有两种类型的语句:指指令令语语句句:在在汇汇编编过过程程中中被被翻翻译译成成相相应应的的目目标标代代码码,经经连接后生成可执行的机器指令代码。连接后生成可执行的机器指令代码。伪伪指指令令语语句句:(指指示示性性语语句句)在在汇汇编编时时被被解解释释执执行行,由由汇汇编编程程序序来来处处理理的的一一类类操操作作,如如数数据据定定义义,分配存储器等。分配存储器等。在伪指令语句的前面,可以是常量名、在伪指令语句的前面,可以是常量名、变量名、段名和过程名等。变量名、段名和过程名等。标号后用标号后用“:”在指令语句中在指令语句中表示该语句的伪操作功能。定义符由表示该语句的伪操作功能。定义符由汇编程序规定,宏汇编程序中使用了汇编程序规定,宏汇编程序中使用了数十种定义符。数十种定义符。可可以以是是常常数数(二二、十十、十十六六进进制制等等)、字字符符串串、常常量量名名、变变量量名名、标标号号和一些专用符号等。和一些专用符号等。任任选选字字段段,必必须须以以分分号号开开始始,和和指指令令语语句句的的注注释释的的功能一样。功能一样。5.2.1 5.2.1 伪指令语句的格式伪指令语句的格式格式:符号名格式:符号名定义符定义符操作数;注释操作数;注释225.2.2 5.2.2 常用伪指令常用伪指令符号定义伪指令(赋值语句)符号定义伪指令(赋值语句)等值伪指令等值伪指令格式:符号名格式:符号名EQU表达式表达式功能:将表达式的值赋给符号名。功能:将表达式的值赋给符号名。例例:ALFAEQU100COUNTEQUALFA注注意意:符符号号名名一一旦旦被被EQU定定义义,就就不不能能再再赋赋值值,即不能用即不能用EQU再为符号名重新赋值。再为符号名重新赋值。23等号伪指令等号伪指令格式:符号名格式:符号名=表达式表达式功能:将表达式的值赋给符号名。功能:将表达式的值赋给符号名。说说明明:可可以以在在程程序序中中不不同同的的地地方方多多次次使使用用以以重重新新为为符号名赋值。符号名赋值。例:例:ALFA=100MOVAL,ALFA;AL100ALFA=ALFA+2;ALFA=10224(3)定义符号名伪指令定义符号名伪指令格式:符号名格式:符号名LABEL类型类型功能:定义一个标号或变量,并指定其类型。功能:定义一个标号或变量,并指定其类型。例例:BARYLABELWORD;定定义义BARY为为字字类型类型25数据定义伪指令数据定义伪指令格式:格式:变量名变量名 DB 表达式表达式;定义字节;定义字节变量名变量名DW 表达式表达式;定义字;定义字变量名变量名 DD 表达式表达式;定义双字;定义双字变量名变量名DQ表达式表达式;定义;定义8个字节个字节变量名变量名 DT 表达式表达式;定义;定义10个字节个字节表表达达式式是是赋赋给给变变量量的的初初始始值值,可可以以有有一一个个,也也可可以有多个,常见的有以下几种:以有多个,常见的有以下几种:26数值表达式数值表达式实实际际上上是是为为数数据据分分配配存存储储单单元元,并并把把变变量量名名作作为为该该存存储储单单元元的的名名称称。若若要要定定义义多多个个相相同同类类型型的的数数据据,可可用用逗逗号号把把这这些些数数据据隔隔开开,并并依依次次分分配配在在相相邻邻的的存存储单元。储单元。例例:BUFDB20H,30HBUF1DW100DAT DW 1234H,5678H;字字变变量量DAT的的内内容容为为1234H,占占用用两两个个字字节节单单元元,下下一一个个字字单单元元即即DAT+2单单元元的的内内容容为为5678H,仍是低字节存在低地址单元。仍是低字节存在低地址单元。20H30H64H00H34H12H78H56HBUFDATBUF127ASCII字符串字符串字字符符串串必必须须用用引引号号括括起起来来,并并且且不不超超过过256个个字字符符,它它们们在在内内存存中中按按地地址址递递增增顺顺序序自自左左向向右右依依次次存存放放字字符符的的ASCII码。码。例:例:STRINGDBABCSTRING1DBHowareyou?41H42H43HHOW?STRINGSTRING128?为为数数据据项项分分配配存存储储单单元元的的一一种种方方法法,只只是是存存储储单单元元中中不不预预置置确确定定的的值值,常常用用来来预预留留存存储单元储单元,存放程序的中间结果或最终结果。,存放程序的中间结果或最终结果。例例:RESULTDB?;?;预置一个字节单元,其值不定预置一个字节单元,其值不定ABCDB12H,?,?,24HDEFDW?,?,895H,?12H24HABC95H08HDEF29重复定义子句重复定义子句DUP可以为若干个重复数据分可以为若干个重复数据分配存储单元。配存储单元。格式格式:nDUP(表达式)表达式)说明:说明:n:重复次数:重复次数表达式:重复的内容表达式:重复的内容例:例:CDB100DUP(0)TABDB100DUP(5DUP(1),),2)注意注意:(1)DUP操作可以嵌套。操作可以嵌套。(2)在在定定义义变变量量及及存存储储单单元元的的同同时时,也也定定义义了了它它们们的的类类型型属属性性。同同一一数数据据定定义义语语句句所所定定义义的的各各存存储储单单元元具具有相同的类型。有相同的类型。30例例:DA1DB3DUP(5,?,6);从从DA1地址单元开始存地址单元开始存放三组放三组“05H,预留,预留,06H”共共9个地址单元个地址单元DA2DW40DUP(?);(?);从从DA2地址单元开始保地址单元开始保留留40个字共个字共80个地址单元个地址单元DA3DB10DUP(1,2,3DUP(30,4);从从DA3地地址单元开始存放十组址单元开始存放十组“01,02,30,04,,30,04”,共占用共占用80个字节个字节。3105H06H05H06H05H06HDA101H02H1EH04H1EH :04H1EH04H1EH04HDA3共10组32段定义伪指令段定义伪指令格式:格式:段段名名SEGMENT定定位位类类型型组组合合类类型型类类别别名名 段体段体段名段名ENDS功能:把模块化分为若干个逻辑段。功能:把模块化分为若干个逻辑段。每个每个SEGMENT/ENDS可定义一个逻辑段。可定义一个逻辑段。为该段起的名字,用来指出汇编为该段起的名字,用来指出汇编程序为该段分配的存储器起始地程序为该段分配的存储器起始地址,开始的段名和结束的段名必址,开始的段名和结束的段名必须相同。须相同。段体为段内的语句序列段体为段内的语句序列334.4.段寄存器说明伪指令段寄存器说明伪指令格式:格式:ASSUME段寄存器段寄存器:段名:段名,段寄存器,段寄存器:段名:段名功能:向汇编程序指示当前各段所用的段寄存器,设功能:向汇编程序指示当前各段所用的段寄存器,设定段寄存器与段的对应关系。定段寄存器与段的对应关系。注意:注意:本本伪伪指指令令只只是是指指示示各各逻逻辑辑段段使使用用寄寄存存器器的的情情况况,并并没没有有对对段段寄寄存存器器内内容容进进行行装装填填。段段寄寄存存器器的的实实际际值值(CS除外)还要由除外)还要由MOV指令在程序中装填数据。指令在程序中装填数据。也也可可用用来来取取消消段段寄寄存存器器与与段段之之间间的的对对应应关关系系(用用NOTHING),),然后再建立新的对应关系。然后再建立新的对应关系。34例例:ASSUMEDS:NOTHINGASSUMEDS:DATABMOVAX,DATABMOVDS,AX35过程定义伪指令过程定义伪指令过程是程序的一部分,它可以被程序调用。每次过程是程序的一部分,它可以被程序调用。每次可调用一个过程,当过程中的指令执行完后,控制返可调用一个过程,当过程中的指令执行完后,控制返回调用它的地方。过程的定义是用过程定义伪指令完回调用它的地方。过程的定义是用过程定义伪指令完成的。成的。格式:格式:过程名过程名PROCNEAR/FAR 过程体过程体RET过程名过程名ENDP自定义符,开始、结束要相同;自定义符,开始、结束要相同;有三个属性(段地址,偏移地有三个属性(段地址,偏移地址和距离属性)址和距离属性)可有多个可有多个RET,一般作一般作为最后一条指令为最后一条指令36例:例:CODESEGMENTAPRCPROCNEARADDAX,BXRETAPRCENDPSTART:MOVAX,NOMCALLAPRCCALLAPRC.CODEENDSENDSTAR37模块定义及通信伪指令模块定义及通信伪指令汇编语言可以把程序划分成许多模块,并对每个汇编语言可以把程序划分成许多模块,并对每个模块独立地进行汇编和调试。模块独立地进行汇编和调试。模块开始伪指令模块开始伪指令格式:格式:NAME模块名模块名功能:指明程序模块的开始,并指出模块名。功能:指明程序模块的开始,并指出模块名。说说明明:模模块块名名是是自自定定义义符符,不不能能是是系系统统保保留留字字。若若该该项项缺缺省省,则则取取TITLE语语句句中中的的页页标标题题6个个字字符符;若若没有没有TITLE语句,则取源程序文件名为模块名。语句,则取源程序文件名为模块名。38模块结束伪指令(源程序结束伪指令)模块结束伪指令(源程序结束伪指令)格式:格式:END启动标号或过程名启动标号或过程名功功能能:END表表示示一一个个模模块块(源源程程序序)的的结结束束。通通知知汇汇编编程程序序源源程程序序到到此此结结束束,并并给给出出执执行行程程序序的的入入口口位置。位置。例例:START:MOV AX,DATA ENDSTART注意注意:1)END与与NAME联合使用,当联合使用,当NAME缺省缺省时,时,END只表示源程序的结束。只表示源程序的结束。2)汇编处理只进行到)汇编处理只进行到END为止。为止。395.3宏指令宏指令宏定义及其调用宏定义及其调用宏定义格式:宏定义格式:宏指令名宏指令名MACRO形参,形参,形参,形参,宏体宏体ENDM宏调用的格式为:宏调用的格式为:宏指令名宏指令名实参,实参,实参,实参,例例:为为了了实实现现ASCII码码和和BCD码码之之间间的的相相互互转转换换,往往往往需需要要把把AL中中的的内内容容左左移移或或右右移移4位位。设设左左移移4位位,可用下列指令序列实现:可用下列指令序列实现:MOVCL,4SALAL,CL40若多次使用,则可用一条宏指令来代替,宏定义如下:若多次使用,则可用一条宏指令来代替,宏定义如下:SHIFTMACROMOVCL,4SAL AL,CLENDM例例24:MOVAL,DIADD AL,SISHIFT;宏调用宏调用MOVBX,AL 412.带参数的带参数的宏宏SHIFTMACROXMOVCL,XSAL AL,CLENDMSHIFT4425.4 5.4 汇编语言程序的结构汇编语言程序的结构5.4.1汇编语言源程序的结构汇编语言源程序的结构一个标准的汇编语言源程序的框架结构:一个标准的汇编语言源程序的框架结构:DATASEGMENT DATAENDSSTACKSEGMENTPARASTACKSTACK;STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACK,DS:DATA,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AX定义堆栈段定义堆栈段定义数据段定义数据段定义代码段定义代码段43MOVAX,STACKMOVSS,AX MOVAH,4CHINT21HPRA PROCNEAR PRAENDP CODEENDSENDSTART445.4.2 5.4.2 汇编语言和汇编语言和DOSDOS操作系统之间的接口操作系统之间的接口 操作系统为每一个用户程序建立了一个程序段前缀操作系统为每一个用户程序建立了一个程序段前缀区区PSPPSP,长度为长度为256个字节,个字节,主要存放执行程序的有关信主要存放执行程序的有关信息以及程序和操作系统的接口。息以及程序和操作系统的接口。在在PSPPSP的开始处(偏移地址的开始处(偏移地址IP=0000HIP=0000H)安排了一条安排了一条INT 20HINT 20H软中断软中断指令,执行该服务程序后控制就转移到指令,执行该服务程序后控制就转移到DOSDOS。代码段在代码段在程序段前缀区程序段前缀区PSPPSP后面,之后是数据段,后面,之后是数据段,堆栈段。堆栈段。45CODESEGMENTCODESEGMENT:STARTPROCSTARTPROCFARFARPUSHDSPUSHDSMOVAXMOVAX,0 0PUSHAXPUSHAX:RETRETSTARTENDPSTARTENDPCODEENDSCODEENDSENDSTARTENDSTART46结束用户程序返回结束用户程序返回DOS有两种方法:有两种方法:1:MOVAH,4CHINT21H2:INT20H 475.5DOS系统功能调用系统功能调用MS-DOS系系统中中设置了几十个内部子程序,在置了几十个内部子程序,在汇编语言源程序中可采用言源程序中可采用软中断指令中断指令调用它用它们。MS-DOS中常用的中常用的软中断有中断有8条,系条,系统规定它定它们的中断的中断类型型码为20H27H,INT21H是是DOS系系统功能功能调用用。INT21H中断本身包含很多子程序,中断本身包含很多子程序,调用它用它们时采采用用统一的格式:一的格式:1)传送入口参数到指定寄存器中传送入口参数到指定寄存器中2)功能号送入功能号送入AH寄存器寄存器3)INT21H481.键盘输入单字符键盘输入单字符1号系统功能调用号系统功能调用格式:格式:MOVAH,1INT21H功功能能:无无入入口口参参数数,执执行行时时,系系统统等等待待键键盘盘输输入入,待待按按下下任任何何一一键键,系系统统先先检检查查是是否否是是CtrlBreak键键。若若是是则则退退出出,否否则则将将键键入入字字符符的的ASCII码置入码置入AL中,并在屏幕上显示该字符。中,并在屏幕上显示该字符。492.键盘输入字符串键盘输入字符串0AH号系统功能调用号系统功能调用功能功能:将将键盘输入的字符串写入到内存入的字符串写入到内存缓冲区中,冲区中,必必须事事先定先定义一个一个缓冲区。冲区。缓冲区的第一个字节:该缓冲区存放的字节数。缓冲区的第一个字节:该缓冲区存放的字节数。第二个字节:预留,系统填写实际的字符数。第二个字节:预留,系统填写实际的字符数。从第三个开始:存放字符串,回车(从第三个开始:存放字符串,回车(0DH)表示结束。表示结束。格式:格式:BUFDB20DB?DB20DUP(?)(?)MOVDX,OFFSETBUFMOVAH,0AHINT21H503.输出单字符输出单字符2号系统功能调用号系统功能调用格式:格式:MOVDL,AMOVAH,2INT21H功能:将功能:将DL中的字符送屏幕显示。中的字符送屏幕显示。51输出字符串输出字符串9 9号系统功能调用号系统功能调用功功能能:将将指指定定的的内内存存缓缓冲冲区区中中的的字字符符串串在在屏屏幕幕上上显显示示出出来,缓冲区的字符串以来,缓冲区的字符串以“$”为结束标志为结束标志。格式:格式:BUFDBGOODBYE$MOVDX,OFFSETBUFMOVAH,9INT21H结果:显示结果:显示GOODBYE5.返回操作系统返回操作系统4 4CHCH号系统功能调用号系统功能调用格式:格式:MOVAH,4CHINT21H52例:利用例:利用DOSDOS系统功能调用实现简单人机对话。系统功能调用实现简单人机对话。DATASEGMENTBUFDB100DB?DB100DUP(?);定义键入缓冲区定义键入缓冲区MSGDBWHATISYOURNAME?$DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX53DISP:MOVDX,OFFSETMSGMOVAH,9;调用调用9号功能调用号功能调用INT21H;显示字符串显示字符串KELBD:MOVDX,OFFSETBUFMOVAH,0AH;调用调用0AH功能调用功能调用INT21H;接收键入的字符串接收键入的字符串MOVAH,4CHINT21H;返回返回DOSCODEENDSENDSTART545.6 5.6 汇编语言程序设计方法汇编语言程序设计方法5.6.1 5.6.1 汇编语言程序设计步骤汇编语言程序设计步骤1)分析问题分析问题2)建立数学模型建立数学模型3)确定算法确定算法4)绘制程序流程图绘制程序流程图5)5)内存空间分配内存空间分配6)编制程序与静态检查编制程序与静态检查7)7)程序调试程序调试555.6.2 5.6.2 汇编语言程序设计方法汇编语言程序设计方法1.1.简单程序设计简单程序设计例例:假假设设有有多多项项式式形形如如:f(X)=5X3+4X2-3X+2,要要求求编制程序计算自变量编制程序计算自变量X=5时函数时函数f(X)的值。的值。DATASEGMENTXDW5RESULTDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX分析:分析:f(X)=(5X+4)X3)X+2程序:程序:56MOVAX,5MULXADDAX,4MULXSUBAX,3MULXADDAX,2MOVRESULT,AXMOVAH,4CHINT21H CODEENDSENDSTART57(1 1)简单分支结构)简单分支结构有两种,相当于高级语言中的有两种,相当于高级语言中的IF-THENIF-THEN和和IF-THEN-ELSEIF-THEN-ELSE结构;结构;例:例:比比较两个无符号数的大小。两个无符号数的大小。(在(在A A和和B B单元各有一个单元各有一个8 8位位无符号数,要求比较这两个无符号数,并根据比较结果无符号数,要求比较这两个无符号数,并根据比较结果在屏幕上显示在屏幕上显示ABAB或或BABA(假设这两个数不相等)。假设这两个数不相等)。2.分支程序设计分支程序设计DATASEGMENTADB20HBDB92HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX58MOVAL,ACMPB,ALJABGAMOVDL,A MOVBL,BJMPDISPBGA:MOVDL,BMOVBL,ADISP:MOVAH,2INT21HMOVDL,INT21HMOVDL,BLINT21HMOVAH,4CHINT21HCODEENDSENDSTART59(2)(2)多分支程序设计多分支程序设计 多分支结构则相当于高级语言中的多分支结构则相当于高级语言中的DO-CASEDO-CASE结构。结构。603.3.循环程序设计循环程序设计循环程序的结构与组成循环程序的结构与组成循环的初始化部分循环的初始化部分循环工作部分循环工作部分循环控制部分循环控制部分循环结束部分循环结束部分相当于高相当于高级语言中的言中的 DO-UNTILDO-UNTIL结构结构 DO-WHILEDO-WHILE结构。结构。循环控制方法循环控制方法 计数法数法 条件控制法条件控制法 在在汇编语言程序言程序设计中常采用中常采用CXCX作作为循循环计数器数器 61例例:统计负数个数并显示。统计负数个数并显示。已已知知从从BUF单单元元开开始始存存有有20个个8位位带带符符号号数数,要要求求统统计计其其中中的的负负数数个个数数放放在在NEGA字字节节单单元元,并并显显示示在在CRT上(设负数个数在上(设负数个数在09之间)。之间)。DATASEGMENTBUFDB2,-1,56,-38,4,COUNTEQU20NEGADB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA62START:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFMOVDL,0;计数器清计数器清0MOVCX,COUNT;置循环次数置循环次数LP:MOVAL,SIANDAL,AL;置标志位置标志位JNSNEXT;SF=0(正数正数),转转NEXTINCDL;为负,计数器为负,计数器+1NEXT:INCSILOOPLPMOVNEGA,DL;存结果存结果ORDL,30H;转换成转换成ASCII码码MOVAH,2INT21H;显示显示63MOVAH,4CHINT21HCODEENDSENDSTART64例例:统统计计字字符符串串长长度度。已已知知在在内内存存中中从从STR单单元元开开始始放放有有一一串串字字符符,以以$作作为为结结束束标标志志,长长度度不不超超过过100字字节节,要要求求统计该字符串的长度,并存于统计该字符串的长度,并存于LEN单元。单元。DATASEGMENTSTRDBABCDJKLLHH$LENDB0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX65LEADI,STR;字符串首地址字符串首地址DIMOVAL,$;结束标志结束标志ALLP:CMPAL,DI;比较,是否为比较,是否为$JZSTOP;是是$(ZF=1),转转STOPINCLEN;不是,串长不是,串长+1INCDIJMPLPSTOP:MOVAH,4CHINT21HCODEENDSENDSTART665.6.3 5.6.3 程序设计举例程序设计举例例例1 1:多字多字节压缩型型十十进制数加法制数加法 (减法减法)已已知知有有两两个个多多字字节节的的压压缩缩型型十十进进制制数数分分别别存存于于从从A A和和B B单单元元开开始始的的数数据据区区中中,试试将将其其相相加加并并将将十十进进制制结结果果存存于于从从C C单单元元开开始始的的数数据据区区中中。设设压压缩缩型型十十进进制制数数长长度度为为1010个个字字节节,被被加加数数、加加数数和和结结果果的的低低字字节节均均存存于于低低地地址单元。址单元。67DATASEGMENTADB12H,38H,63H,BDB88H,27H,42H,CDB11DUP(?)(?)NEQU10DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETAMOVDI,OFFSETBMOVBX,OFFSETC68MOVCX,NCLCNEXT:MOVAL,SIADCAL,DIDAAMOVBX,ALINCSIINCDIINCBXLOOPNEXTMOVAL,00HADCAL,00HMOVBX,ALMOVAH,4CHINT21HCODEENDSENDSTART69例例2:已已知知从从A单单元元开开始始存存有有10个个字字节节的的压压缩缩BCD码码,要求编程将其转换为要求编程将其转换为ASCII码并显示在码并显示在CRT上。上。DATASEGMENTADB34H,68H,76H,NEQU$-A;A中存放的个数中存放的个数DATAENDSSTACKSEGMENTPARASTACKSTACKSTADB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK START:MOVAX,DATAMOVDS,AX70MOVAX,STACKMOVSS,AXMOVBX,OFFSETAMOV CX,N;置循环次数置循环次数LP:MOVAL,BXMOVDH,AL;保存次数保存次数PUSHCXMOV CL,4SHRAL,CL;右移右移4位位POPCXORAL,30H;将将BCD码的高位转成码的高位转成ASCII码码MOVDL,ALMOV AH,2INT21H显示高位的显示高位的BCD码码71ANDDH,0FHOR DH,30H;将将BCD码的低位转成码的低位转成ASCII码码MOVDL,DHINT21H;显示低位的显示低位的BCD码码MOVDL,INT21H;显示空格显示空格INCBXLOOPLPMOVAH,4CHINT21HCODEENDSENDSTART72例例3:将:将AL寄存器的内容以十六进制形式送屏幕寄存器的内容以十六进制形式送屏幕显示输出显示输出.73CODESEGMENTASSUMECS:CODESTART:MOVBL,ALMOVBH,ALMOVCH,2MOVCL,04HSHRBL,CLNEXT:CMPBL,09HJANEXT1ORBL,30HJMPNEXT2NEXT1:ADDBL,37HNEXT2:MOVDL,BLMOVAH,02HINT21HANDBH,0FHMOVBL,BHDECCHJNZNEXTMOVAH,4CHINT21HCODEENDSENDSTART74练习练习:编程将编程将AX寄存器中的寄存器中的16位二进制数中位二进制数中1的个数的个数放入放入DL寄存器中。寄存器中。75习题:习题:1.从从ARRAY开开始始的的单单元元中中存存有有20个个16位位无无符符号号数数,试试编一完整程序找出其中最大数并存入编一完整程序找出其中最大数并存入MAX单元单元.2.将将AX寄存器的内容送屏幕显示输出。寄存器的内容送屏幕显示输出。3.从从存存储储器器DATA1单单元元开开始始连连续续存存放放着着50个个组组合合BCD码码,要要求求将将它它们们转转换换成成ASCII码码,存存放放在在以以DATA2单单元元开开始始的的存存储储区区。高高位位BCD码码转转换换成成的的ASCII码码,放在地址较高的单元。,放在地址较高的单元。4.从从存存储储器器DATA1单单元元开开始始连连续续存存放放着着50个个组组合合BCD码码,要要求求将将它它们们转转换换成成ASCII码码,存存放放在在以以DATA1单单元元开开始始的的存存储储区区。高高位位BCD码码转转换换成成的的ASCII码码,放在地址较高的单元。,放在地址较高的单元。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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