第5章汇编语言程序设计

上传人:无*** 文档编号:220618508 上传时间:2023-07-01 格式:PPT 页数:85 大小:1.31MB
收藏 版权申诉 举报 下载
第5章汇编语言程序设计_第1页
第1页 / 共85页
第5章汇编语言程序设计_第2页
第2页 / 共85页
第5章汇编语言程序设计_第3页
第3页 / 共85页
资源描述:

《第5章汇编语言程序设计》由会员分享,可在线阅读,更多相关《第5章汇编语言程序设计(85页珍藏版)》请在装配图网上搜索。

1、第第5章章 汇编语言程序设汇编语言程序设计计教学重点 本章介绍程序结构、伪指令、本章介绍程序结构、伪指令、DOS功能调用。功能调用。重点:汇编语言程序的基本结构;重点:汇编语言程序的基本结构;伪指令及其使用方法;伪指令及其使用方法;DOS功能调用;功能调用;基本的汇编语言程序设计方法。基本的汇编语言程序设计方法。难点:难点:DOS功能调用的应用功能调用的应用 汇编语言程序的设计汇编语言程序的设计5.1 汇编语言程序格式5.1.1 程序结构程序结构5.1.2 汇编语言语句格式汇编语言语句格式5.1.3 汇编语言数据表示汇编语言数据表示1、汇编语言的分段结构:、汇编语言的分段结构:数据段(数据段(

2、DATA)作用:存放程序运行所需要的数据和运行结果作用:存放程序运行所需要的数据和运行结果堆栈段(堆栈段(STACK)作用:执行数据的压栈和弹栈操作,以及程序中作用:执行数据的压栈和弹栈操作,以及程序中 的数据保护的数据保护代码段(代码段(CODE)作用:存放所编写的程序的代码作用:存放所编写的程序的代码5.1.1 程序结构用开始语句用开始语句“SEGMENT”和结束语句和结束语句“ENDS”来定义一个段来定义一个段2、语句类型、语句类型指令语句指令语句作用:产生相应的机器代码,指定作用:产生相应的机器代码,指定CPU做什么操作。做什么操作。伪指令语句伪指令语句作用:不产生相应的机器代码,仅控

3、制汇编过程。作用:不产生相应的机器代码,仅控制汇编过程。宏指令语句宏指令语句作用:由编程者按照一定的规则来定义的一种较作用:由编程者按照一定的规则来定义的一种较“宏宏大大”的指令,包括多条指令或伪指令的指令,包括多条指令或伪指令。5.1.1 程序结构例题1 DATA SEGMENT ;定义定义DATA段段 BUF1 DB 34H ;定义第一个数据定义第一个数据 BUF2 DB 2AH ;定义第二个数据定义第二个数据 SUM DB?;定义数据和单元定义数据和单元 DATA ENDS ;DATA结束结束 STACK SEGMENT PARA STACK STACK ;定义定义STACK段段 DW

4、200 DUP(0)STACK ENDS ;STACK段结束段结束 SEGMENT 数据段开始数据段开始ENDS数据段结束数据段结束例题1(续)CODE SEGMENT ;定义定义CODE段段 ASSUME CS:CODE,DS:DATA,SS:STACK ;段分配段分配START:MOV AX,DATA MOV DS,AX ;填装数据段寄存器填装数据段寄存器DS MOV AL,BUF1 ;取第一个加数取第一个加数 ADD AL,BUF2 ;和第二个加数相加和第二个加数相加 MOV SUM,AL MOV AH,4CH INT 21H ;返回返回DOS状态状态CODE ENDS ;CODE段结束

5、段结束 END START ;整个源程序结束整个源程序结束;example2.asm(文件名)(文件名)stacksegment stack;定义堆栈段定义堆栈段dw 512 dup(?);堆栈段有堆栈段有512字空间字空间stackends;堆栈段结束堆栈段结束datasegment;定义数据段定义数据段stringdb Hello,Everybody!,0dh,0ah,$dataendscodesegment code;定义代码段定义代码段assume cs:code,ds:data,ss:stack例题2start:mov ax,data ;建立建立DSDS段地址段地址mov ds,ax

6、 mov dx,offset stringmov ah,9int 21hmov ax,4c00hint 21h ;利用功能调用返回利用功能调用返回DOSDOScodeends ;代码段结束代码段结束end start ;汇编结束,同时指明程序起始点汇编结束,同时指明程序起始点例题2(续)指令语句指令语句伪指令语句伪指令语句 定义符号、数据,分配内存单元,不产生机器代码 名字名字操作码操作码 操作数操作数;注释注释汇编时翻译成二进制机器代码标号标号:操作码操作码 操作数操作数,操作数操作数;注释注释指令语句标号后有冒号“:”伪指令语句名字后没有冒号指令语句、伪指令语句指令语句、伪指令语句 5.1

7、.2 汇编语言语句格式名字由字母开头。名字由字母开头。可由下列符号组成:可由下列符号组成:(1)大小写英文字母大小写英文字母(AZ,az)(2)数字数字(09)(3)特殊符号特殊符号(?、(?、_等)等)命名规则命名规则:(1)数字不能作为名字的第一个符号。数字不能作为名字的第一个符号。(2)单独的问号(?)不能作为名字。单独的问号(?)不能作为名字。(3)最大有效长度为最大有效长度为31位。位。(4)汇汇编编语语言言中中有有特特定定含含义义的的保保留留字字(如如操操作作码码、寄寄存存器器名等),不能作为名字使用。名等),不能作为名字使用。(5)见见名名知知义义。如如用用BUFFER表表示示缓

8、缓冲冲区区、SUM表表示示累累加加和等。和等。5.1.2 汇编语言语句格式段属性段属性偏移属性偏移属性 类型属性类型属性定义变量的段起始地址。定义变量的段起始地址。标号偏移地址,从段起始地址到定义标号的标号偏移地址,从段起始地址到定义标号的位置之间字节数。位置之间字节数。指出该标号是在本段内引用还是在其他段中指出该标号是在本段内引用还是在其他段中引用。段内引用属性为引用。段内引用属性为NEAR;段间引用属;段间引用属性为性为FAR。标号在代码段中定义。标号在代码段中定义。5.1.2 汇编语言语句格式操作数操作数:用来指定参与操作的数据。多于一个,之间用逗号分开。可以是常数或表达式。操作码操作码

9、与与操作数操作数例:例:MOV AX ,BX5.1.2 汇编语言语句格式操作码:指明操作的性质和功能,指令中的助记符都是操作码无操作数:一个操作数:两个操作数:伪指令、宏指令可有多个操作数:5.1.2 汇编语言数据表示数值常量数值常量字符串常量字符串常量 符号常数符号常数 后缀:二进制后缀:二进制B、八进制、八进制O或或Q、十进制十进制D、十六进制、十六进制H。十进制数可省掉后缀十进制数可省掉后缀十六进制数以十六进制数以AF开头时,前面开头时,前面须加数字须加数字0字符串在计算机中以字符串在计算机中以ASCII码存储。码存储。如如A的存储值是的存储值是41H,AB的的存储值是存储值是41、42

10、H等。等。用用EQU或或“=”定义的符号常定义的符号常量。量。如用如用COUNT EQU 3或或COUNT=3定义后定义后,COUNT是一个符号常数,是一个符号常数,与数值与数值3等价。等价。段属性段属性 偏移属性偏移属性 类型属性类型属性定义变量的段起始地址定义变量的段起始地址变量所在段的段内偏移地址变量所在段的段内偏移地址变量类型定义变量所占的字节数。变量类型定义变量所占的字节数。如如:BYTE(DB,1字节字节)、WORD(DW,2字节)、字节)、DWORD(DD,4字节)、字节)、QWORD(DQ,8字节)、字节)、TBYTE(DT,10字节)。字节)。5.1.2 汇编语言数据表示算术

