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

PPT
  • 阅读 33 次
  • 下载 0 次
  • 页数 97 页
  • 大小 327.301 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
第5章汇编语言程序设计课件
可在后台配置第一页与第二页中间广告代码
第5章汇编语言程序设计课件
可在后台配置第二页与第三页中间广告代码
第5章汇编语言程序设计课件
可在后台配置第三页与第四页中间广告代码
第5章汇编语言程序设计课件
第5章汇编语言程序设计课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 97
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】第5章汇编语言程序设计课件.ppt,共(97)页,327.301 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44758.html

以下为本文档部分文字说明:

第5章汇编语言程序设计课件第5章汇编语言程序设计•一.学习如何运用指令系统中的指令来编制,采用汇编语言程序来学习程序设计。•二.学习如何组织、构造一个汇编语言源程序所必需的各种伪指令的格式、作用和使用。学习内容5.1

概述5.2汇编语言语句5.3汇编语言数据5.4伪指令语句5.5宏指令语句5.6顺序程序设计5.7分支程序设计5.8循环程序设计5.9子程序设计5.10实用程序设计示例5.11汇编语言程序的开发了解学习目标理解汇编语言程序中3

种语句格式、特点和作用。理解汇编语言程序中使用的各种运算符;对常用的运算符(如OFFSET、TYPE、PTR等)应会正确使用。掌握汇编语言程序中符号、数据、段结构和过程的定义方法。掌握汇编语言程序中段寄存器的各种加载方法。学习目标

了解宏指令的定义和使用。掌握无条件转移指令、条件转移指令、循环控制指令、子程序的调用和返回指令的格式与使用。掌握顺序、分支、循环和子程序结构的程序设计方法与技术。理解在数值运算、串操作运算和代码转换中程序设计实例。了解汇编语言程序的开发过程。重点难点常用汇编语

言、伪指令、源程序的一般结构;顺序程序设计,分支程序设计,简单循环程序设计,子程序设计;能够读写常用汇编语句编写的程序段。课时安排:6课时媒体使用:使用多媒体投影,主要采用PowerPoint准备的电子教案。§5.1概述程序:能完成一定的运算与操作功能的指令序列,称为~。计

算机语言:计算机语言机器语言汇编语言高级语言是以二进制代码0和1组成的机器指令,是计算机能够直接识别和执行的语言。用助记符表示指令功能的计算机语言,它的指令语句与机器指令一一对应。面向用户,与特定机器属性相分离的程序设计语言,更接近人类语言与数学语言。§5.2汇编语言语句汇编语言程序:

把机器语言程序符号化,且用汇编语言书写的符号指令与用机器语言书写的二进制代码指令(机器指令)有一一对应的关系。汇编语言编制的程序计算机不能识别和执行,必须经过汇编程序的汇编(即翻译)转换成机器语言指令代码(即目标程序),再由计算识别并执行。汇编语言源程序--汇编程序--机器指令代码一个汇

编语言源程序是由若干逻辑段组织的;每个逻辑段由伪指令SEGMENT开始,以ENDS作结束;每个逻辑段均有段名,为调用程序的入口地址。语句是汇编语言程序的基本组成单位。一个汇编语言源程序有3种基本语句:指令语句伪指令语句宏指令语句(或称宏调用语句,在源程序的任意位置上使用宏指令可减少源程序中重复的

编写工作)5.1概述例5-1A+BS=ⅩCA-B数据段堆栈段代码段一.指令语句1.指令语句:指令系统的各条指令,每一条指令语句在源程序汇编时都要产生可供计算机执行的指令代码,又称为可执行语句。2.格式:标号:指令助记符操作数;注释(1)标号-一条指令的符号地址(任

选项)。(2)指令助记符-体现该语句的功能和操作要求(3)操作数-根据指令助记符的要求为单操作数或双操作数。(4)注释-标识每一条指令的功能,但没有相应的机器指令代码。例1:以下为一条双操作数指令语句LOP:

