汇编语言程序设计(6)课件_第1页
汇编语言程序设计(6)课件_第2页
汇编语言程序设计(6)课件_第3页
汇编语言程序设计(6)课件_第4页
汇编语言程序设计(6)课件_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第4 4章章 汇编语言程序设计汇编语言程序设计 汇编语言用指令汇编语言用指令助记符助记符来表示操作码和操作来表示操作码和操作数,用符号地址表示操作数地址,给程序编写带数,用符号地址表示操作数地址,给程序编写带来了很大方便。来了很大方便。 用汇编语言编写程序的主要用汇编语言编写程序的主要优点优点是程序设计是程序设计人员可以直接对硬件编程,程序效率高,执行速人员可以直接对硬件编程,程序效率高,执行速度快,目标代码短,占用存储空间少。度快,目标代码短,占用存储空间少。 4.1 汇编语言的基本语法汇编语言的基本语法(1) (1) 用编辑程序建立用编辑程序建立 .ASM.ASM源文件;源文件;(2)

2、(2) 用汇编程序把用汇编程序把 .ASM.ASM文件转汇编成文件转汇编成 .OBJ.OBJ文件;文件;(3) (3) 用链接程序把用链接程序把 .OBJ.OBJ文件连接成文件连接成.EXE.EXE文件;文件;(4) (4) 用用DOSDOS命令直接键入文件名就可执行该程序。命令直接键入文件名就可执行该程序。 常用的汇编程序有常用的汇编程序有MicrosoftMicrosoft公司推出的宏汇编程公司推出的宏汇编程MASMMASM和和BORLANDBORLAND公司推出的公司推出的TASMTASM。我们采用。我们采用QASM2.7QASM2.7版。版。4.1.1汇编程序的建立过程汇编程序的建立过

3、程编辑程序文件EXMP.ASMEDLINEWPSWORDEDIT汇编程序ASMMASMTASM文件EXMP.OBJ(EXMP.LST)(EXMP.CRF)连接程序LINK文件EXMP.EXE(EXMP.MAP)(EXMP.LIB)DEBUG出错出错出错4.1.1汇编程序的建立过程汇编程序的建立过程 为运行汇编语言程序,至少要在磁盘上提供以下为运行汇编语言程序,至少要在磁盘上提供以下文件:文件:(1) (1) 编辑程序,如编辑程序,如EDIT.EXEEDIT.EXE;(2) (2) 汇编程序,如汇编程序,如MASM.EXEMASM.EXE;(3) (3) 连接程序,如连接程序,如LINK.EXE

4、LINK.EXE;(4) (4) 调试程序,如调试程序,如DEBUG.COMDEBUG.COM。4.1.1汇编程序的建立过程汇编程序的建立过程【例】将变量【例】将变量VAR1和和VAR2相减,并将结果送入变量相减,并将结果送入变量RESULT。DATA SEGMENT ;定义数据段定义数据段 VAR1 DW 7654H ;定义变量定义变量VAR1初值为初值为7654H VAR2 DW 2345H ;定义变量定义变量VAR2初值为初值为2345H RESULT DW ? ;定义变量定义变量RESULTDATA ENDS ;数据段结束数据段结束CODE SEGMENT ;定义代码段定义代码段 AS

5、SUME CS: CODE , DS: DATA ;为各个逻辑段指定段寄存器为各个逻辑段指定段寄存器4.1.2 汇编语言程序格式汇编语言程序格式START: MOV AX, DATA ;初始化数据段寄存器初始化数据段寄存器DS MOV DS, AX MOV AX, VAR1 ;变量变量VAR1送送AX SUB AX, VAR2 ;AX-VAR2结果送结果送AX MOV RESULT, AX ;结果送变量结果送变量RESULT MOV AH, 4CH ;调用调用4CH号号DOS中断中断 INT 21H ;返回操作系统返回操作系统CODE ENDS ;代码段结束代码段结束 END START ;汇

6、编结束汇编结束4.1.2 汇编语言程序格式汇编语言程序格式 物理地址物理地址是由是由段地址段地址和和偏移地偏移地址组合而成的,汇编址组合而成的,汇编程序在把源程序转换为目标程序时,必须程序在把源程序转换为目标程序时,必须确定标号和变确定标号和变量量( (代码段和数据段的符号地址代码段和数据段的符号地址) )的偏移地址的偏移地址,并且需要,并且需要把有关信息通过目标模块传送给连接程序,以便连接程把有关信息通过目标模块传送给连接程序,以便连接程序把不同的段和模块连接在一起,形成一个可执行程序。序把不同的段和模块连接在一起,形成一个可执行程序。为此,需要用段定义伪操作。为此,需要用段定义伪操作。4.

7、1.2 汇编语言程序格式汇编语言程序格式SEGMENT_NAMESEGMENT_NAMESEGMENTSEGMENTSEGMENT_NAMESEGMENT_NAMEENDSENDS 其中,删节号部分对于数据段、附加段和堆栈段其中,删节号部分对于数据段、附加段和堆栈段来说,一般是存储单元的定义、分配等伪操作;对于来说,一般是存储单元的定义、分配等伪操作;对于代码段则是指令及伪操作。代码段则是指令及伪操作。4.1.2 汇编语言程序格式汇编语言程序格式 还必须明确段和段寄存器的关系,可用还必须明确段和段寄存器的关系,可用ASSUMEASSUME伪伪操作来实现,其格式为操作来实现,其格式为 ASSUM