11、运算符算术运算符逻辑运算符逻辑运算符关系运算符关系运算符分析运算符分析运算符+、*、/、MOD 与数学运算符的意义相同。与数学运算符的意义相同。取模是取余数。取模是取余数。例例:82 MOD 16;结果为结果为2 20H MOD 7 ;结果为结果为4 AND、OR、NOT、XOR 运算结果是一个常数运算结果是一个常数.EQ、NE、LT、GT、LE、GE 两个表达式比较时,两个表达式比较时,表达式表示表达式表示方法方法/性质性质要相同要相同关系成立,结果为全关系成立,结果为全1;不成立;不成立时,为全时,为全0例如:指令例如:指令MOV BX,32EQ45等价于等价于MOV BX,0;综合运算符

12、综合运算符SEG、OFFSET、LENGTH、SIZE、TYPE 把存储单元地址分解为段地址和把存储单元地址分解为段地址和偏移地址偏移地址 THIS、PTR 规定存储单元的性质规定存储单元的性质5.1.2 汇编语言数据表示等值伪指令等值伪指令等号伪指令等号伪指令 解除定义伪指令解除定义伪指令定义变量伪指令定义变量伪指令定位伪指令定位伪指令5.2 常用伪指令 格式格式符号名符号名 EQU 表达式表达式功能功能 给符号名定义一个值、别给符号名定义一个值、别的符号名、表达式或助记符。的符号名、表达式或助记符。注注 不能给一个符号重复定义不能给一个符号重复定义与与EQU类似,但在同一个程序中,类似,但

13、在同一个程序中,=可以对一个符号重新定义。可以对一个符号重新定义。格式格式 PURGE符号符号1,2N功能功能 解除指定符号的定义,解除指定符号的定义,解除后,可用解除后,可用EQU重新定义。重新定义。例例 Y1 EQU 7;Y1的值为的值为7 PURGE Y1;解除;解除Y1的定义的定义DB 字节变量,以字节为单位字节变量,以字节为单位分配存储单元。分配存储单元。DW 字变量,以字为单位分配字变量,以字为单位分配存储单元。存储单元。DD 定义双字,以定义双字,以4字节为单位字节为单位分配存储单元。分配存储单元。DQ 定义定义4字变量,以字变量,以8字节为字节为单位分配存储单元。单位分配存储单

14、元。DT 定义定义5字字 变量,以变量,以10字节字节为单位分配存储单元为单位分配存储单元 设置当前地址计数器的值设置当前地址计数器的值例例 DATA SEGMENT ORG 10H BUFF1 DW 2000H ORG 20H BUFF2 DW 4000H DATA ENDS 执行后执行后BUFF1的偏移地址值为的偏移地址值为10H,BUFF2的为的为20H。段定义伪指令段定义伪指令 段分配伪指令段分配伪指令ASSUME 说明段寄存器和段名之间的对应关系说明段寄存器和段名之间的对应关系例例 ASSUME CS:CODE,DS:DATA段定义伪指令格式:段定义伪指令格式:段名段名 SEGMEN

15、T定位类型定位类型组合方式组合方式类别名类别名 ;指令句或伪指令句;指令句或伪指令句 段名段名 ENDS5.2 常用伪指令 成对使用,指定段的名称、范围和段的定成对使用,指定段的名称、范围和段的定位类型、组合类型和分类名。位类型、组合类型和分类名。成对出现,前后必须相同成对出现,前后必须相同在同一模块中,不同段的段名不能相同在同一模块中,不同段的段名不能相同作用作用 规定段的起始地址规定段的起始地址四种类型的起始位置分别为(四种类型的起始位置分别为(X表示可为表示可为0或或1):):(A)BYTE XXXX XXXX XXXX XXXX XXXXB(B)WORD XXXX XXXX XXXX