MOVAX,0000H;将AX清零标号指令助记符操作数注释例2:以下为一条单操作数指令语句INCCX;给CX加1二.伪指令语句1.伪指令语句:是指示(命令)汇编程序如何汇编源程序。是由伪指令和相关操作数组成,又称为命令语句。2.格式:段名伪指令符操作数;注

释(1)段名-逻辑段的名称,可以是常量名、变量名、过程名等(任选项)。(2)伪指令符-体现该语句的功能和操作要求(3)操作数-根据指令助记符的要求为单操作数或双操作数。(4)注释-标识每一条指令的功能,汇编时但没有相应的机器指令代码。例1:以下是一条

伪指令语句VB1DB12H;给变量VB1分配一个字节单元,并赋初值12H。段名伪指令符操作数注释三.标识符标识符是指令语句中标号和伪指令语句中的符号名的统称,其组成规则如下:(见教材P174页)指令语句与伪指令语句类型定义格式作用与功能实现方式和时间指令语句指令语句又称为可执行语

句,即每一条指令语句在源程序汇编时都要产生可供计算机执行的指令代码(即目标代码)。在目标程序(即指令代码)运行时,依赖于计算机内的CPU、存储器、I/O接口等硬设备来实现的伪指令语句伪指令语句又称为命令语句,是指示

(命令)汇编程序如何汇编源程序。是由伪指令和相关操作数组成。同上由汇编程序在汇编源程序时,通过执行一段程序来实现的每个语句由4个字段组成:名字操作符号操作数;注释语句格式:名字操作符号操作数;注释1.名字字段:(1)在指令语句中,名字字段为标号,

为一任选字段,且一定是用“:”作为标号的结束符,是一条指令的符号地址通常是一个程序段或子程序的入口指令语句选用标号。(2)在伪指令语句中,可为常量名、变量名、段名和过程名等,该字段是任选还是必需的,要视伪指令而定。名字字段后面用空格作结束符,不得使用冒号。(3)组成名字的规则

:P174页。2.操作符字段:是指令助记符,表示目标程序在运行时中央处理器CPU应完成的功能。3.操作数字段:是由操作符字段(指令助记符/伪指令)确定。该字段与操作符字段之间用空格或制表符TAB为分界符。各操作数之间用逗号或空格分隔。4.注释字段:本字段为

任选字段,以分号作这字段的开始符,可由任意字符串表示。是对某些程序段或指令加以注解,说明它们的功能及意义。§5.3汇编语言数据§5.3.1符号定义语句(两种伪指令)(1)等值伪指令、(2)等号伪指令§5.3.2数据定义语句(1)数值表达式、(2)?表达式、(

3)字符串表达式、(4)带DUP表达式§5.3汇编语言数据§5.3.3数据(1)常数、(2)寄存器操作数、(3)存储器操作数§5.3.4运算符(5种)(1)算术运算符、(2)逻辑运算符、(3)关系运算符、(4)数值返回运算符、(5)属性运算符、(6)运

算符优先级§5.3.1符号定义语句1.等值伪指令:格式:功能:EQU是等值伪指令,它把右边<表达式/符号>的值或符号赋给EQU左边的符号。注意:等值伪指令语句仅在汇编源程序时,作为替代符号作用,不产生任何目标代码,也不分配存储单元

。在同一源程序中,同一符号不能用EQU伪指令重新定义。符号EQU表达式/符号<表达式/符号>:见教材以下各例题(1)常数或数值表达式:例:COUNTEQU15*2+10(2)地址表达式:例:ADDR1EQUDS:[BP](3)变量名、标号或指令助记符例:NM

U1EQUCOUNT1;BEINGEQUSTART;BTODEQUDAA;为变量名CUNT1另定义一个别名。为标号START另定义一个别名。为指令助记符DAA另定义一个别名。2.等号伪指令:格式:符号=表达式/符号功能:与EQU相同。等号伪指令与等值伪