8、E ASSUME :段名,:段名,. ASSUME ASSUME :NOTHINGNOTHING其中,段寄存器名必须是其中,段寄存器名必须是CSCS、DSDS、ESES和和SSSS中的一个,中的一个,而段名则必须是由而段名则必须是由SEGMENTSEGMENT定义的段中的段名。定义的段中的段名。ASSUME ASSUME NOTHINGNOTHING则可取消前面由则可取消前面由ASSUMEASSUME所指定的段寄存器。所指定的段寄存器。4.1.2 汇编语言程序格式汇编语言程序格式 较为完整的汇编源程序段定义。较为完整的汇编源程序段定义。DATE_SEG1 SEGMENTDATE_SEG1 SE

9、GMENT;定义数据段;定义数据段DATE_SEG1 ENDSDATE_SEG1 ENDSDATA_SEG2 SEGMENTDATA_SEG2 SEGMENT;定义数据附加段;定义数据附加段 DATA_SEG2 ENDSDATA_SEG2 ENDSCODE_SEGCODE_SEG SEGMENT SEGMENT;定义代码段;定义代码段 ASSUME CS:CODE_SEG,DS:DATA_SEG1,ES:DATA_SEG2ASSUME CS:CODE_SEG,DS:DATA_SEG1,ES:DATA_SEG2START:START:;开始执行的入口地址;开始执行的入口地址4.1.2 汇编语言程

10、序格式汇编语言程序格式;设置设置DSDS寄存器为当前数据段寄存器为当前数据段MOVMOVAXAX,DATA_SEG1DATA_SEG1 ;将数据段地址赋予;将数据段地址赋予DSDSMOVMOVDSDS,AXAX;设置;设置ESES寄存器为当前附加段寄存器为当前附加段MOVMOVAXAX,DATA_SEG2DATA_SEG2 ;将附加数据段地址赋予;将附加数据段地址赋予ESESMOVMOVESES,AXAXCODE_SEGCODE_SEGENDSENDS ;代码段定义结束;代码段定义结束ENDENDSTARTSTART ;源程序结束;源程序结束4.1.2 汇编语言程序格式汇编语言程序格式 由于由

11、于ASSUMEASSUME伪操作只是伪操作只是指定指定某个段分配给哪一个段某个段分配给哪一个段寄存器,它并不能把段地址寄存器,它并不能把段地址装入装入段寄存器中,要把段段寄存器中,要把段地址装入段寄存器中,就地址装入段寄存器中,就必须在代码段中有对段地址必须在代码段中有对段地址装入相应的段寄存器中的指令装入相应的段寄存器中的指令。可用两条。可用两条MOVMOV指令完成指令完成这一操作。但是,代码段这一操作。但是,代码段CSCS不需要这样做,这一操作不需要这样做,这一操作是在是在程序初始化程序初始化时完成的。时完成的。4.1.2 汇编语言程序格式汇编语言程序格式 汇编语言源程序由若干条语句组成,

12、语句分为如汇编语言源程序由若干条语句组成,语句分为如下两类。下两类。 1) 1) 指令语句指令语句 指令语句能完成一定的操作功能,能够翻译成机指令语句能完成一定的操作功能,能够翻译成机器代码的语句。器代码的语句。 指令语句的格式为:指令语句的格式为: 【标号:】【标号:】 指令助记符指令助记符 【操作数】【操作数】 【;注释】【;注释】.3汇编语言程序的语句类型汇编语言程序的语句类型 2) 2) 伪指令语句伪指令语句 伪指令语句也叫指示性语句,它只是为汇编程序在伪指令语句也叫指示性语句,它只是为汇编程序在翻译汇编语言源程序时提供有关信息,并不翻译成机器翻译汇编语言源程序时提供有

13、关信息,并不翻译成机器代码,代码,所以也不占用执行时间。所以也不占用执行时间。 伪指令的格式为:伪指令的格式为: 【符号名】【符号名】 伪指令定义符伪指令定义符 【参数表】【参数表】 【;注释】【;注释】 .3汇编语言程序的语句类型汇编语言程序的语句类型 4.2.1 4.2.1 常量常量 1常量的类型常量的类型 (1)数值型常量)数值型常量 二进制数:以字母二进制数:以字母B结尾,例:结尾,例:10101001B。 十进制数:以字母十进制数:以字母D结尾结尾(或省略或省略),例:,例:5678。 十六进制数:以字母十六进制数:以字母H结尾,由结尾,由09,AF所组成,以字母所组

14、成,以字母AF开头的十六进制数,须在字开头的十六进制数,须在字母前加上数字母前加上数字0。4.2 4.2 伪指令伪指令 (2)字符串常量)字符串常量 字符串常量是用单引号或双引号括起来的一个字符串常量是用单引号或双引号括起来的一个或多个字符,如或多个字符,如ABC或或“ABC”,字符在机器,字符在机器内是以内是以ASCII存放。字母大、小写在计算机内存放存放。字母大、小写在计算机内存放的是不同的数值,例如,的是不同的数值,例如,B在内存中为在内存中为42H,b在内存中为在内存中为62H。 4.2.1 常量常量 2常量或表达式赋值伪指令常量或表达式赋值伪指令 可以用赋值伪指令给常量或表达式赋值,

15、程序可以用赋值伪指令给常量或表达式赋值,程序中凡是需要用到的地方就可以用这个符号名来代替中凡是需要用到的地方就可以用这个符号名来代替 (1)等值伪指令)等值伪指令(EQU) 格式:符号名格式:符号名 EQU 表达式表达式 功能:将表达式的值赋给符号名。功能:将表达式的值赋给符号名。 SUM EOU 34H ;将常数;将常数34H赋给赋给 SUM NUM EQU EBP+31H ;EBP+3赋以赋以NUM 4.2.1 常量常量 (2)等号伪指令)等号伪指令 格式:符号名表达式格式:符号名表达式 功能:将表达式的值赋给符号名。功能:将表达式的值赋给符号名。 MATH=20H ENG=3 ENG=M