16、XXXX XXX0B(C)PARA XXXX XXXX XXXX XXXX 0000B(D)PAGE XXXX XXXX XXXX 0000 0000B 以上分别表示以以上分别表示以字节、字、节、页字节、字、节、页的边界为的边界为起始地址。如果缺省定位方式,则以节的边起始地址。如果缺省定位方式,则以节的边界为起始地址。界为起始地址。作用作用 指示连接程序,把同名的段按照指定指示连接程序,把同名的段按照指定的方式组合起来形成一个新的段。的方式组合起来形成一个新的段。组合方式组合方式 NONE、PUBLIC、STACK、COMMON、MEMORY、AT典型格式典型格式:STACK SEGMENT

17、PARA STACK STACK 类别名必须用类别名必须用单引号单引号括起来括起来连接程序把类别名相同的段放在连续的存储区连接程序把类别名相同的段放在连续的存储区域,先出现的段在前,后出现的在后,但对各域,先出现的段在前,后出现的在后,但对各段不能重新组合段不能重新组合5.3 汇编程序的编写 5.3.1 段寄存器的填装段寄存器的填装 5.3.2汇编语言程序的编写过程汇编语言程序的编写过程 1、DS、ES内容的填装内容的填装例:例:CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX MO

18、V ES,AX (DATA、STACK设置已省略。)设置已省略。)5.3.1 段寄存器的填装用用MOV指令填装段寄存指令填装段寄存器器DS、ES的值的值 CODE SEGMENT DATA ENDS STACK1 SEGMENT PARA STACK STACK DW 200DUP(0)TOP LABEL WORD STACK1 ENDS START:MOV AX,STACK1 MOV SS,AX MOV SP,OFFSET TOP 5.3.1 段寄存器的填装设置定位类型:设置定位类型:PARA 组合类型:组合类型:STACKSS SP 的内容自动填的内容自动填充充指令填装指令填装SP指令填装

19、指令填装SS类似于类似于DS、ES的填装的填装2、SS段寄存器的填装段寄存器的填装 5.3.2汇编语言程序的编写过程 1)用文本编辑器建立扩展名为)用文本编辑器建立扩展名为.ASM源文件。源文件。2)用用MASM程程序序吧吧扩扩展展名名为为.ASM的的文文件件汇汇编编成扩展名为成扩展名为.OBJ的文件。的文件。3)用用LINX程程序序把把扩扩展展名名为为.OBJ的的文文件件连连接接成成扩展名为扩展名为.EXE的文件。的文件。4)在在DOS方方式式下下直直接接键键入入文文件件名名就就可可执执行行该该程序。程序。编编辑辑程程序序DELINKTC编辑器编辑器WINDOWS文本编辑器文本编辑器EDIT

20、 汇编语言源程序的操作流程图汇编语言源程序的操作流程图源程序文件源程序文件EXMP.ASMASMMASMTASM汇汇编编程程序序出错出错文件文件EXMP.OBJ(EXMP.LST)(EXMP.CRF)LINK连连接接程程序序出错出错文件文件EXMP.EXE(EXMP.MAP)(EXMP.LIB)DEBUG出错出错5.3.2汇编语言程序的编写过程连接的是连接的是.OBJ文件文件 执行的是执行的是.exe文件文件基本基本基本基本I/OI/O系统系统系统系统BIOSBIOS主要功能主要功能主要功能主要功能:1.1.加电后的硬件测试程序;加电后的硬件测试程序;加电后的硬件测试程序;加电后的硬件测试程序

21、;2.2.系统配置(如内存大小)的分析程序;系统配置(如内存大小)的分析程序;系统配置(如内存大小)的分析程序;系统配置(如内存大小)的分析程序;3.3.显示器、打印机、键盘、异步通信和软驱的驱显示器、打印机、键盘、异步通信和软驱的驱显示器、打印机、键盘、异步通信和软驱的驱显示器、打印机、键盘、异步通信和软驱的驱动程序;动程序;动程序;动程序;4.4.日、时钟控制程序;日、时钟控制程序;日、时钟控制程序;日、时钟控制程序;5.5.引导与装入程序。引导与装入程序。引导与装入程序。引导与装入程序。DOS系统中设置了两层内部子程序可供用户使用系统中设置了两层内部子程序可供用户使用:基本输入输出模块基

22、本输入输出模块BIOSDOS层功能模块层功能模块 5.4 DOS功能调用用途:方便高级用户通过软中断和功能调用在用途:方便高级用户通过软中断和功能调用在用途:方便高级用户通过软中断和功能调用在用途:方便高级用户通过软中断和功能调用在MS-DOSMS-DOS较低层次上和操作系统打交道。较低层次上和操作系统打交道。较低层次上和操作系统打交道。较低层次上和操作系统打交道。BIOS的部分软中断调用指令及功能的部分软中断调用指令及功能 软软中中断断调调用用指指令令INT 10H供显示调用的供显示调用的BIOSBIOS 功功 能能INT 13H供磁盘驱动器调用的供磁盘驱动器调用的BIOSBIOSINT 1

23、4H 供串行通信调用的供串行通信调用的BIOSBIOSINT 16H 供键盘输入调用的供键盘输入调用的BIOSBIOSINT 17H供打印机调用的供打印机调用的BIOSBIOS5.4 DOS功能调用BIOS的的调用格格式调用格格式MOV AHMOV AH,nn1 nn1 nn1nn1为功能号,为功能号,为功能号,为功能号,规定调用的功能规定调用的功能规定调用的功能规定调用的功能INT nn2 INT nn2 nn2nn2为软中断调用的类型码,规定调用的类型为软中断调用的类型码,规定调用的类型为软中断调用的类型码,规定调用的类型为软中断调用的类型码,规定调用的类型设置显示器为设置显示器为设置显示

