




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第5章章 汇编语言程序设计汇编语言程序设计n5.1 概述概述n5.2 顺序程序设计顺序程序设计n5.3 分支程序设计分支程序设计n5.4 循环程序设计循环程序设计n5.5 子程序设计子程序设计开开 始始5.1 概述概述n5.1.1 汇编语言程序设计的一般步骤汇编语言程序设计的一般步骤n5.1.2 流程图流程图返回本章首页返回本章首页5.1.1 汇编语言程序设计的一般步骤汇编语言程序设计的一般步骤汇编语言程序设计一般有以下几个步骤:汇编语言程序设计一般有以下几个步骤:n1分析问题,确定算法分析问题,确定算法n2绘制流程图绘制流程图n3根据流程图编制程序根据流程图编制程序n4调试程序调试程序返回
2、本节返回本节5.1.2 流程图流程图1 1流程图的概念流程图的概念流程图是由特定的流程图是由特定的几何图形几何图形、指向线指向线、文字文字说明说明来表示来表示数据处理的步骤数据处理的步骤,形象描述逻辑,形象描述逻辑控制结构以及数据流程的示意图。流程图具控制结构以及数据流程的示意图。流程图具有简洁、明了、直观的特点。有简洁、明了、直观的特点。2 2流程图符号表示流程图符号表示(1 1)起止框:表示程序)起止框:表示程序的开始和结束。的开始和结束。起止框起止框(2)判断框)判断框 (3)处理框)处理框 (4)调用框)调用框 (5)指向线)指向线 返回本节返回本节5.2 5.2 顺序程序设计顺序程序
3、设计 一个程序通常都是从外部读取一些数一个程序通常都是从外部读取一些数据,然后进行处理,再把处理的结果送到据,然后进行处理,再把处理的结果送到输出设备上输出设备上.对于一些简单的数据处理,只对于一些简单的数据处理,只要把完成处理的各个步骤用汇编语言描述要把完成处理的各个步骤用汇编语言描述清楚,清楚,让计算机按指令编写的次序从头到让计算机按指令编写的次序从头到尾逐条执行即可尾逐条执行即可,这样的程序结构称为,这样的程序结构称为顺顺序结构序结构。 例例11已知已知X X和和Y Y是数据段中的两个无符号字节单元,用程是数据段中的两个无符号字节单元,用程序完成序完成Z=Z=(X X2 2+Y+Y2 2
4、)/2/2的计算。的计算。DATA SEGMENTDATA SEGMENT X DB 15 X DB 15 Y DB 34 Y DB 34 Z DB ? Z DB ?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODE,DS:DATAASSUME CS:CODE,DS:DATASTART:MOV AX,DATASTART:MOV AX,DATA MOV DS,AX MOV DS,AX MOV AL,X MOV AL,X MUL AL ; MUL AL ;计算计算X X2 2 MOV BX,AX MOV BX,AX MOV AL,YMO
5、V AL,Y MUL AL ; MUL AL ;计算计算Y Y2 2 ADD AX,BX ; ADD AX,BX ;计算计算X X2 2+Y+Y2 2 MOV CL,2 ; MOV CL,2 ;计算计算(X(X2 2+Y+Y2 2)/2)/2 DIV CL DIV CL MOV Z,AL MOV Z,AL MOV AH,4CH MOV AH,4CH INT 21H ; INT 21H ;返回返回DOSDOS CODE ENDS CODE ENDS END START END START 例例22从键盘读入两个一位数从键盘读入两个一位数( (假设按下的肯定是数字假设按下的肯定是数字键),编程序显
6、示它们的乘积。键),编程序显示它们的乘积。CODE SEGMENTCODE SEGMENT ASSUME CS:CODE ASSUME CS:CODESTART:MOV AH,1START:MOV AH,1 INT 21H INT 21H MOV BL,AL MOV BL,AL MOV AH,1 MOV AH,1 INT 21H INT 21H SUB AL,30H SUB AL,30H SUB BL,30H SUB BL,30H MUL BL ; MUL BL ;积在积在AXAX中中 MOV BL,10MOV BL,10 DIV BL DIV BL ADD AX,3030H ADD AX,3
7、030H MOV BX,AXMOV BX,AX MOV DL,BL MOV DL,BL MOV AH,2 MOV AH,2 INT 21H ; INT 21H ;输出十位数输出十位数 MOV DL,BHMOV DL,BH MOV AH,2 MOV AH,2 INT 21H ; INT 21H ;输出个位数输出个位数 MOV AH,4CHMOV AH,4CH INT 21H INT 21H ;返回;返回DOSDOSCODE ENDSCODE ENDS END START END START 5.3 5.3 分支程序设计分支程序设计 计算机可根据不同条件进行逻辑判断,计算机可根据不同条件进行逻辑判
8、断,通过转移指令选择不同的程序流向。通过转移指令选择不同的程序流向。 转移指令分为转移指令分为无条件转移指令无条件转移指令和和条件条件转移指令转移指令。在设计分支程序前,请复习第。在设计分支程序前,请复习第3章有关转移指令的内容,尤其是条件转移章有关转移指令的内容,尤其是条件转移指令。能否正确使用这些转移指令,是能指令。能否正确使用这些转移指令,是能否编写好分支程序的关键。否编写好分支程序的关键。 分支程序设计要领如下:分支程序设计要领如下:(1)首先要根据处理的问题用)首先要根据处理的问题用比较、测试比较、测试等方等方式,或者用式,或者用算术运算、逻辑运算算术运算、逻辑运算,使标志寄存器,使
9、标志寄存器产生相应的标志位。产生相应的标志位。(2) 根据转移条件选择转移指令。通常一条条根据转移条件选择转移指令。通常一条条件转移指令只能产生两路分支,因此要产生件转移指令只能产生两路分支,因此要产生 n 路路分支需分支需 n-1 条条件转移指令。条条件转移指令。 (3)各分支之间不能产生干扰,如果产生干)各分支之间不能产生干扰,如果产生干扰,可用扰,可用无条件转移语句无条件转移语句JMP进行隔离。进行隔离。 1 x 0 例例5-7 符号函数符号函数 y = 0 x = 0 其中其中 x 为为 8 位带符号数。位带符号数。 -1 x 0 转移转移 MOV AL,0 ;0 送送 YY JMP
10、JUS2 ;隔离;隔离 JUSl: MOV AL,1 ;1 送送YY JUS2: MOV YY,AL MOV AH,4CH INT 21H CODE ENDS END START54 循环程序设计循环程序设计 一个循环程序通常由四部分组成:一个循环程序通常由四部分组成: 1) 初始化部分初始化部分 为循环操作做准备工作,建立循环的初始值,为循环操作做准备工作,建立循环的初始值,如初始化地址指针、计数器及给变量赋初值等。如初始化地址指针、计数器及给变量赋初值等。 2) 循环体循环体 循环体为循环的工作部分,用于完成各种具体循环体为循环的工作部分,用于完成各种具体操作,它可以是一个顺序结构、分支结
11、构或又一个操作,它可以是一个顺序结构、分支结构或又一个循环结构。若循环体内又包含有循环程序,则称为循环结构。若循环体内又包含有循环程序,则称为多重循环。多重循环。 3) 修改部分修改部分 为执行循环而修改某些参数,如地址指为执行循环而修改某些参数,如地址指针、计数器或某些变量。针、计数器或某些变量。 4) 控制部分控制部分 判断循环是否结束,通常判断循环是判断循环是否结束,通常判断循环是否结束主要有两种方法:否结束主要有两种方法: (1) 计数器控制循环,这种方式一般用计数器控制循环,这种方式一般用于循环次数已知的情况;于循环次数已知的情况; (2) 条件控制循环,用于循环次数未知条件控制循环
12、,用于循环次数未知根据条件决定是否结束。根据条件决定是否结束。循环程序的常见结构形式如图循环程序的常见结构形式如图5.5(a)、()、(b)所示。)所示。图图5.5 循环程序结构图循环程序结构图 20 例例4 计算计算 y = Ai i =l设设A Al l,A A2 2,A A2020是一组无符号是一组无符号1616位二进制数。位二进制数。分析:定义数组分析:定义数组名名 T A B LT A B L 存 放存 放A A1 1,A,A2 2,A A2020,和 存 放 于 单 元和 存 放 于 单 元 YY YY 中。中间结中。中间结果 存 于 寄 存 器果 存 于 寄 存 器 AX AX
13、中,中,BX BX 寄存寄存器为地址指针,器为地址指针,CX CX 寄存器作计寄存器作计数器。数器。程序如右:程序如右: DATA SEGMENT TABL DW A1,A2,A20 YY DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AX,0 MOV BX,0 MOV CX,20 ;初始化;初始化 LOP: ADD AX, TABLBX;循环体;循环体 ADD BX ,2 ;修正;修正 LOOP LOP ;控制部分;控制部分 MOV YY,AX MOV AH,4CH INT
14、 21H CODE ENDS END START 例例55现将以现将以AREA1AREA1为首地址的为首地址的100100个字节数据搬移到以个字节数据搬移到以AREA2AREA2为首地址的内存中去。为首地址的内存中去。DATA SEGMENT AREA1 DB 100DUP(11H) AREA2 DB 100DUP(?)DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV SI, 0 MOV DI, 0 MOV CX,100AGAIN:MOV AL, AREA1SI MOV AREA2DI,AL IN
15、C SI INC DI LOOP AGAIN MOV AH,4CH INT 21HCODE ENDS END START55 子程序设计子程序设计引例:编程实现分四行显示任意输入的四个字符引例:编程实现分四行显示任意输入的四个字符start: mov ah,01h int 21h 回车换行回车换行 mov ah,01h int 21h 回车换行回车换行 mov ah,01h int 21h 回车换行回车换行 mov ah,01h int 21h回车换行相关程序段:回车换行相关程序段:mov dl,0dhmov ah,2int 21hmov dl,0ahmov ah,2int 21h 程序设计过
16、程中常常把程序设计过程中常常把多次引用多次引用的相同程序段编成的相同程序段编成一个独立的程序段,当需要执行这个程序段时,可以用一个独立的程序段,当需要执行这个程序段时,可以用调用指令调用它。具有这种独立功能的程序段称为调用指令调用它。具有这种独立功能的程序段称为过程过程或子程序。或子程序。 适合编成子程序的程序有以下两大类:适合编成子程序的程序有以下两大类: (1) 程序需要反复使用,程序需要反复使用,这类程序编写成子程序可这类程序编写成子程序可避免重复编写程序,并节省大量存储空间。避免重复编写程序,并节省大量存储空间。 (2) 程序具有通用性,程序具有通用性,这类程序大家都要用到,如这类程序
17、大家都要用到,如键盘管理程序、磁盘读写程序、标准函数程序等。编成键盘管理程序、磁盘读写程序、标准函数程序等。编成子程序后便于用户共享。子程序后便于用户共享。 为了使用户使用方便,子程序文件由为了使用户使用方便,子程序文件由子程序说明子程序说明和和子程序本身子程序本身两部分构成。两部分构成。 1.1.过程定义伪指令过程定义伪指令 1) 子程序说明部分子程序说明部分 子程序的名称;子程序的名称; 子程序的功能;子程序的功能; 使用的寄存器和存储单元;使用的寄存器和存储单元; 子程序的人口、出口参数。子程序的人口、出口参数。 下面是一个子程序说明部分的例子:下面是一个子程序说明部分的例子: ;子程序
18、;子程序DTOB ;将两位十进制数;将两位十进制数 (BCD码码) 转换成二进制数转换成二进制数 ;寄存器;寄存器 BX 传递参数传递参数 ;入口参数:;入口参数:AL 寄存器存放十进制数寄存器存放十进制数 ;出口参数:;出口参数:CL 寄存器存放转换后的二进制数寄存器存放转换后的二进制数 2) 子程序程序部分子程序程序部分格式:格式:子程序名子程序名 PROC RET 子程序名子程序名 ENDP 子程序从子程序从 PROC 语句开始,以语句开始,以 ENDP 语句结语句结束,程序中至少应当包含一条束,程序中至少应当包含一条 RET语句用以返回语句用以返回主程序。主程序。 2子程序使用中的问题
19、子程序使用中的问题 1) 子程序的调用和返回子程序的调用和返回 CALL 子程序名子程序名 2) 调用子程序时寄存器及所用存储单元调用子程序时寄存器及所用存储单元内容的保护内容的保护 如果子程序中要用到某些寄存器或存储如果子程序中要用到某些寄存器或存储单元时,为了不破坏原有的信息,要将寄存单元时,为了不破坏原有的信息,要将寄存器或存储单元的原有内容器或存储单元的原有内容压栈保护压栈保护,或存入,或存入子程序不用的寄存器或存储单元中。子程序不用的寄存器或存储单元中。 保护可以放在主程序中,也可以放在子保护可以放在主程序中,也可以放在子程序中,但程序中,但放在子程序中较好放在子程序中较好。例如:。
20、例如: SUBP PROC NEAR PUSH AX PUSH BX POP BX POP AX RET SUBP ENDP 3子程序调用时参数的传递方法子程序调用时参数的传递方法 调用程序在调用子程序时需要传送调用程序在调用子程序时需要传送一些一些参数参数给子程序,这些参数是子程序给子程序,这些参数是子程序运算中所需要的原始数据,子程序运行运算中所需要的原始数据,子程序运行后要将处理结果返回调用程序。原始数后要将处理结果返回调用程序。原始数据和处理结果的传递可以是数据,也可据和处理结果的传递可以是数据,也可以是地址,统称为以是地址,统称为参数传递参数传递。 参数传递必须事先约定,子程序根据约
21、定从参数传递必须事先约定,子程序根据约定从寄存器或存储单元取原始数据寄存器或存储单元取原始数据 (称称入口参入口参数数);进行处理后将处理结果;进行处理后将处理结果 (称称出口参数出口参数) 送送到约定的寄存器或存储单元,返回到调用程到约定的寄存器或存储单元,返回到调用程序。参数传递一般有下面三种方法。序。参数传递一般有下面三种方法。 (1) 用寄存器传递:用寄存器传递:适用于参数传递较适用于参数传递较少、传递速度快的情况:少、传递速度快的情况: (2) 用堆栈传送:用堆栈传送:适用于参数传递较多、适用于参数传递较多、存在嵌套或递归的情况:存在嵌套或递归的情况: (3) 用存储单元传送:用存储
22、单元传送:适用于参数传递较适用于参数传递较多时,但传递速度较慢。多时,但传递速度较慢。(1)用寄存器传递参数)用寄存器传递参数 采用寄存器传递参数是采用寄存器传递参数是把参数存于约定的寄存器把参数存于约定的寄存器中中,这种方法简单易行,经常采用。,这种方法简单易行,经常采用。 例例66设设ARRAYARRAY是是1010个元素的数组,每个元素是字个元素的数组,每个元素是字节数据。试用子程序计算数组元素的校验和,并将结果节数据。试用子程序计算数组元素的校验和,并将结果存入变量存入变量RESULTRESULT中。所谓中。所谓“校验和校验和”,是指不记进位的,是指不记进位的累加,常用于检查信息的正确
23、性。累加,常用于检查信息的正确性。 分析:子程序完成元素求和,主程序需要向它提供分析:子程序完成元素求和,主程序需要向它提供入口参数,使得子程序能够访问数组元素。子程序需要入口参数,使得子程序能够访问数组元素。子程序需要回送求和结果这个出口参数。在本例中采用寄存器传递回送求和结果这个出口参数。在本例中采用寄存器传递参数。参数。DATA SEGMENT ARRAY DB 01H,22H,33H,14H,90H RESULT DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV BX,OFF
24、SET ARRAY MOV CX,10 MOV AL,0 CALL CHECKSUMA MOV RESULT,AL MOV AH,4CH INT 21HCODE ENDS END START;计算字节校验和的通用过程;计算字节校验和的通用过程;入口参数:;入口参数:DS:BX=数组的段地址:偏移地址数组的段地址:偏移地址 CX=元素个数元素个数;出口参数:;出口参数:AL=校验和校验和;说明:除;说明:除AX/BX/CX外,不影响其他寄存器外,不影响其他寄存器CHECKSUMA PROC SUMA: ADD AL,BX INC BX LOOP SUMA RETCHECKSUMA ENDP(2)
25、 用存储单元传送参数用存储单元传送参数 主程序与被调用过程直接用主程序与被调用过程直接用同一个变量名同一个变量名访问访问传递的参数,就是利用变量传递参数。如果调用传递的参数,就是利用变量传递参数。如果调用程序与被调用程序在同一个源程序文件中,只要程序与被调用程序在同一个源程序文件中,只要设置好数据段寄存器设置好数据段寄存器DS,则子程序与主程序访问变则子程序与主程序访问变量的形式相同,也就是他们量的形式相同,也就是他们共享数据段的变量共享数据段的变量。 例例7针对例针对例6的问题,现在用变量传递参数、的问题,现在用变量传递参数、计算数组元素的和。计算数组元素的和。DATA SEGMENT AR
26、RAY DB 01H,22H,33H,14H,90H COUNT EQU $-ARRAY RESULT DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX CALL CHECKSUMA MOV AH,4CH INT 21HCODE ENDS END START;计算字节校验和的通用过程;计算字节校验和的通用过程;入口参数:;入口参数:ARRAY=数组名,数组名,COUNT=元素个数元素个数;出口参数:;出口参数:RESULT=校验和存放的变量名校验和存放的变量名CHECKSUMA PROC P
27、USH AX PUSH BX PUSH CX MOV BX,OFFSET ARRAY MOV CX,10 XOR AL,AL SUMA: ADD AL,BX INC BX LOOP SUMA MOV RESULT,AL POP CX POP BX POP AX RETCHECKSUMA ENDPcode segment assume cs:codestart: mov ah,01h int 21h call dpcrlf mov ah,01h int 21h call dpcrlf mov ah,01h int 21h call dpcrlf mov ah,01h int 21h mov ah
28、,4ch int 21hdpcrlf proc push ax push dx mov dl,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h pop dx pop ax retdpcrlf endpcode ends end startDATA SEGMENT STR DB 10 DUP(1ASz#) DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV CX,50 MOV SI,0 MOV DL,0CMP1:CMP DL,STRSI JAE OUT
29、1 MOV DL,STRSIOUT1:INC SI LOOP CMP1 MOV AH,2 INT 21H MOV AH,4CH INT 21HCODE ENDS END START习题习题22答案答案(1)DATA SEGMENT STR DB 10 DUP(1ASz#) DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV CX,49 MOV SI,1 MOV DL,STRCMP1:CMP DL,STRSI JAE OUT1 MOV DL,STRSIOUT1:INC SI LOOP CMP1 MO
30、V AH,2 INT 21H MOV AH,4CH INT 21HCODE ENDS END START习题习题22答案答案(2) 24 DATA SEGMENT DAT DB 45H,13H,55H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,DAT MOV BL,DAT+1 MOV CL,DAT+2 MOV AH,4CH INT 21H CODE ENDS END START MOV AL,DAT MOV BL,DAT+1 MOV CL,DAT+2 CMP AL,BL JA
31、 A1 XCHG AL,BLA1:CMP AL,CL JA A2 XCHG AL,CLA2:MOV DAT,AL CMP BL,CL JA A3 XCHG BL,CLA3:MOV DAT+1,BL MOV DAT+2,CL习题习题29答案答案DATA SEGMENT NUM DB 1ABaf.DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV CX,100 MOV BX,0LOOP1:CMP NUMBX,39H JA A2 SUB NUMBX,30H JMP OUT1A2: CMP NUMBX,5AH JA A3 SUB NUMBX,37H JMP OUT1A3: SUB NUMBX,57HOUT1:IN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年静脉输液外渗应急演练方案、脚本及总结(2篇)
- 2025年电子商务师职业技能知识考试题与答案
- 摩托车复工安全知识培训课件
- 摩托摔车安全知识培训内容课件
- 摔跤力量训练课件
- 摄影博主基础知识培训课件
- 烹饪技术考试试题及答案
- 2025新款购房合同
- 2025混凝土班组合同范文
- 搭船的鸟课件
- 附件1:中国联通动环监控系统B接口技术规范(V3.0)
- 箱变设备台账
- 管道工程隐蔽验收记录表
- GB/T 1185-2006光学零件表面疵病
- 微课(比喻句)讲课教案课件
- 银行间本币市场业务简介
- 2023年厦门东海职业技术学院辅导员招聘考试笔试题库及答案解析
- 辽阳市出租汽车驾驶员从业资格区域科目考试题库(含答案)
- (完整版)剑桥通用五级PET考试练习题
- DB32- 4385-2022《锅炉大气污染物排放标准》
- 钢丝绳课件-图文
评论
0/150
提交评论