16、ATH+ENG+10H 等号语句与等号语句与EQU语句有同样的功能,区别在于在语句有同样的功能,区别在于在同一源程序中,同一源程序中,EQU语句不允许对符号重复定义,语句不允许对符号重复定义,而等号语句允许对符号重复定义。而等号语句允许对符号重复定义。4.2.1 常量常量 1. 变量的属性变量的属性 段属性(段属性(SEG):变量所在段的段基址,它通常:变量所在段的段基址,它通常放在放在DS、ES、SS段寄存器中。段寄存器中。 偏移属性偏移属性(OFFSET):从变量所在段的起始地址:从变量所在段的起始地址到定义变量位置之间的字节数。到定义变量位置之间的字节数。 类型属性类型属性(TYPE):

17、指变量占用存储单元的字节指变量占用存储单元的字节数。字节变量类型为数。字节变量类型为BYTE,字变量类型为,字变量类型为WORD,双字变量类型为双字变量类型为DWORD。4.2.2 变量变量 2. 变量定义伪指令变量定义伪指令 变量定义伪指令是为操作数分配存储单元,并给变量定义伪指令是为操作数分配存储单元,并给这个存储单元取一个名字,即变量名,同时为变量赋这个存储单元取一个名字,即变量名,同时为变量赋以初值。以初值。 【变量名】【变量名】 DB/DW/DD/DF/DQ/DT 表达式表达式l, 功能:为变量分配存储单元,表达式可以是数值功能:为变量分配存储单元,表达式可以是数值表达式、地址表达式

18、、字符串、表达式、地址表达式、字符串、?、用逗号隔开的上述、用逗号隔开的上述各项或各项或DUP(表达式)。(表达式)。4.2.2 变量变量 (1)数值变量定义语句)数值变量定义语句 NUM DB 100,45H ;将;将64H,45H赋给字节变量赋给字节变量NUM SUM DW 3456H ;将;将3456H赋给字变量赋给字变量SUM TOTAL DD 22334455H ;将;将22334455H赋给双字变量赋给双字变量 TOTAL 4.2.2 变量变量4.2.2 变量变量 (2)字符串变量定义语句)字符串变量定义语句 定义字符串变量可以用定义字符串变量可以用DB伪指令,它为字符串伪指令,它

19、为字符串中的每个字符分配一个字节的存储单元,在存储单元中的每个字符分配一个字节的存储单元,在存储单元中存放的是字符的中存放的是字符的ASCII码值。码值。 ABC DB ABCDEF ;将字符串赋给变量;将字符串赋给变量ABC DATE DBW BA,DC ;将两个字符串赋给变量;将两个字符串赋给变量DATE 4.2.2 变量变量4.2.2 变量变量 (3)预分配存储单元)预分配存储单元 “?” 语句可以为数据项分配存储单元,但是存储语句可以为数据项分配存储单元,但是存储单元中不预置确定的值,所以常用来预留存储单元。单元中不预置确定的值,所以常用来预留存储单元。 BVAR DB ? ;预分配;

20、预分配1个字节单元个字节单元 DVAR DW ?,?,? ;预分配;预分配3个字单元个字单元4.2.2 变量变量 (4)重复数据定义)重复数据定义 DUP语句可以重复进行数据定义操作,用带语句可以重复进行数据定义操作,用带DUP的表达式的表达式可以为若干重复数据分配存储单元,可以为若干重复数据分配存储单元,DUP表达式也可以嵌套。表达式也可以嵌套。 D1 DB 3 DUP(0) ;定义;定义D1为为3个全为个全为0的字节单元的字节单元 D2 DW l0 DUP(0ABCDH) ;定义;定义D2为为10个全为个全为0ABCDH的字单元的字单元 D3 DD 2 DUP (20H, 2 DUP(10

21、H) ;定义;定义D3为为20H,10H,10H, 20H,10H,10H4.2.2 变量变量 标号是可执行语句的标号是可执行语句的符号地址符号地址,用来表示指令在,用来表示指令在存储器中的位置。经常在转移指令中目标操作数字段存储器中的位置。经常在转移指令中目标操作数字段出现,用以表示转移指令的出现,用以表示转移指令的目标地址目标地址。标号之后必需。标号之后必需有一个冒号有一个冒号“:” 。 1标号的属性标号的属性 (1)段属性()段属性(SEG):):指标号所在段的段基址,指标号所在段的段基址,它通常放在它通常放在DS、ES、SS段寄存器中。段寄存器中。 4.2.3 标号标号 (2)偏移属性

22、()偏移属性(OFFSET):指标号所在段中的:指标号所在段中的偏移地址,即标号所在的地址与段基址之间的字节数。偏移地址,即标号所在的地址与段基址之间的字节数。 (3)类型属性或距离属性()类型属性或距离属性(TYPE):):用来说明用来说明该标号是段内引用还是段间引用。段内引用时为该标号是段内引用还是段间引用。段内引用时为NEAR属性,指针占两个字节;段间引用时为属性,指针占两个字节;段间引用时为FAR属属性,指针占性,指针占4个字节。个字节。4.2.3 标号标号 2定义类型属性伪指令定义类型属性伪指令LABEL 语句格式:语句格式: 变量名或标号变量名或标号 LABEL 类型类型 (1)与