24、器为设置显示器为8080(列)(列)(列)(列)2525(行)彩色方式(行)彩色方式(行)彩色方式(行)彩色方式MOV ALMOV AL,03H03H;ALAL为入口参数,规定显示方式为入口参数,规定显示方式为入口参数,规定显示方式为入口参数,规定显示方式MOV AHMOV AH,00H00H;00H00H为设置显示器的功能号为设置显示器的功能号为设置显示器的功能号为设置显示器的功能号INT 10HINT 10H;10H 10H 为供显示调用的类型码为供显示调用的类型码为供显示调用的类型码为供显示调用的类型码5.4 DOS功能调用DOS系统功能调用(类型码:系统功能调用(类型码:21H)为为了

25、了使使用用方方便便,将将DOS层层功功能能模模块块所所提提供供的的100个个子程序从子程序从00H63H统一顺序编号,调用方法如下:统一顺序编号,调用方法如下:1.设置入口参数设置入口参数2.将子程序编号送入将子程序编号送入AH寄存器寄存器3.执行中断指令执行中断指令 INT 21H5.4 DOS功能调用功能号功能号功能号功能号 功能功能功能功能 入口参数入口参数入口参数入口参数 出口参数出口参数出口参数出口参数00H 00H 程序终止程序终止程序终止程序终止 无无无无无无无无01H 01H 键盘输入并回显键盘输入并回显键盘输入并回显键盘输入并回显 无无无无 AL=AL=输入字符输入字符输入字

26、符输入字符02H 02H 显示字符显示字符显示字符显示字符 DL=DL=输出字符输出字符输出字符输出字符03H 03H 异步通信输入异步通信输入异步通信输入异步通信输入 AL=AL=输入字符输入字符输入字符输入字符04H 04H 异步通信输出异步通信输出异步通信输出异步通信输出 DL=DL=输出字符输出字符输出字符输出字符05H05H 打印机输出打印机输出打印机输出打印机输出DL=DL=输出字符输出字符输出字符输出字符06H06H 直接控制台直接控制台直接控制台直接控制台I/O I/O 5.4 DOS功能调用功能号功能号功能号功能号 功能功能功能功能 入口参数入口参数入口参数入口参数 出口参数

27、出口参数出口参数出口参数07H07H 键盘输入无回显键盘输入无回显键盘输入无回显键盘输入无回显AL=AL=输入字符输入字符输入字符输入字符08H08H 同上但要检测同上但要检测同上但要检测同上但要检测Ctrl-BreakCtrl-Break09H 09H 显示字符串显示字符串显示字符串显示字符串 (见说明)(见说明)(见说明)(见说明)0AH0AH 字符串输入字符串输入字符串输入字符串输入(见说明)(见说明)(见说明)(见说明)4CH4CH 返回返回返回返回DOSDOSDOSDOS操作系统操作系统操作系统操作系统更详细情况可参见教材更详细情况可参见教材P333附录附录5.4 DOS功能调用A

28、BOY$说明:说明:AH=09HAH=09H为显示字符串功能。为显示字符串功能。例如,显示例如,显示STRINGSTRING中字符串:中字符串:STRING DB A BOYSTRING DB A BOY,$;MOV DXMOV DX,OFFSET STRINGOFFSET STRING;取;取STRINGSTRING的偏移地址的偏移地址MOV AHMOV AH,09H09H;INT 21HINT 21H;DSDS:DX DX 输出缓冲区输出缓冲区 结束字符结束字符BACKBACK5.4 DOS功能调用AH=0AH为从键盘输入字符串。为从键盘输入字符串。入口参数:入口参数:DS:DX=输入缓冲

29、区地址,输入缓冲区地址,DS:DX为输入缓冲区的总长;为输入缓冲区的总长;出口参数:出口参数:DS:DX+1为输入字符串的实长(字符个数)为输入字符串的实长(字符个数)DS:DX+0 输入缓冲区输入缓冲区 +1 +2 输入字符输入字符 说明:说明:最大的实长最大的实长=总长总长-1总长实长BACKBACK5.4 DOS功能调用DOS功能调用举例功能调用举例例例例例 从键盘输入字符串并回显从键盘输入字符串并回显从键盘输入字符串并回显从键盘输入字符串并回显 算算 法法 a.a.显示显示显示显示 Do you want input a stringDo you want input a string

30、?(Y YN N),回车,换行,回车,换行,回车,换行,回车,换行,$;(09H09H功能)功能)功能)功能)b.b.从键盘输入一个字符(从键盘输入一个字符(从键盘输入一个字符(从键盘输入一个字符(Y YN N),),),),若是若是若是若是 yy或或或或 YY则执行则执行则执行则执行c ,c ,否则到否则到否则到否则到g g 结束结束结束结束;(01H01H功能)功能)功能)功能)c.c.显示显示显示显示 Please input string.Please input string.,回车回车回车回车,换行,换行,换行,换行,$;(09H09H功能)功能)功能)功能)5.4 DOS功能调用

31、 算算 法法d.d.输入字符串到缓冲区;输入字符串到缓冲区;输入字符串到缓冲区;输入字符串到缓冲区;e.在缓冲区输入的字符串后在缓冲区输入的字符串后在缓冲区输入的字符串后在缓冲区输入的字符串后 加结束符加结束符加结束符加结束符$;f.f.回显输入的字符串;回显输入的字符串;回显输入的字符串;回显输入的字符串;g.g.结束。结束。结束。结束。5.4 DOS功能调用DOS功能调用举例功能调用举例例例例例 从键盘输入字符串并回显从键盘输入字符串并回显从键盘输入字符串并回显从键盘输入字符串并回显 算算 法法例例 密码输入程序算法及流程图密码输入程序算法及流程图a.a.提示提示提示提示“Please I

32、nput Your Password.”Please Input Your Password.”b.b.用输入字符不回显方式一个一个输用输入字符不回显方式一个一个输用输入字符不回显方式一个一个输用输入字符不回显方式一个一个输 入密码,每输入入密码,每输入入密码,每输入入密码,每输入1 1位密位显示一个位密位显示一个位密位显示一个位密位显示一个“”号;密位可以号;密位可以号;密位可以号;密位可以1 18 8位,不足位,不足位,不足位,不足8 8位时以位时以位时以位时以“回车回车回车回车”结束,满结束,满结束,满结束,满8 8位时自动结束。位时自动结束。位时自动结束。位时自动结束。c.c.比较输入