指令之间的差异:(1)等号伪指令可以重新定义符号。(2)等号伪指令可以为已定义的变量名或标号定义另一个别名,但不能为指令助记符定义另一个别名。例:CONT=10HM=MOV。。。CONT=CONT+10HM=ADD§5.3.2数据

定义语句变量:是指存放在存储单元的数据,在程序执行中,允许其值发生变化。在存储区中,设置常数、数据或保留若干存储单元,应使用数据定义伪指令:§5.3.2数据定义语句数据定义伪指令有:DB—定义字节数据DW—定义字数据DD—定义双

字数据DF—定义6字节数据DQ—定义8字节数据DT—定义10字节数据数据定义语句的格式:变量名表达式1,表达式2,……例:DBDWDDDATASEGMENTVAR1DB12HVAR2DW1234HVAR3DD12345678HDATAENDSSEGMENT/ENDS表示逻辑

段的开始/结束经过数据定义语句定义的变量,均有3个属性:(1)段属性(SEG):表示变量存放在哪个逻辑段中,且用这个逻辑段的段基值表示。(2)偏移量属性(OFFSET):表示在逻辑段中离段起始单元(段基址)的距离(字节

数)。(3)类型属性(TYPE):表示变量的数据的大小(字节数据、字数据、双字数据),主要依据DB、DW、DD等伪指令来确定的。几种表达式:1.数值表达式:2.例:3.2.?表达式:DA__B1DB50DA__B2DB12H,34H

,56HDA__W1DW1234HDA__W2DW1234H,5678H,9ABCH?——表示可预置任意内容。?表达式常用于保留一个或多个存储单元,以备程序运行时,作工作单元或保存结果用。VAR__BDB?,?VAR__WD

W?,?3.字符串表达式:(1)字符串必须用引号(单引号或双引号)括起来。(2)字符串中各字符均是以ASCII码形式存放在相应存储单元中。(3)DB、DW、DD中的字符串的表示形式和字符ASCII码的存储顺序的差异。具体见教材P

177页,及图5—2。4.带DUP表达式:变量名表达式1DUP(表达式2)例:定义重复数据操作符。DBDWDD是数据的重复的次数。是重复数据的内容。NU__B1DB10HDUP(?)NU__W1DW20HDUP(10H);保留10H个字节单元,每个字节单元可预置任意内容。;保留20

H个字节单元,每个字节单元预置数据为10H,共占有40H个字节存储单元。§5.3.3数据一、常数:1.数值常数:2.字符常数:用单引号或双引号括起来的一个或多个字符组成的字符序列,称为字符常数。数据有数值和属性,两部分,对一个语句汇编成机器目标代码有直接关系。是没有任何属性

的纯数值。二进制数10111B十进制数982D八进制数21B、73Q十六进制数7AE6H常数的应用:(1)在指令语句的源操作数中作立即数操作数。例:(2)在指令语句的寻找存储器操作数的各种寻址方式中作位移量。例:(3)在某些伪指令语句

的操作数字段中,赋值数据。例:见教材P179MOVAL,0ABHMOVBX,‘AB’;此处的‘AB’指其ASCII代码4142HMOVAL,DS:[140H];直接寻址方式MOVBX,45H[SI];变址寻址方式MOV0FEH[BP],AL;基址寻址方式MOV1234

H[BH][DI],AX;基址变址寻址方式二、寄存器操作数:1.CPU中通用寄存器和段寄存器的内容可作操作数使用。2.CS仅可作源操作数,其他寄存器均可。3.指令指针IP不可作寄存器操作数使用.4.寄存器的内容作操作数的数据时,用寄存器名表示.5.寄存器作地址指针时,要将寄存

器名用方括号括起来.三、存储器操作数:1.变量:在一个逻辑段中,用数据定义语句定义并预置数据初值后,变量名就作为存储单元的符号地址,代表了存放在存储单元的数据。指存储单元中的内容,变量、标号及地址表达式是这种操作数的主要表示形式。1.变量:使用变量的两种情况:(1)在指