23、变量连用)与变量连用,给下一条语句中的变量取,给下一条语句中的变量取个个新的名字,并可重新定义它的类型,其类型可以是新的名字,并可重新定义它的类型,其类型可以是BYTE、WORD或或DWORD 。 (2)与标号连用)与标号连用 ,给指令地址定义一个新的标,给指令地址定义一个新的标号,并可改变其类型属性号,并可改变其类型属性NEAR或或FAR 。4.2.3 标号标号 分为数值表达式和地址表达式两种类型。表达式分为数值表达式和地址表达式两种类型。表达式的运算是在汇编时由汇编程序完成的,表达式的运算的运算是在汇编时由汇编程序完成的,表达式的运算结果作为操作数参加指令规定的操作。结果作为操作数参加指令

24、规定的操作。 1. 数值表达式数值表达式 MOV AX, 2+10H 指令中源操作数是一个数值表达式,其运算结果指令中源操作数是一个数值表达式,其运算结果是个数值,指令执行后是个数值,指令执行后AX中存放的是该表达式的值。中存放的是该表达式的值。4.2.4 表达式表达式 2. 地址表达式地址表达式 地址表达式的结果是一个存储单元的地址。当这地址表达式的结果是一个存储单元的地址。当这个地址中存放的是数据时,称为变量;当这个地址中个地址中存放的是数据时,称为变量;当这个地址中存放的是指令时,则称为标号。例如:存放的是指令时,则称为标号。例如: MOV AX,ES:BX+1001H 指令中源操作数是

25、地址表达式,其结果是一个存指令中源操作数是地址表达式,其结果是一个存储单元的地址。储单元的地址。4.2.4 表达式表达式 1. 算术运算符算术运算符 算术运算符:、算术运算符:、*、等,参加运算的数、等,参加运算的数和运算的结果均为整数,除法运算的结果取商的整数和运算的结果均为整数,除法运算的结果取商的整数部分。部分。 2. 逻辑运算符逻辑运算符 逻辑运算符:逻辑运算符:AND、OR、XOR和和NOT,用于对,用于对常量进行按位操作。常量进行按位操作。 4.2.5 运算符运算符 注意,注意,逻辑逻辑运算符运算符与与逻辑指令逻辑指令在形式上是一样的,在形式上是一样的,但它们在语句中的但它们在语句

26、中的位置不同位置不同。表达式中的逻辑运算符。表达式中的逻辑运算符是只出现在指令的操作数部分,是由汇编程序汇编时是只出现在指令的操作数部分,是由汇编程序汇编时完成运算;而逻辑指令是出现在指令的操作码部分,完成运算;而逻辑指令是出现在指令的操作码部分,其运算是在指令执行时进行的。其运算是在指令执行时进行的。 OR AL,BH OR 80H MOV AL,CL AND 10000000B 4.2.5 运算符运算符 3. 关系运算符关系运算符 包括包括GT(大于)、(大于)、GE(大于等于)、(大于等于)、LT(小(小于)、于)、LE(小于等于)、(小于等于)、EQ(等于)和(等于)和NE(不等(不等

27、于)于)6种。对两个操作数进行比较运算,结果为逻辑种。对两个操作数进行比较运算,结果为逻辑值。值。 MOV AX, 11 EQ 1011B ;111011B为真,为真,(AX)0FFFFH MOV BX, 10H EQ 32 ;20H大于大于32为假,为假,(BX)04.2.5 运算符运算符 4. 修改属性运算符修改属性运算符PTR 修改属性运算符修改属性运算符PTR可以临时改变变量或标号原可以临时改变变量或标号原有的类型属性并赋予其新的类型属性。有的类型属性并赋予其新的类型属性。 DATA DB 10H,11H,12H,13H MOV EAX, DWORD PTR DATA ;修改;修改DA

28、TA为双字型变量为双字型变量 4.2.5 运算符运算符 5. 取值运算符取值运算符 取值运算符包括取值运算符包括SEG(返回段地址)、(返回段地址)、OFFSET(返回偏移地址)、(返回偏移地址)、TYPE(返回类型字节数)、(返回类型字节数)、LENGTH(返回变量单元数)和(返回变量单元数)和SIZE(返回变量总(返回变量总字节数)。它们不改变原操作数的属性,只是取操作字节数)。它们不改变原操作数的属性,只是取操作数的某一属性,返回的结果是一个数值数的某一属性,返回的结果是一个数值。4.2.5 运算符运算符 (1)SEG运算符运算符 SEG运算符加在变量名或标号之前,返回的数值运算符加在变

29、量名或标号之前,返回的数值是该变量或标号所在段的段基址。例如;是该变量或标号所在段的段基址。例如; MOV AX,SEG VAR 如果变量如果变量VAR所在段的段基址为所在段的段基址为1000H,则该指,则该指令执行后令执行后AX的内容为的内容为1000H。 4.2.5 运算符运算符 (2)OFFSET运算符运算符 OFFSET运算符加在变量名或标号之前,返回的运算符加在变量名或标号之前,返回的数值是该变量或标号的偏移基址。例如:数值是该变量或标号的偏移基址。例如: MOV BX,OFFSET VAR 如果变量如果变量VAR在段内的偏移地址为在段内的偏移地址为2000H,则该,则该指令执行后指