33、的密码。比较输入的密码。比较输入的密码。比较输入的密码。5.4 DOS功能调用 算算 法法e.e.密码错误,显示密码错误,显示密码错误,显示密码错误,显示“WrongWrong,AgainAgain!”重新输入输入密码。重新输入输入密码。重新输入输入密码。重新输入输入密码。d.d.密码正确,转操作程序(以显示密码正确,转操作程序(以显示密码正确,转操作程序(以显示密码正确,转操作程序(以显示“OKOK!”结束)。结束)。结束)。结束)。f.f.密码输入最多密码输入最多密码输入最多密码输入最多3 3次,次,次,次,3 3次均为错误次均为错误次均为错误次均为错误 时显示时显示时显示时显示“NONO

34、!”退出。退出。退出。退出。5.4 DOS功能调用例例 密码输入程序算法及流程图密码输入程序算法及流程图主程序BL03HSIBUFF1偏输入密码(SUB1)比较密码(SUB2)密码对?BL-10?显示“NO!”显示“OK!”显示“Wrong,Again!”ENDLOPYYNNDONEAGAIN5.4 DOS功能调用流流程程图图SUB1DIBUFF2偏偏CX08H输入字符输入字符存字符存字符是否回车?是否回车?DIDI+1显示显示*号号CX-10?RET子程序子程序1LOP1YNYDONE1N5.4 DOS功能调用流流程程图图SUB2DIBUFF2偏偏CX取密位取密位比较比较1个字符个字符DID

35、I+1是否不相同?是否不相同?SISI+1AL00HCX-10?RET子程序子程序2LOP2YNYDONE2NAL0FFH5.4 DOS功能调用流流程程图图5.5.0 汇编语言设计基础知识5.5.1 顺序结构程序设计5.5.2 分支结构程序设计5.5.3 循环结构程序设计5.5.4 子程序结构形式与操作5.5 汇编程序设计 一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试 当接到程序设计的任务后,首先对任务进行详尽的分析,搞清楚已知的数据和想要得到的结果,程序应该完成何种的功能。汇编语言设计的

36、一般步骤 一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试 根据实际问题的要求和指令系统的特点,确定解决问题的具体步骤。根据任务要求,对不同的计算方法进行比较,选择最适宜的算法。汇编语言设计的一般步骤 一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试将解决问题的具体步骤用一种约定的几何图形、指向线和必要的文字说明描述出来的图形。汇编语言设计的一般步骤 一、汇编语言程序设计的一般步骤一、汇编语言

37、程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试 经过上述各步骤后,解决问题的思路已经非常清楚,所以接下来就可以按流程图的顺序对每一个功能框选用合适的指令编写出汇编语言程序。汇编语言设计的一般步骤 一、汇编语言程序设计的一般步骤一、汇编语言程序设计的一般步骤 分析课题分析课题 确定算法确定算法 画流程图画流程图 编写程序编写程序 上机调试上机调试在应用程序的设计中,几乎没有一个程序只经过一次编写就完全成功的,所以必须经过上机调试。汇编语言设计的一般步骤1 1流程图的概念流程图的概念v流程图是由特定的几何图形、指向线、文字说明来表示数据

38、处理的步骤,形象描述逻辑控制结构以及数据流程的示意图。流程图具有简洁、明了、直观的特点。2 2流程图符号表示流程图符号表示(1 1)开始框:表示程序的开始。)开始框:表示程序的开始。开始流程图的画法规定条件NY结束(3 3)判断框)判断框(2 2)处理框(执行框)处理框(执行框)(4 4)结束框)结束框v结构程序设计程序的每个部分都由有限结构结合中的单元组成,并且只有单一的入口和单一的出口。基本结构有:顺序结构(线性结构)选择结构(分支结构)循环结构 三种结构可以任意组合和嵌套构成复杂的程序。程序的基本结构这三种结构可归纳为五种逻辑结构:(1)顺序结构(2)双分支结构(3)多分支结构YN条件条

39、件程序的基本结构YN(4)DO_UNTIL循环结构NY(5)DO_WHILE循环结构程序的逻辑结构格式程序的基本结构顺序程序:一种无分支的程序顺序程序:一种无分支的程序,CPU从第一条指令开始从第一条指令开始依次依次执行执行每一条指令每一条指令,直到最后一条指令。直到最后一条指令。特点特点:指令顺序执行,无分支、无循环、无转移。:指令顺序执行,无分支、无循环、无转移。拆字程序 程序的基本结构例题例题开始设置数据段和堆栈段地址设置堆栈指针取数据截取高四位右移四位 例:例:设内存DATA单元存放一个无符号字节数据,编制程序将其拆成两位十六进制数,并存入HEX和HEX+1单元的低4位,HEX存放高位

40、十六进制数,HEX+1单元存放低位十六进制数 解解:分析命题分析命题确定算法确定算法画流程图画流程图拆字程序取原数据结束保留高位十六进制数截取低四位保存地位十六进制数保存结果 MOV SS,AX MOV SP,LENGTH STK MOV AL,DATA MOV AH,AL AND AL,0F0H MOV CL,04 SHR AL,CL MOV HEX,AL AND AH,0FH MOV HEX+1,AH MOV AX,4C00H INT 21HCSEG ENDS END DISC 例:例:设内存DATA单元存放一个无符号字节数据,编制程序将其拆成两位十六进制数,并存入HEX和HEX+1单元的