令语句中的操作数字段中,变量名作为址表达式的组成部分之一。(2)在用DW或DD的数据定义语句中,有三种情况,见教材P181。2.标号:定义:指令语句的名字字段上的名字,称为标号。是一条指令的符号地址。标号常作为转移类指令的操作数,表示

转移的目标地址。标号的3个属性:(1)段属性(SEG):表示标号所在指令的逻辑段,且用该逻辑段的段基值表示。(2)偏移量属性(OFFSET):表示标号所在指令距离起始单元之间的字节数。(3)类型属性(TYPE):是作为段内转移不是段间

转移的目标地址。有两种。NEAR(近):段内转移FAR(远):段间转移§5.3.4运算符1.算术运算符:(表5-1)2.逻辑运算符:按位进行运算。AND、OR、XOR、NOT3.关系运算符:用于比较两个表达式值

的大小。当比较关系式成立时,用全1表示“真”;当比较关系式不成立时,用全0表示“假”。具体内容见教材4.数值返回运算符:定义:数值返回运算符的运算对象是存储器操作数,即由变量名或标号组成的地址表达式。格式:<运算符><地址表达式>(1)SEG和OFF

SET运算符:主要反映存储器操作数的地址部分。该运算符出现在变量名或标号的前面,返回这个变量名或标号所在段的段基值勤或在段内的偏移量。例:(2)TYPE运算符:TYPE运算符是用数字形式表示变量或标号的类型属性。(3)LENGTH和SIZE运算符:运算符仅加在变量名的前面,它

返回的是数组变量的元素个数(LENGTH)和数组变量所占的总字节数(SIZE)。运算规则:变量是用重复操作符DUP定义的,则LENGTH的运算结果是外层DUP的给定值(即外层重复次数)。若无DUP定义,则结果总是1。SIZE是LENGTH和TYPE两个运算结

果的乘积。反映存储器操作数的某些特征。5.属性运算符PTR:定义:PTR是用来临时对存储器操作数的类型进行设定、说明。格式:<运算符><地址表达式>例:6.运算符优先级:(表5-5运算符优先级)(1)先执行优先级别高的运算符;(2)优先级别相同的运算符,按照从

左至右顺序进行;(3)可用圆括号改变运算的顺序。§5.4伪指令语句§5.4.1段定义语句重点学习段寄存器的各种加载方式§5.4.2过程定义语句§5.4.3定位语句和位置计数器§5.3.4偶地址控制语句§5.3.5程序标题语句§5.4.1段定义语句一、段定义伪指令(SEGMENT/EN

DS)定义:用于程序中设置一个段(逻辑段)。格式:段名SEGMENT[定位类型][组合类型][‘类别名’]本段语句序列(指令序列、伪指令或数据)段名ENDS…1.段名:2.定位类型:定义:表示对段的起始边界的要求。定位类型选项:(4种)(1)PAG

E(页):表示本段从一个页的边界开始。段的起始地址一定能被256整除。段的起始单元地址(段基址)的最后8位二进制数为0(00H)。(2)PARA(节):表示本段从一个小节的边界开始。段的起始单元最后4位二进制数为0(0H)。(3)WORD(字):表示本段从一个偶字节地址开始。段的起始单元最后

2位二进制数为0(4)BYTE(字节):表示本段起始单元可以从任一地址开始。由用户自己设定,在程序中当需要引用或调用某逻辑段时,即用段名表示。3.组合类型:表示段与段之间的连接与定位。有6种选择:(教材P188页

)4.类别名:注:定义一个逻辑段时,段名是必选项,其他三个参数是任选的,各参数之间用空格分隔。任选是可只选其中1-2个,但是不能改变它们的先后顺序关系。(1).NONE:(2).PUBLIC(3).COMMON(4).STACK(5).AT(6)