30、令执行后BX的内容为的内容为2000H。4.2.5 运算符运算符 (3)TYPE运算符运算符 TYPE运算符加在变量名之前,返回的数值是该运算符加在变量名之前,返回的数值是该变量的类型字节数,变量的类型字节数,DB为为1,DW为为2。当。当TYPE加在加在标号之前,返回的数值是这个标号的类型属件值,标号之前,返回的数值是这个标号的类型属件值, NEAR为为1,FAR为为2。 A1 DB 1,2,3,4,5,6,7,8 A2 DW l234H,5678H SF LABEL FAR SN: MOV BL, TYPE A1 ;BL=1 MOV BH, TYPE A2 ;BH=2 MOV DH, TY

31、PE SF ;DH=2 4.2.5 运算符运算符 (4)LENGTH运算符运算符 加在变量名之前,返回的数值是变量中所定义的加在变量名之前,返回的数值是变量中所定义的元素个数。如果变量是用元素个数。如果变量是用DUP说明的,则返回说明的,则返回DUP前前面的数值;如果没有面的数值;如果没有DUP说明,则返回的值总是说明,则返回的值总是1。 B1 DB 100 DUP(0) B2 DW 4321H, 3859H MOV BX,LENGTH B1 ;等效;等效MOV BX,100 MOV AX,LENGTH B2 ;等效;等效MOV AX,14.2.5 运算符运算符 (5)SIZE运算符运算符 该

32、运算符加在变量名之前,返回的数值是该变该运算符加在变量名之前,返回的数值是该变量所分配的字节总数。它等于量所分配的字节总数。它等于LEGTH和和TYPE两个两个运算符返回的乘积。例如,对于上例中所定义的变运算符返回的乘积。例如,对于上例中所定义的变量量B1、B2的返回值如下所示。的返回值如下所示。 MOV BX, SIZE B1 ;(BX)=100H MOV CX, SIZE B2 ;(CX)=24.2.5 运算符运算符 内存是分段管理的,程序的不同部分应放在特定内存是分段管理的,程序的不同部分应放在特定的段中。段定义伪指令就是为程序的分段而设置的。的段中。段定义伪指令就是为程序的分段而设置的

33、。 段名段名 SEGMENT 段名段名 ENDS 任何逻辑段总是从任何逻辑段总是从SEGMNT语句开始,以语句开始,以ENDS语句结束,成对出现。语句结束,成对出现。 4.2.6 段定义伪指令段定义伪指令 ASSUME 段寄存器名:段名段寄存器名:段名,段寄存器名:,段寄存器名:段名,段名, 该语句通知汇编程序源程序中定义的段由哪个段该语句通知汇编程序源程序中定义的段由哪个段寄存器寻址。寄存器寻址。 ASSUME语句是非执行语句,要求放语句是非执行语句,要求放在代码段内的段定义语句之后在代码段内的段定义语句之后。4.2.7 段寄存器指派伪指令段寄存器指派伪指令 ASSUME语句仅仅约定了对逻辑

34、段进行寻址操语句仅仅约定了对逻辑段进行寻址操作时使用哪个段寄存器,而段寄存器的初值还必须在作时使用哪个段寄存器,而段寄存器的初值还必须在程序中用指令设置。程序中用指令设置。 MOV AX,DATA MOV DS,AX 对对CS的赋值是由操作系统系统自动完成的,程的赋值是由操作系统系统自动完成的,程序员不用设置。序员不用设置。4.2.7 段寄存器指派伪指令段寄存器指派伪指令 ORG 表达式表达式 ORG伪指令用来指定该语句之后的程序或数据开伪指令用来指定该语句之后的程序或数据开始存放的偏移地址。始存放的偏移地址。 ORG 2000H VAR1 DB 2,3,45H ;从偏移地址;从偏移地址200

35、0H开始存放变量开始存放变量VAR1 4.2.8 移动地址指针伪指令移动地址指针伪指令 在汇编语言中,可以用在汇编语言中,可以用$表示当前位置计数器的值。表示当前位置计数器的值。 DATA SEGMENT STR DB GOOD COUNT EQU $ STR DATA ENDS $表示当前的偏移地址,变量名表示当前的偏移地址,变量名STR表示上一条语句中变表示上一条语句中变量量STR的偏移地址,的偏移地址,$STR表示两个偏移地址之差,是以变表示两个偏移地址之差,是以变量量STR为首地址的连续字节数,即为首地址的连续字节数,即STR为首地址的字符个数。为首地址的字符个数。4.2.9 当前位置

36、计数器当前位置计数器$ END伪指令作为汇编语言源程序的结束语句,伪指令作为汇编语言源程序的结束语句,一般放在源程序的最后一行。一个程序模块只允许有一般放在源程序的最后一行。一个程序模块只允许有一个一个END语句。语句。 格式:格式: END 标号标号4.2.10 程序结束伪指令程序结束伪指令END 为方便程序员编写输入为方便程序员编写输入/输出程序,系统提供了两组输出程序,系统提供了两组功能程序。一组固化在功能程序。一组固化在BIOS内,由几十个内部子程序内,由几十个内部子程序组成,它们能完成对组成,它们能完成对I/O设备、文件、磁盘等的管理设备、文件、磁盘等的管理和操作。另一组是操作系统和

37、操作。另一组是操作系统DOS为用户提供的使用输为用户提供的使用输入输出设备的系统资源,它不仅使用简单,而且可入输出设备的系统资源,它不仅使用简单,而且可以确保所开发的软件在同一操作系统下的兼容性。以确保所开发的软件在同一操作系统下的兼容性。4.3 4.3 操作系统资源的使用操作系统资源的使用 1. 1. 系统功能调用方法系统功能调用方法 系统功能调用系统功能调用INT 21HINT 21H是一个有近是一个有近9090个子功能的中个子功能的中断服务程序,这些子功能的编号称为功能号。断服务程序,这些子功能的编号称为功能号。INT 21HINT 21H的功能大致可以分为四个方面:设备管理、目录管理、