41、低4位,HEX存放高位十六进制数,HEX+1单元存放低位十六进制数 解解:分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试拆字程序 SSEG SEGMENT STACKSTKDB 20 DUP(0)SSEG ENDSDSEG SEGMENTDATA DB0B5HHEXDB0,0DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGASSUME SS:SSEGDISC:MOV AX,DSEGMOV DS,AX MOV AX,SSEG条件转移条件转移JCC和和无条件转移无条件转移JMP指令用于实现程序的分支结构。指令用于实现程序的分支

42、结构。单分支单分支if-then双分支双分支if-then-else判定:判定:程序的逻辑根据某一条条件表达式程序的逻辑根据某一条条件表达式为真或假时,执行两个不同处理之一为真或假时,执行两个不同处理之一时,便是双分支结构形式时,便是双分支结构形式判定:判定:有其中一个处理为空时,就是单有其中一个处理为空时,就是单分支形式;如果分支处理中又嵌套分支形式;如果分支处理中又嵌套有分支,或者说具有多个分支走向有分支,或者说具有多个分支走向时,即为逻辑上的时,即为逻辑上的多分支多分支形式。形式。5.52分支程序设计例:例:写一个实现把一位十六进制数转化为对应ASCII码的程序。分析命题分析命题确定算法

43、确定算法十六进制数码与对应的关系:十六进制数码与对应的关系:0123 BCDEF30H 31H 32H 33H42H 43H 44H 45H 46H这种对应关系可表示为一个分段函数:这种对应关系可表示为一个分段函数:YX+30H(0=X=9)X+37H(0A=X=0FH)5.52分支程序设计分析命题分析命题确定算法确定算法画流程图画流程图开始取十六进制数X+30H0=X=9YN0A=X=0FHX+37H结束YN5.52分支程序设计例:例:写一个实现把一位十六进制数转化为对应ASCII码的程序。分析命题分析命题确定算法确定算法画流程图画流程图编写程序编写程序上机调试上机调试 JMP LAB2 L

44、AB1:ADD AL,37H LAB2:MOV ASCII,AL MOV AH,4CH INT 21H CODE ENDS END START DATASEGMENT XX DB 4 ASCII DB?DATA ENDS DATADB0B5H CODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV AL,0FH CMP AL,9 JA LAB1 ADD AL,30H5.52分支程序设计例:例:写一个实现把一位十六进制数转化为对应ASCII码的程序。DO WHILE 结构图结构图循环初始状态循环初始状态循环控制条件循环

45、控制条件循环体循环体NY5.5.3 循环程序设计DO UNTIL 结构图结构图循环初始状态循环初始状态循环体循环体循环控制条件循环控制条件YNDO WHILE结构结构把把对对循循环环控控制制条条件件的的判判断断放放在在循循环环的的入入口口,先先判判断断条条件件,满满足足条条件件就就执执行行循循环环体体,否否则则就就退退出循环出循环DO UNTIL结构结构先先执执行行一一次次循循环环体体,然然后后再再判判断断控控制制条条件件,不不满满足足条条件件则则继继续续执执行行循循环环操操作作,一一旦旦满满足条件则退出循环足条件则退出循环5.5.3 循环程序设计注注意意:循循环环次次数数等等于于0,选选择择

46、DO WHILE结结构构,否否则则使使用用DO UNTIL结构。结构。循环程序都可由如下四部分组成:循环程序都可由如下四部分组成:(1)循环初始化部分循环初始化部分(2)循环体循环体(3)循环修改循环修改(4)循环控制循环控制最常见的循环结束有:最常见的循环结束有:用计数器控制循环;用计数器控制循环;按问题的条件控制循环;按问题的条件控制循环;用开关量控制循环;用开关量控制循环;2.循环程序设计实现循环程序设计实现(1)单重循环程序设计单重循环程序设计例例5-8 设设计计程程序序,完完成成从从1累累加加到到50(即即1+2+.+49+50),结果保存在数据段,结果保存在数据段SUM单元。单元。

47、5.5.3 循环程序设计DATA SEGMENT SUM DW?DATA ENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,0;工作寄存器清零工作寄存器清零MOV CX,50;计数器赋初值计数器赋初值 MOVBX,0LP:INCBX;循环体入口循环体入口ADDAX,BXDECCX;循环计数器修改循环计数器修改JNZLP ;循环控制循环控制MOVAH,4CHINT21HCODE ENDSENDSTART5.5.3 循环程序设计例例5-9 分类统计字数组分类统计字数组ARRAY中正数、负数和零的个数,并中正数、负数和

48、零的个数,并分别存入内存字变量分别存入内存字变量BUF1、BUF2和和BUF3中,数组元素个数中,数组元素个数保存在数组的第一个字中。保存在数组的第一个字中。DATA SEGMENT ARRAYDW 10 ;数据元素个数数据元素个数 DW 230,-1437,26,-31,0,3458,0,10,-1,2350 POSTDW 0 NEGADW 0 ZERODW 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA5.5.3 循环程序设计START:MOVAX,DATAMOV DS,AXMOV AX,0;用用AX作为正数的计数器作为正数的计数器 MOV

49、BX,0;用用BX作为负数的计数器作为负数的计数器 MOV DX,0;用用DX作为零的计数器作为零的计数器MOV DI,OFFSET ARRAY MOV CX,DI;用用CX来进行循环计数来进行循环计数 ADD DI,2;用指针用指针DI来访问整个数组来访问整个数组AGAIN:CMPWORD PTRDI,0 ;与与0做比较做比较 JG HIGH;大于大于0,为正数,为正数 JE EQUAL ;等于等于0 INC BX ;小于小于0,为负数,负数个数增,为负数,负数个数增1 JMPNEXT5.5.3 循环程序设计HIGH:INC AX ;正数个数增正数个数增1JMP NEXTEQUAL:INC