.MEMORY例:下面是一个源程序分段结构DATA1SEGMENTPARA‘DATA’DATA1ENDSSTACK1SEGMENTPATASTACK‘STACK’STACK1ENDS……二、段寻址伪指令(ASSUME)A

SSUME伪指令格式:功能:告诉汇编程序已定义的段与段寄存器之间的对应关系。ASSUME随时修改或撤除1-4个段寄存器与已定义段之间的关系。ASSUME段寄存器名:段名,段寄存名:段名,……指4个段寄存器CS、DS、SS、ES中之一指用SEGMENT/E

NDS伪指令语句中给定的段名。ASSUMEES:NOTHING;撤消对ES的设置ASSUMENOTHING;撤消全部段寄存器的设置例:DATA1SEGMENTVAR1DB12HDATA1ENDSDATA2SEGMENTVAR

2DB34HDATA2ENDSCODESEGMENTASSUMECS:CONE,DS:DATA1,ES:DATA2START……MOVAL,VAR1MOVBL,VAR2CODEENDS……ASSUME定义:段寄存器CS、DS和ES分别存放CODE段、DATA1段和DATA

2段的段基值数据定义语句DB定义:一是VAR1存放在DATA1的逻辑段中,其段基值即为DATA的段基值;二是VAR1为字节数据。三是VAR1的偏移量为0。MOV取出存储器操作数VAR2,变量VAR2在DATA2段,其段基值在ES中。三、段寄存器的加载1.DS

和ES的加载:2.(1)DS——数据段寄存器。ES——附加段寄存器。(2)在程序中,引用段名即以立即数形式获取该段的段基值,而立即数又不能直接传送给段寄存器,所以在借助于通用寄存器传送段基值给DS、ES。例:DA

TA_DSSEGMENTDA1DB12HDATA_DSENDSDATA_ESSEGMENTDA2DB10HDUP(0)DATA_ESENDSCODESEGMENTASSUMECS:CONE,DS:DATA1,ES:DATA2START:MOVAL,DATA_DSMOVDS,

AXMOVAX,DATA_ESMOVES,AXCODEENDS…代码段CODE中第1、3条是以立即数形式把DATA_DS段和DATA_DS段的段基值分别送给通用寄存器AX。第2、4条把AX中的内容(段基值)分别传送给段寄存器DS、ES。2.SS的加载:SS是堆栈段寄存器

,对它加载段寄存器就是设置堆栈。两种SS的加载方法:(1)自动加载:在段定义伪指令(SEMENT)的组合类型中选择“STACK”参数,就表明这个段是堆栈段。(2)用执行程序的办法加载:在程序运行中要调换另一个堆栈段,这时可用类似于DS和ES的加载办法,对SS和SP进行即时修改。例:S

TACK2SEGMENTDW40HDUP(?)TOPLABELWORDSTACK2ENDSCODESEGMENTMOVAL,STACK2MOVSS,AXMOVSP,OFFSETTOPCODEENDS……3.CS的加载:CS和IP提供当前执行目标代码的段

基值和偏移量。对CS和IP设置、修改的两种途径:(1)用结束伪指令END加载程序的起始地址。(2)执行程序转移类指令,实现从一个段转移到另一个段时,它的指令功能就是修改CS和IP。用结束伪指令END加载程序的起始地址。格式

:其中:地址表达式是一个已定义的标号或一个本标号加减一个常数。是这个程序执行的第一条指令语句的地址。例:END地址表达式CODESEGMENTASSUMECS:CONE,…START:MOVAL,DATACODEENDSENDSTART……结束

伪指令END的作用:一是源程序到此结束,后面的任何语句均被汇编程序略去;二是将地址表达式所确认的存储单元的段基值和偏移量分别自动装入CS和IP中。§5.4.2过程定义语句格式:注意:(1)定义过程的开始(PROC)和结束(ENDP)使用同一过程名,且过程名不能省略。(2)过程名