38、的功能大致可以分为四个方面:设备管理、目录管理、文件管理和其他。文件管理和其他。设置功能号n(AH)设置入口参数执行INT 21H分析出口参数4.3.1 DOS系统功能调用系统功能调用 2.2.基本基本I/OI/O功能调用功能调用 (1)单个字符键盘输入()单个字符键盘输入(1、7、8号功能)号功能) 执行执行1号功能调用时,系统将扫描键盘,等待用户号功能调用时,系统将扫描键盘,等待用户按键,一但有键按下,就将键值按键,一但有键按下,就将键值(相应字符的相应字符的ASCII码值码值)读入,先检查是否是读入,先检查是否是键,若是,则退出键,若是,则退出命令执行;否则,将键值送入命令执行;否则,将

39、键值送入AL寄存器,同时将这个字寄存器,同时将这个字符显示在屏幕上。符显示在屏幕上。4.3.1 DOS系统功能调用系统功能调用 MOV AH,1 INT 21H AH8与与AH=1功能类同,只是不在屏幕上显示输入功能类同,只是不在屏幕上显示输入的字符:而的字符:而AH=7 ,则只将输入字符的,则只将输入字符的ASCII码送入码送入AL,不显示,也不对字符做检查是否是不显示,也不对字符做检查是否是键。键。 4.3.1 DOS系统功能调用系统功能调用 (2)单个字符输出()单个字符输出(2号功能)号功能) 执行执行2号功能调用时,要求将要显示字符的号功能调用时,要求将要显示字符的ASCII码(入口

40、参数)送给寄存器码(入口参数)送给寄存器DL,显示时光标跟随字符移,显示时光标跟随字符移动。并检查是否是动。并检查是否是,若是,则退出命令。,若是,则退出命令。 MOV DL, “:” MOV AH, 2 INT 21H 上述代码实现将字符上述代码实现将字符“:”送入屏幕显示的功能。送入屏幕显示的功能。4.3.1 DOS系统功能调用系统功能调用 (3)输出字符串()输出字符串(9号功能)号功能) 执行执行9号功能调用时,要求号功能调用时,要求DS:DX必须指向内存中一个以必须指向内存中一个以“$”作为结束标志的字符串(入口参数)。作为结束标志的字符串(入口参数)。 BUF DB HOW DO

41、YOU DO ?$ MOV DX, OFFSET BUF MOV AH, 9 INT 21H 如果希望光标能自功换行,那么可在字符串结束字符如果希望光标能自功换行,那么可在字符串结束字符$之前之前加上回车和换行的加上回车和换行的ASCII码(码(0DH,0AH)。)。4.3.1 DOS系统功能调用系统功能调用 (4)字符串输入()字符串输入(10号功能)号功能) 10号功能调用的功能是从键盘接收字符串并送到用号功能调用的功能是从键盘接收字符串并送到用户指定的输入缓冲区中,它要求户指定的输入缓冲区中,它要求DS:DX必须指向内存必须指向内存中一个将要存放字符串的缓冲区的首地址。中一个将要存放字符

42、串的缓冲区的首地址。 BUF DB 30, ?, 30 DUP(?) MOV DX, OFFSET BUF MOV AH, 0AH INT 21H4.3.1 DOS系统功能调用系统功能调用 (5)程序结束返回操作系统()程序结束返回操作系统(4C号功能)号功能) 执行执行4C号功能调用时,将使程序结束并返回号功能调用时,将使程序结束并返回操作系统,一般在程序结束处,编写指令:操作系统,一般在程序结束处,编写指令: MOV AH,4CH INT 21H4.3.1 DOS系统功能调用系统功能调用 BIOS(Basic Input/Output System)BIOS(Basic Input/Out

43、put System)是是IBM-PCIBM-PC机机的监控程序,它固化在微型机主板的的监控程序,它固化在微型机主板的ROMROM中,它的内容中,它的内容主要有系统测试程序主要有系统测试程序(POST)(POST)、初始化引导程序、初始化引导程序(BOOT)(BOOT)、I/OI/O设备的基本驱动程序和许多常用程序模块,它们一设备的基本驱动程序和许多常用程序模块,它们一般以中断服务程序的形式存在。般以中断服务程序的形式存在。4.3.2 BIOS系统功能调用系统功能调用高级语言磁盘操作系统(DOS)其他操作系统高级语言用户程序基本输入/输出系统(BIOS)IBM-PC机硬件系统4.3.2 BIO

44、S系统功能调用系统功能调用 由图可见,由图可见,BIOSBIOS程序直接建立在硬件基础上,磁盘操作系程序直接建立在硬件基础上,磁盘操作系统统(DOS)(DOS)和其他操作系统建立在和其他操作系统建立在BIOSBIOS基础上,各种高级语言则建基础上,各种高级语言则建立在操作系统基础上。用户程序可以使用高级语言,也可以调立在操作系统基础上。用户程序可以使用高级语言,也可以调用用DOSDOS或其他操作系统,还可以调用或其他操作系统,还可以调用BIOSBIOS,甚至直接指挥硬件设,甚至直接指挥硬件设备。备。4.3.2 BIOS系统功能调用系统功能调用 应用程序调用应用程序调用DOSDOS提供的系统功能