50、DX ;0的个数增的个数增1NEXT:INC DI INCDI LOOP AGAIN;未完循环未完循环DONE:MOVBUF1,AX;把统计数保存到内存单元中把统计数保存到内存单元中 MOV BUF2,BX MOV BUF3,DX MOV AH,4CH;结束程序返回结束程序返回DOS INT 21HCODE ENDSEND START5.5.3 循环程序设计例例5-10 假假设设在在以以BUF为为首首址址的的存存储储单单元元中中存存放放着着一一串串字字符符,找出其中找出其中ASCII码值最大的字符,并存入码值最大的字符,并存入MAX单元中。单元中。程序存储单元与寄存器分配:程序存储单元与寄存器

51、分配:CX:循循环环次次数数控控制制变变量量,初初值值为为字字符符串串的的长长度度1,每每次减次减1。BX:BUF存储区地址指针,初值指向存储区地址指针,初值指向BUF,每次加,每次加1。AL:用来求最大值的工作单元,保持某个时刻的最大值。:用来求最大值的工作单元,保持某个时刻的最大值。MAX:用来保存最终结果的字节单元。:用来保存最终结果的字节单元。5.5.3 循环程序设计图5.8 求最大字符的程序流程图5.5.3 循环程序设计STACK SEGMENT PARA STACK DB200DUP(0)STACK ENDSDATA SEGMENT BUF DB ABCD5678bdcaMNN E

52、QU$-BUFMAX DB?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATA MOVDS,AX MOVBX,OFFSET BUF ;BX指向字串首指向字串首5.5.3 循环程序设计 MOV AL,BX ;取出第一个字符取出第一个字符 MOV CX,N-1 ;比较次数送比较次数送CXNEXT1:INC BX ;BX指向下一字符指向下一字符 CMP AL,BX ;比较比较 JNC NEXT2 MOV AL,BX ;大数送大数送ALNEXT2:LOOP NEXT ;循环次数(循环次数(CX 0)继续循环)继续循

53、环 MOV MAX,AL;MAX最大数最大数 MOV AH,4CH INT 21H CODE ENDS END BEGIN5.5.3 循环程序设计(2)多重循环程序设计)多重循环程序设计 多重循环即多重循环即循环体内又嵌套循环循环体内又嵌套循环。基基本本思思想想和和单单重重循循环环程程序序设设计计一一致致,但但实实现现起起来来更更复杂。复杂。应应分分别别考考虑虑各各重重循循环环的的控控制制条条件件及及其其程程序序实实现现,相相互互之之间间不不能能混混淆淆,即即内内外外层层循循环环必必须须是是嵌嵌套套的的形形式式,不不能出现交叉。能出现交叉。5.5.3 循环程序设计(2)多重循环程序设计)多重循

54、环程序设计例例5-11 在在变变量量BUF中中有有n个个无无符符号号数数x1,x2,xn,将将它们按由大到小的顺序排列在它们按由大到小的顺序排列在BUF中,试编程实现。中,试编程实现。5.5.3 循环程序设计采用选择排序时,存储单元和寄存器分配如下:采用选择排序时,存储单元和寄存器分配如下:SI:用用来来控控制制外外循循环环的的循循环环计计数数器器,初初值值为为1,终终值值为为N1,每次递增,每次递增1。DI:用用来来控控制制内内循循环环的的循循环环计计数数器器,初初值值(SI)+1,终终值值为为N,每次递增,每次递增1。AL:用来存放比较数据的寄存器。用来存放比较数据的寄存器。BUF:存放要

55、排序数据的变量。:存放要排序数据的变量。N:存放要排序数据的个数。:存放要排序数据的个数。5.5.3 循环程序设计STACK SEGMENTSTACK DB200DUP(0)STACK ENDSDATASEGMENT BUFDB 0AH,8,15H,36H,6,20H,12H N EQU$BUF ;N为为要要排排序序数数据据的的个个数数 DATAENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AXMOVSI,1;给外循环计数器赋初值给外循环计数器赋初值15.5.3 循环程序设计NEXT1:MOVDI,SI