即为子程序名,也子程序调用指令(CALL)的目标操作数。(3)过程名也有3个属性。其中类型分为NEAR和FAR。具体内容见教材P192页。过程名PROC[NEAR/FAR]RET过程名ENDP……§5.4.3定位语句和位置计数格式:注意:(1)定义过

程的开始(PROC)和结束(ENDP)使用同一过程名,且过程名不能省略。(2)过程名即为子程序名,也子程序调用指令(CALL)的目标操作数。(3)过程名也有3个属性。其中类型分为NEAR和FAR。具体内容见教材P192页。过程名PROC[NEAR/FAR]RET过程名

ENDP……§5.5宏指令语句宏汇编程序:能处理宏指令功能的汇编程序。宏指令的使用过程是:宏定义、宏调用、宏展开。1.宏定义格式:(1)不带参数宏定义:(2)带参数宏定义:宏指令必须首先进行宏定义。MACRO和ENDM是宏定义的开

始和结尾伪指令。宏名MACROENDM…宏体宏名MACROENDM…宏体形参1,形参2……2.宏调用格式:(1)不带参数宏调用:(2)带参数宏调用:在宏指令定义后,在源程序的任意位置上可以使用宏指令语句(即宏调用)宏名宏名实参1,实参2,……MULTAX10MULT

10AX,BA………3.宏展开宏展开的定义:——当宏汇匾程序扫描到宏指令语句(宏调用)时,就把宏定义中宏体的程序段目标代码插入宏指令语句的位置上。§5.6顺序程序设计顺序程序是最简单的,也是最常用的程序结构形式。其特

点:程序运行时,完全按照编写的指令顺序执行,且每条指令仅执行一次。例:5-2见教材P197页。例:5-3见教材P199页。5.6顺序程序设计-例5-2(1)10*(X+Y)-3*(Z-1)F=X+Y+Z5.6顺序程序设计-例5-2(2)TITLEEXAMPLE

PROGRAMDATASEGMENTVARXDW123HVARYDW456HVARZDW789HF1DW?F2DW?DATAENDS设置数据段可以预置任意内容5.6顺序程序设计-例5-2(3)STACK1SEGMENTPARASTACKDW20HDUP(0)S

TACK1ENDS设置堆栈段5.6顺序程序设计-例5-2(4)CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1BEGIN:MOVAX,DATAMOVDS,AX5.6顺序程序设计-例5-2(5)MOVAX,VARXADDAX,VARYMOVBX,10MULBX

MOVBX,VARZDECBXMOVCX,BXSALBX,1ADDBX,CXSUBAX,BX5.6顺序程序设计-例5-2(6)MOVBX,VARXADDBX,VARYADDBX,VARZXORDX,DXDIVBXMOVF1,AXMOVF2,

DXMOVAH,4CHINT21HCODEENDSENDBEGIN软中断INT21H程序设计中的流程图流程图中的几个框图符号组成:条件AA(a)处理框(b)判别框(c)起止框(d)连接框(e)流向框开始结束例:P73,图3-8(无符号整

数一位乘算法流程框图)n位被除数—Bn位乘数—C,0—AC0=1?结束开始A,C右移一位A+0—AA+B—AC0=1?NYNY§5.7分支程序设计§5.7.1转移指令无条件转移指令条件转移指令§5.7

.2分支程序设计直接用条件转移指令实现程序分支用跳转表实现多路分支§5.7.1转移指令一、无条件转移指令:格式:JMP目标功能:使程序无条件地转移到“目标”处。目标地址的两种表达方式:1.直接寻址方式:2.间接

寻址方式:1.直接寻址方式:JMPTARGET1JMPTARGET2………TARGET1:RD1……TARGET2:RD2(a)正向转移(b)负向转移图5-4段内转移的直接寻址方式正、负向转移都是相对转移,即目标处指令地址与当前JMP指令相对偏移一个位移量。这位移量是以JMP指令的下一条指令