45、,完成输入提供的系统功能,完成输入/ /输输出或其他操作,用户可以少考虑硬件,实现起来容易。出或其他操作,用户可以少考虑硬件,实现起来容易。优点是程序的效率高,缺点是需要程序员对硬件性能优点是程序的效率高,缺点是需要程序员对硬件性能有较深的了解,编程复杂,所以一般不直接对硬件编有较深的了解,编程复杂,所以一般不直接对硬件编程。程。 4.3.2 BIOS系统功能调用系统功能调用 BIOSBIOS中断程序处于中断程序处于DOSDOS功能调用和硬件环境之间,功能调用和硬件环境之间,和和DOSDOS功能调用相比,其优点是效率高,缺点是编程相功能调用相比,其优点是效率高,缺点是编程相对复杂;和直接对硬件

46、编程相比,优点是实现相对容对复杂;和直接对硬件编程相比,优点是实现相对容易,缺点是效率相对低。易,缺点是效率相对低。 (1) 有些功能有些功能DOS没有提供,但没有提供,但BIOS提供了;提供了; (2) 有些场合无法使用有些场合无法使用DOS功能调用;功能调用; (3) 其他原因。其他原因。4.3.2 BIOS系统功能调用系统功能调用4.4 汇编程序设计汇编程序设计 程序是计算机命令(语句)的有序组合,程序是计算机命令(语句)的有序组合,这些语句的组合主要有四大结构:这些语句的组合主要有四大结构:顺序结构、顺序结构、分支结构、循环结构和子程序结构分支结构、循环结构和子程序结构。下面分别。下面

47、分别加以说明。加以说明。 顺序结构的程序是一种最简单的程序,是没顺序结构的程序是一种最简单的程序,是没有分支、没有循环的直线运行的程序。实际上,程有分支、没有循环的直线运行的程序。实际上,程序中大多数代码段的指令都是顺序执行的,即使是序中大多数代码段的指令都是顺序执行的,即使是循环程序和分支程序其主体部分也是顺序执行的。循环程序和分支程序其主体部分也是顺序执行的。顺序结构作为完整的程序很少见,一般作为程序的顺序结构作为完整的程序很少见,一般作为程序的部分使用。部分使用。4.4.1 顺序程序设计顺序程序设计 例例4-1 假设假设x、y为单字节正为单字节正整数,编程计算整数,编程计算 Z=(x23

48、y) / 2。 结果结果Z用两个字节来存放。用两个字节来存放。 根据题意,只要顺序的计算根据题意,只要顺序的计算出出x2、3y和和(x23y) / 2便便可。可。4.4.1 顺序程序设计顺序程序设计DATA SEGMENT X DB 25 Y DB 32 Z DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX MOV AL, X MUL AL ;求求X2 4.4.1 顺序程序设计顺序程序设计 MOV BL, Y ADD BL, BL ;Y+Y ADD BL, Y ;Y+Y+Y SUB A

49、X, BX ;X23Y SHR AX, 1 ;(X23Y)/ 2 MOV Z, AX ;结果送结果送Z MOV AH, 4CH ;返回操作系统返回操作系统 INT 21HCODE ENDS END START ;汇编结束汇编结束4.4.1 顺序程序设计顺序程序设计 例例4-2 用查表的方法将一位十六进制数转换成与用查表的方法将一位十六进制数转换成与它相应的它相应的ASCII码。码。 使用查表的方法,要建立一个表使用查表的方法,要建立一个表TABLE,在,在表中按照十六进制数从小到大的顺序放入它们对表中按照十六进制数从小到大的顺序放入它们对应的应的ASCII码值。然后再利用查表指令码值。然后再利

50、用查表指令XLAT实现。实现。编制的源程序如下:编制的源程序如下: STACK1 SEGMENT STACK DW 20H DUP(0) ;建立堆栈段建立堆栈段 STACK1 ENDS4.4.1 顺序程序设计顺序程序设计DATA SEGMENT TABLES DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H HEX DB 04H ;假定要查的十六进制数为假定要查的十六进制数为4 ASCI DB ? ;存放查表的结果存放查表的结果DATA ENDSCOSEG SEGMENT ASSUME CS:COSEG,

51、 DS:DATA, SS:STACK14.4.1 顺序程序设计顺序程序设计BEING: MOV AX, DATA MOV DS, AX MOV BX, OFFSET TABLES MOV AL, HEX ;表内位移量送表内位移量送AL XLAT ;查表查表 MOV ASCI,AL ;结果送结果送ASCI MOV DL, AL MOV AH, 2 ;调用调用DOS中断中断2号号 INT 21H MOV AH, 4CH ;返回操作系统返回操作系统 INT 21HCOSEG ENDS END BEING4.4.1 顺序程序设计顺序程序设计4.4.2 分支程序设计分支程序设计 分支程序利用条件转移指令

52、对运算结果的状分支程序利用条件转移指令对运算结果的状态标志进行态标志进行判断判断,以实现,以实现转移转移功能。实现分支的功能。实现分支的要素有两个:要素有两个: (1)使用能影响状态标志的指令,如算术逻辑指)使用能影响状态标志的指令,如算术逻辑指令、移位指令和位测试指令等,将状态标志设置令、移位指令和位测试指令等,将状态标志设置为能正确反映条件成立与否的状态。为能正确反映条件成立与否的状态。 (2)使用条件转移指令,对状态位进行测试判断,)使用条件转移指令,对状态位进行测试判断,确定程序如何转移,形成分支。确定程序如何转移,形成分支。4.4.2 分支程序设计分支程序设计 例例4-3 奇校验程序