56、 INCDIMOVAL,BUF+SI-1 NEXT2:CMPAL,BUF+DI-1 JAENEXT3XCHG BUF+DI-1,ALMOVBUF+SI-1,ALNEXT3:INCDI;(DI)(DI)+1CMPDI,N;若若(DI)N转转NEXT2,继续执行内循环开始,继续执行内循环开始5.5.3 循环程序设计JBE NEXT2 ;否则退出内循环,本循环结束准备进入下一轮循环否则退出内循环,本循环结束准备进入下一轮循环INCSI;(SI)(SI)+1CMPSI,N-1;比较(比较(SI)与)与N1JBENEXT1;若(若(SI)N-1转转NEXT1继续循环,否则退出继续循环,否则退出MOVAH

57、,4CHINT21HCODE ENDSENDBEGIN5.5.3 循环程序设计5.5.4 子程序结构形式与操作1.子程序的定义子程序的定义 程序设计中程序设计中,把多次重复出现、具有通用性、能够完成把多次重复出现、具有通用性、能够完成特定处理任务的程序段编写成独立的程序模块。特定处理任务的程序段编写成独立的程序模块。特性:特性:(1)重复性重复性;(;(2)通用性通用性;(3)浮动性浮动性;(;(4)模块化模块化;主程序与子程序调用关系主程序K:调用子程序ADK:J:调用子程序ADJ:子程序A 返回主程序5.5.4 子程序结构形式与操作例5-12 调用程序和子程序在同一代码段中。调用程序和子程

58、序在同一代码段中。MAINPROC FAR ;主程序主程序 CALLSUBR1 RETMAINENDPSUBR1PROC NEAR ;子程序子程序(NEAR可省略可省略)RETSUBR1ENDPMAIN及其子程序及其子程序SUBR1在同一代码段中,在同一代码段中,SUBR1定义为定义为NEAR属性。属性。如果调用程序和子程序不在同一个代码段中,如果调用程序和子程序不在同一个代码段中,则使用则使用FAR属性属性 程序的主程序看作程序的主程序看作DOS调用的一个子程序,调用的一个子程序,因而因而DOS对对MAIN的调用以及的调用以及MAIN中的中的RET就是就是FAR属性。属性。5.5.4 子程序

59、结构形式与操作CALL和和NEAR为为调用指令调用指令基本功能基本功能:将子程序的返回地址将子程序的返回地址(即即CALL指令的下一条指指令的下一条指令的地址,简称断点地址,令的地址,简称断点地址,包括段地址和偏移地址包括段地址和偏移地址)压)压入堆栈,以便执行完子程序入堆栈,以便执行完子程序后能返回主程序,并从断点后能返回主程序,并从断点处继续往下执行,然后按照处继续往下执行,然后按照某种寻址方式转向子程序的某种寻址方式转向子程序的入口地址去执行子程序。入口地址去执行子程序。子程序定义的语法格式:子程序定义的语法格式:PROC Attribute RET ENDPSUBTPROCPUSHAX

60、;现场保护现场保护PUSHBXPUSHCXPUSH DX ;子程序体子程序体POP DX;现场恢复现场恢复POP CXPOP BXPOP AXRETSUBTENDP例例例例5-135-13PUSH指令把指令把子程序所需要子程序所需要使用的寄存器使用的寄存器内容保存在堆内容保存在堆栈中栈中POP指令把寄指令把寄存器内容恢复存器内容恢复原状原状5.5.4 子程序结构形式与操作注意:注意:子程序中用到的寄存子程序中用到的寄存器是应该保护的。器是应该保护的。如果使用寄存器在主程序和如果使用寄存器在主程序和子程序之间传送参数,这种子程序之间传送参数,这种寄存器就不一定需要保护,寄存器就不一定需要保护,特

61、别是向主程序回送结果的特别是向主程序回送结果的寄存器,更不应该因保存和寄存器,更不应该因保存和恢复寄存器而破坏了应该向恢复寄存器而破坏了应该向主程序传送的信息。主程序传送的信息。例5-14 假假设设在在A、B、C、D四四个个字字变变量量中中各各存存放放一一个个正正整整数数,试试编编写写程程序序分分别别求求出出A与与B的的最最大大公公约约数数M,C与与D的的最最大大公公约数约数N,再求出,再求出M与与N之和,将结果存入之和,将结果存入RESULT字变量中。字变量中。本本程程序序需需两两次次调调用用求求最最大大公公约约数数子子程程序序,将将两两次次返返回回结结果求和再存入果求和再存入RESULT字

62、变量中。字变量中。5.5.4 子程序结构形式与操作STACK SEGMENTPARA STACK DB 200DUP(0)STACK ENDSDATA SEGMENT ADW720B DW 81C DW 1150D DW 125 RESULT DW?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKBEGIN:MOV AX,DATA MOV DS,AX5.5.4 子程序结构形式与操作 MOV AX,A MOV BX,B CALL GCD ;调用子程序,求调用子程序,求A、B的最大公约数的最大公约数 MOV RESULT,CX ;结果存入结

63、果存入RESULT 单元单元 MOV AX,C MOV BX,D CALL GCD ;调用子程序,求调用子程序,求C、D的最大公约数的最大公约数 ADD RESULT,CX ;将结果加到将结果加到RESULT单元单元 MOV AH,4CH ;返回返回 INT 21HGCD PROC;求最大公约数子程序求最大公约数子程序 PUSH AX5.5.4 子程序结构形式与操作 PUSH BX PUSH DXAGAIN:XOR DX,DX ;DX清清0,扩充被除数,扩充被除数 DIV BX ;商存入商存入AX,余数存入,余数存入DX AND DX,DX ;判断余数是否为判断余数是否为0 JZ EXIT ;

64、余数为余数为0转转EXIT MOV AX,BX ;否则,更新被除数否则,更新被除数 MOV BX,DX ;更新除数更新除数 JMP AGAIN ;继续辗转相除继续辗转相除5.5.4 子程序结构形式与操作 主程序调用子程序,子程序还可以调用其他子程序,主程序调用子程序,子程序还可以调用其他子程序,这就是这就是子程序的嵌套子程序的嵌套调用,子程序可以多重嵌套调用。调用,子程序可以多重嵌套调用。例例5-15 从从BUF开开始始存存放放若若干干无无符符号号字字节节数数据据,找找出出其其中中的的最小值并以十六进制形式输出。最小值并以十六进制形式输出。5.5.4 子程序结构形式与操作DATASEGMENT

65、 BUFDB13,25,23,100,423,78,90,134 CNTEQU$-BUFDATAENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,CNT-1;比较次数比较次数MOVSI,OFFSET BUF ;首地址首地址CALLSEARCHMOVAH,4CH;返回返回DOSINT21H5.5.4 子程序结构形式与操作SEARCHPROC NEARMOVBL,SI;假定第一个数为最小数假定第一个数为最小数SEAR1:INCSI;指向下指向下个数个数CMPBL,SI;比较比较JBESEAR2 ;BL中的数小,转

66、中的数小,转SEAR2MOVBL,SI ;BL中的数大,把它替换掉中的数大,把它替换掉SEAR2:DEC CXJNZSEAR1 ;循环比较循环比较MOVDL,BL;最小值送最小值送DMOVCL,4SHRDL,CL;分离出高分离出高4位位CALLDISP;调用子程序显示输出调用子程序显示输出MOVDL,BL;最小值送最小值送DLANDDL,0FH;分离出低分离出低4位位CALLDISP ;调用子程序显示输出调用子程序显示输出RET5.5.4 子程序结构形式与操作SEARCHENDPDISPPROC NEARCMPDL,9;DL和和9比较比较 JBEDISP1 ;小小于于等等于于9加加30H,否否则则加加37H ADDDL,7DISP1:ADD DL,30H MOVAH,2 ;输出结果输出结果 INT21H RETDISP ENDPCODE ENDSENDSTART5.5.4 子程序结构形式与操作本章结束本章结束

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

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

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


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