与目标处指令之间相距字节数来计算。若目标处指令地址高于JMP指令地址,称为正向转移,反之亦反。CODE1SEGENTTARGET1LABELFARTARGET:CODE1ENDSCODE1SEGENTJMPFARPTRT

ARGET1CODE2ENDS……………图5-5段间转移的直接寻址方式段间转移,执行JMP指令时,就把目标处指令地址的段基值和偏移量直接送入CS和IP即可。在执行段内转移的JMP指令时,就把存放在通用寄存器或字单元中的偏移量送入IP中,

CS不变,实现段的程序转移。例:JMPCXJMPWORDPTR[BX]JMP[BX]在执行段间转移的JMP指令时,把存放在双字单元中前2个字节单元的偏移量送入IP,后2个字节单元的段基值送CS,实现间的程序转移。例:JMPDWORDPTR[BX]2.间接寻址方

式:JMP指令的目标地址在一个通用寄存器/存储单元内(段内转移)或在存储器的双字单元内(段间转移)。二、条件转移指令:Intel8086/8088指令系统中条件转移指令共有18条。格式:J××目标这18条指令都

是以标志位寄存器中某一个或几个标志位作为判断条件。条件转移指令只能是段内转移,也是相对转移。条件转移指令的种类:(具体内容见教材P203页)简单条件转移指令无符号数条件转移指令带符号数条件转移指令§5.7.2分支程序一、直接用条件转移指令实现程序分支例5-4:编写一程序段,

实现表达式运算。例5-5:编制一程序,实现两存储区之间的数据传送。二、用跳表实现多路分支构造跳转表可用分支程序段的入口地址组成,也可用若干无条件转移指令组成。例5-6:由入口地址组成跳转表的多路分支

程序设计。例5-7:由转移指令组成跳转表的从路分支程序设计。分支程序的结构的两种形式,见教材P204,图5-6§5.8循环程序设计§5.8.1循环控制指令LOOP指令、LOOPE/LOOPZ指令LOOPNE/LOOPNZ指令、JCXZ指令§5.8.2循环程序的结

构及循环控制方法循环程序的结构循环控制方法§5.8.3单重循环程序设计§5.8.4多重循环程序设计采用循环程序结构实现需要反复执行一段程序才能实现的功能。§5.8.1循环控制指令4条循环控制指令:循环控制指令是程序转移类指令,也是相对转移。相对位移量是8位二进制以补

码形式表示的带符号整数,即循环控制指令的下一条指令与目标指令之间的字节距离为-128~+1274条循环控制指令都有隐含使用寄存器CX。采用循环程序结构实现需要反复执行一段程序才能实现的功能。LOOP指令LOOPE/LOOPZ指令LOOPNE/LOOP

NZ指令JCXZ指令1、LOOP指令格式:LOOP目标功能:指令先进行循环次数计数(即CX(CX)-1),然后判断循环是否结束。如(CX≠0),则转移到目标处,继续循环,否则顺序执行下一条指令。例5—8:

编制一程序,产生n个数的裴波纳契数列。(具体内容见教材P212页)例题:要求从ARY数组的10个无符号数中找出最大者送入MAX单元。如果用LOOP指令实现循环,则源程序为:DATASEGMENTARYDB17,5,40,0,67,12,34,78,32,10MAX

DB?DATAENDSSTACK1SEGMENTPARASTACKDW20HDUP(0)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START:MOVAX,DATAMOVDS,AXMOVSI,OFFSETARY;S

I指向数组ARY的第一个数MOVCX,9;循环的次数MOVAL,[SI]LOP:INCSI;SI——SI+1CMPAL,[SI];比较AL-[SI]JAEBIGER;A≥B成立,转入BIGERMOVAL,[SI]BIGER:LOOPLOP

;CX——(CX)+1,判断循环是否结束MOVMAX,ALMOVAH,4CHINT21HCODEENDSENDSTART完成返回DOS系统2、LOOPE/LOOPZ指令格式:LOOPE目标或LOOPZ目标功能:指令先进行