53、奇校验程序 标准标准ASCII码的最高位没有使用,可以用作码的最高位没有使用,可以用作传输的校验位。如果使包含校验位在内的数据中传输的校验位。如果使包含校验位在内的数据中“1”的个数恒定为奇数,就是奇校验。程序首先的个数恒定为奇数,就是奇校验。程序首先通过键盘输入一个字符,如果字符的通过键盘输入一个字符,如果字符的ASCII码中码中“1”的个数为奇数,则令最高位为的个数为奇数,则令最高位为“0”,否则令,否则令最高位为最高位为“1”。程序如下:。程序如下:4.4.2 分支程序设计分支程序设计CODE SEGMENT ;定义代码段,此题没有数据段定义代码段,此题没有数据段 ASSUME CS:

54、CODESTART: MOV AH, 1 INT 21H ;键盘输入,键盘输入, AL输入字符的输入字符的ASCII码码 AND AL, 7FH ;最高位置最高位置“0”、其他位不变、其他位不变 ;同时标志同时标志PF反映反映“1”的个数的个数 JNP NEXT ;个数为奇数,不需处理,转移个数为奇数,不需处理,转移 OR AL, 80H ;个数为偶数,高位置个数为偶数,高位置“1”、其他位不、其他位不变变 NEXT: MOV AH, 4CH ;返回操作系统返回操作系统 INT 21H CODE ENDS END START4.4.2 分支程序设计分支程序设计 例例4-4 编程计算下列函数的值

55、,编程计算下列函数的值,X取值范围:取值范围:128127。1 (X0)0 (X=0)1 (X=0跳转到跳转到4.4.2 分支程序设计分支程序设计 MOV AL, 0FFH ;X=0的程序段的程序段BIGER: JE EQUL ;X=0跳转到跳转到EQUL MOV AL, 1 ;X0,1送送Y单元单元 MOV Y, AL JMP NEXT ;跳过处理跳过处理X=0的程序段的程序段EQUL: MOV Y, AL ;X=0,0送送Y单元单元NEXT: MOV AH, 4CH ;返回操作系统返回操作系统 INT 21HCODE ENDS END START4.4.2 分支程序设计分支程序设计4.4.

56、3 循环程序设计循环程序设计 1. 循环程序的组成循环程序的组成 (1)循环初始化部分)循环初始化部分:主要是为一些变量赋上初值。:主要是为一些变量赋上初值。循环初值分两类:一类是循环工作部分的初值,别一类循环初值分两类:一类是循环工作部分的初值,别一类是控制循环结束条件的初值。是控制循环结束条件的初值。 (2)循环体部分)循环体部分:需要重复执行的程序段,是循环:需要重复执行的程序段,是循环的主体。的主体。 (3)循环控制部分)循环控制部分:用来保证循环程序按规定的次:用来保证循环程序按规定的次数或特定条件正常循环,按一定规律修改操作数地址及数或特定条件正常循环,按一定规律修改操作数地址及控

57、制变量,以便每次执行循环体时得到新的数据。控制变量,以便每次执行循环体时得到新的数据。 2. 循环程序的结构循环程序的结构 “当当”型循环型循环 “直到直到”型循环型循环循环初始状态循环控制条件循环体循环初始状态循环控制条件循环体NYNY4.4.3 循环程序设计循环程序设计 3. 循环控制的方法循环控制的方法 (1)计数控制循环)计数控制循环 将计数器的初值设置为循环次数,以后每执行将计数器的初值设置为循环次数,以后每执行一通循环体,使循环计数器减一通循环体,使循环计数器减1,并测试计数器是否,并测试计数器是否为为0,若为,若为0,则终止循环;否则,继续执行循环体。,则终止循环;否则,继续执行

58、循环体。这种方法称为计数法,一般用循环指令这种方法称为计数法,一般用循环指令LOOPLOOPELOOPNE进行编程。进行编程。4.4.3 循环程序设计循环程序设计 (2)条件控制法)条件控制法 对于循环次数不能预先确定的程序,只能根对于循环次数不能预先确定的程序,只能根据循环过程中某个特定条件是否满足来控制循环据循环过程中某个特定条件是否满足来控制循环是继续还是退出。这类通过测试特定条件来实现是继续还是退出。这类通过测试特定条件来实现循环控制的方法称为条件控制法。循环控制的方法称为条件控制法。4.4.3 循环程序设计循环程序设计例例4-5 设计一个程序,完成从设计一个程序,完成从1连加到连加到

59、100(1+2+99+100)的操作,结果存)的操作,结果存SUM。DATA SEGMENT SUM DW ? ;存放结果存放结果DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX4.4.3 循环程序设计循环程序设计;循环初始化循环初始化 SUB AX, AX ;工作寄存器清零工作寄存器清零 MOV CX, 100 ;计数器赋初值计数器赋初值 CLC ;清除进位标志清除进位标志;循环体开始循环体开始LP: INC AX ADC SUM, AX LOOP LP ;循环控制循环控制 MOV A

60、H, 4CH INT 21HCODE ENDS END START4.4.3 循环程序设计循环程序设计例例4-7 将由小写字母组成的字符串将由小写字母组成的字符串welcome转转换为大写字母,并在屏幕上显示。换为大写字母,并在屏幕上显示。DATAS SEGMENT MSG DB welcome,$ DATAS ENDSCODES SEGMENT ASSUME CS:CODES, DS:DATASSTART: MOV AX, DATAS MOV DS, AX MOV BX,0 BX0指向第一个字母指向第一个字母4.4.3 循环程序设计循环程序设计LOOP1: SUB MSGBX, a-A ;小

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论