循环次数计数(即CX(CX)-1),然后判断循环是否结束。如(CX≠0)且ZF=1,则转移到目标处,继续循环,否则(即(CX)=0或ZF=0)顺序执行下一条指令。例5—9:(具体内容见教材P214页)3、LOOPNE/LOOPNZ指令

格式:LOOPNE目标或LOOPNZ目标功能:指令先进行循环次数计数(即CX(CX)-1),然后判断循环是否结束。如(CX≠0)且ZF=0,则转移到目标处,继续循环,否则(即(CX)=0或ZF=1)顺序执行下一

条指令。例5—10:(具体内容见教材P215页)4、JCXZ指令格式:JCXZ目标功能:指令先测试CX的内容,如(CX)=0,则转移到目标处,否则顺序执行下一条指令。§5.8.2循环程序的结构及循环控制方法一、循环程序的结构:初始化部分工作部分修

改部分控制部分结束处理部分二、循环控制方法计数控制循环条件控制循环§5.8.3单重循环程序设计单重循环程序的主要特点:循环体由顺序结构或分支结构的一段程序构成。例5—11/12:P219—220页§5.8.4多重循环程序设计多重循环程序就是循环套循环结构形式的程序例5—13

/14:P222—223页§5.9子程序设计§5.9.1调用与返回调用指令(段内直接、段内间接、段间直接)返回指令(段内、段间、带弹出值的返回指令RETn)§5.9.2编制子程序的基本要求§5.9.3子程序设计举例§5.9.4系统功能子程序的调用DOS功能子程序的调用

BIOS功能子程序的调用为缩短目标代码,节省内存空间,把一指令序列构成一个相对独立的程序段,以过程的形式组成子程序。§5.9.1调用与返回一、调用指令:格式:CALL过程名/子程序名功能:过程名/子程序名就是子程序入口处的符号地址,执行CALL指令时,首先保留断点地址于堆栈中,然后程序

转移到指定的子程序入口地址。1.段内直接调用2.段内间接调用3.段间直接调用4.段间间接调用二、返回指令:段内返回段间返回带弹出值的返回指令RETn执行返回指令RET后,便按返回地址转移到调用程序。§5.9.2编制子程序的基本要求1.具有一定的通用性2.选择适当的参数

传递方法3.注意保存信息4.正确使用堆栈5.编写清晰的子程序文本§5.9.3子程序设计举例1.用寄存器传递参数2.用堆栈传递参数3.用地址表传递参数§5.9.4系统功能子程序的调用DOS功能子程序的调用

BIOS功能子程序的调用§5.10实用程序设计示例§5.10.1数值运算程序设计示例§5.10.2串操作程序设计示例§5.10.3代码转换程序设计示例§5.11汇编语言程序的开发本章小结汇编语言属于低层次的程序

设计语言,低层次主要体现在同计算机内部结构联系紧密上。本章是介绍以Intel8086/8088系列CPU为背景的MASM宏汇编语言及其程序设计。学习了组织一个源程序所必需的各种伪指令,以及用这些伪指令构造逻辑段,定义过程(

子程序),定义数据和符号,实现宏功能。在程序设计时,一是先分析好程序功能,二是拟定实现程序功能的步骤和方法(流程图),三是运用指令系统中相关指令,编制汇编源程序。作业一.设VAR1,VAR2是变量名,指出下列语句语法是否

有错,是什么错。MOVAX,VAR1+VAR2MOVBL,ALSHR3MOVBYTEPTR[BX],1000二.下列指令执行后,(AL)=?,如将SHR指令换成ROR或RCR,那么AL中的内容分别是多少。MOVAL,0FHXORAL,0FFHMO

VCL,7SHRAL,CL三.试用两条指令完成对寄存器AH和AL分别加1,且AL中加1形成的进位加在AH的最低位,AH中加1形成的进位加在AL的最低位。

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?