书签 分享 收藏 举报 版权申诉 / 107
上传文档赚钱

类型汇编程序设计课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4146594
  • 上传时间:2022-11-14
  • 格式:PPT
  • 页数:107
  • 大小:295.73KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《汇编程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    汇编程序 设计 课件
    资源描述:

    1、F算术运算指令的例子算术运算指令的例子1.设两个十进制数设两个十进制数1234和和5678分别存放在数据分别存放在数据段中从段中从1000H和和2000H开始的单元中,计算这两开始的单元中,计算这两个数的和,结果存放在个数的和,结果存放在3000H开始的单元中开始的单元中MOV AL,1000ADD AL,2000;低字节相加低字节相加DAA;十进制调整十进制调整MOV 3000,AL;存低字节和存低字节和MOV AL,1001ADC AL,2001;高字节带进位相加高字节带进位相加DAA;十进制调整十进制调整MOV 3001,AL;存高字节和存高字节和F算术运算指令的例子算术运算指令的例子2

    2、.实现非压缩实现非压缩BCD数数6 8=48的程序的程序MOV AL,06MOV BL,08MUL BL;AAM;AX(AL)(BL)十进制调整,使十进制调整,使(AX)=0408F算术运算指令的例子算术运算指令的例子3.实现非压缩实现非压缩BCD数数17 5=3余余2的程序的程序MOV AX,0107MOV BL,05AAD;DIV BL;除法,得商除法,得商(AL)=03,余数余数(AH)=02十进制调整,使十进制调整,使(AX)=0011三三 逻辑运算指令逻辑运算指令F位操作位操作AND 目标操作数,源操作数目标操作数,源操作数OR目标操作数,源操作数目标操作数,源操作数XOR 目标操作

    3、数,源操作数目标操作数,源操作数NOT 目标操作数目标操作数F位操作位操作AND 按位相与,主要用于将二进制数的某些位按位相与,主要用于将二进制数的某些位清清0。AND BL,0FHxxxxxxxx (BL)00001111 0F0000 xxxx 结果结果ANDF位操作位操作OR按位相或主要用于将二进制数的某些位按位相或主要用于将二进制数的某些位置置1。OR BL,0FHxxxxxxxx (BL)00001111 0Fxxxx1111 结果结果ORF位操作位操作XOR 按位相异或主要用于将二进制数的某些按位相异或主要用于将二进制数的某些位求反。位求反。XOR BL,0FHxxxxxxxx (

    4、BL)00001111 0Fxxxxxxxx 结果结果XORF移位操作移位操作指令指令格式:格式:SHL 目标操作数,计数目标操作数,计数移移1位时,计数值可以为立即数位时,计数值可以为立即数1移多位时,计数值必须先存入移多位时,计数值必须先存入CL寄存器寄存器MOV CL,3SHL AX,CLF移位指令操作过程移位指令操作过程CF000最低位最低位最低位最低位最低位最低位最低位最低位最高位最高位最高位最高位最高最高位位最高位最高位CFCFCFSALSHLSARSHR 非循环移位非循环移位F移位指令操作过程移位指令操作过程 循环移位指令循环移位指令CFCFCFCFROLRORRCLRCRF位测

    5、试位测试TEST 与与AND一样将两个操作数按位相与,但一样将两个操作数按位相与,但结果不回送,只影响标志位。结果不回送,只影响标志位。TEST AL,1JNZ RIGHTTEST AL,128JNZ LEFT当被测试为为当被测试为为0时,时,ZF置位(置位(ZF=1);当被测试为为当被测试为为1时,时,ZF复复位(位(ZF=0)四、四、串操作指令串操作指令F串传送串传送MOVSBMOVSW将一个字节将一个字节/字从字从DS:SI ES:DI指令前要先将源串首地址指令前要先将源串首地址 DS:SI 目标串首地址目标串首地址 ES:DI完成操作后自动修改完成操作后自动修改SI、DI,使其指向串使

    6、其指向串的下一个元素的下一个元素F串传送串传送完成操作后自动修改完成操作后自动修改SI、DI,使其指向串使其指向串的下一个元素的下一个元素串操作方向由串操作方向由CLD和和STD指令设置指令设置CLD 地址地址递增方向(递增方向(DF=0)STD 地址地址递减方向(递减方向(DF=1)F串传送串传送 重复前缀重复前缀需要先将串的长度存入需要先将串的长度存入CX寄存器寄存器每处理完一个元素自动使每处理完一个元素自动使CX-1,直到直到CX=0才结束串传送才结束串传送完成整个串的传送完成整个串的传送REP MOVSBREP MOVSW例:例:P.46例:例:F串传送串传送MOV SI,OFFSET

    7、 S1MOV DI,OFFSET S2MOV CX,18REP MOVSB.S1 DB“This is a string!$”S2 DB 18 DUP(0)F串比较串比较CMPSBCMPSW比较地址为比较地址为DS:SI、ES:DI的的两两个字节个字节/字,同时修改字,同时修改SI和和DI指指向下一个元素。向下一个元素。指令前通常加重复前缀指令前通常加重复前缀REPZ/REPE,从而从而当发现两个串不同时结束比较当发现两个串不同时结束比较,这样就可以这样就可以找到两个串中第一个不相等元素或第一个找到两个串中第一个不相等元素或第一个相等的元素。相等的元素。例:例:F串比较串比较MOV SI,OF

    8、FSET S1MOV DI,OFFSET S2MOV CX,xxREPZ CMPSBJNZ Not_EqualEqual:Not_Equal:.F串搜索串搜索SCASBSCASW在首地址为在首地址为ES:DI的的串中搜索串中搜索某个元素(字节某个元素(字节/字),同时字),同时修改修改DI指向下一个元素。指向下一个元素。事先要将待搜索的元素存入事先要将待搜索的元素存入AL/AX指令前通常加重复前缀指令前通常加重复前缀REPNZ/REPNE,从而当发现待搜索的元素时结束搜索。从而当发现待搜索的元素时结束搜索。例:例:F串搜索串搜索MOV DI,OFFSET StringMOV CX,xxMOV

    9、AL,hREPNZ SCASBJNZ Not_FoundFound:Not_ Found:.F串装入串装入LODSBLODSW将地址为将地址为DS:SI的的一个字节一个字节/字字装入装入AL/AX,同时修改同时修改SI指向指向下一个元素。下一个元素。串装入指令没有重复前缀串装入指令没有重复前缀例:例:MOV SI,OFFSET StringMOV CX,xxMOV AH,2LODSBMOV DL,ALINT 21LOOP NextCharNextChar:F串装入串装入F串存储串存储LODSBLODSW将将AL/AX的值存入地址为的值存入地址为ES:DI的的内存单元,并修改内存单元,并修改DI

    10、指向下一个元素。指向下一个元素。利用重复前缀利用重复前缀REP,可以建立一个取值相可以建立一个取值相同的数据串。同的数据串。五、五、程序控制指令程序控制指令控制程序的流向:控制程序的流向:无条件转移无条件转移条件转移条件转移循环控制循环控制过程调用与返回过程调用与返回中断指令中断指令F无条件转移无条件转移JMP Label1.Label1:相当于相当于goto语句语句(1)段内直接转移段内直接转移 JMP 2000H ;IP=2000H(2)段内间接转移段内间接转移 JMP AX ;IP=(AX)(3)段间直接转移段间直接转移 JMP 2500H:0100H ;CS=2500H,IP=0100

    11、H(4)段间间接转移段间间接转移 JMP DWORD PTRSI ;IP和和CS的的内容用内存中内容用内存中2个连续的字来替代。个连续的字来替代。F条件转移条件转移根据执行上一指令后标志寄存器的状态而根据执行上一指令后标志寄存器的状态而决定是否转移决定是否转移JA/JNBE;,CF v ZF=0JAE/JNB;=,CF=0JB/JNAE;,CF=1JBE/JNA;,ZF=0且且SF xor OF=0JGE/JNL;=,SF xor OF=0JL/JNGE;,SF xor OF=1JLE/JNG;=,ZF=1或或Sf xor OF=1判断有符号数大小的条件转移判断有符号数大小的条件转移F条件转移

    12、条件转移F条件转移条件转移JZ/JE ;ZF=1JNZ/JNE ;ZF=0JC;CF=1JNC ;CF=0JO ;OF=1JNO ;OF=0JP/JPE ;PF=1JNP/JPO ;PF=0JS ;SF=1JNS ;SF=0单标志位条件转移单标志位条件转移F循环控制循环控制LOOP ;CX=0LOOPE/LOOPZ ;CX=0或者或者ZF=0LOOPNE/LOOPNZ ;CX=0或者或者ZF=1循环控制指令所控制的目的地址都用标号表示,循环控制指令所控制的目的地址都用标号表示,该标号都在距当前该标号都在距当前IP-128+127范围,且范围,且与与CX配配合使用,合使用,CX存放循环次数。存放

    13、循环次数。F子程序调用和返回指令子程序调用和返回指令段内段内直接调用:直接调用:CALL 1000H ;IP=1000H段内间接调用:段内间接调用:CALL AX ;IP=(AX)段段间直接调用:间直接调用:CALL 2500:1000H ;IP=1000H,CS=2500H段段间间接调用:间间接调用:CALL DWORD PTR SI ;IP在在SI指向的单元中,指向的单元中,CS 在在IP+2指向的单元中指向的单元中返回指令:返回指令:RET ;弹出弹出IP和和CS,返回主程序返回主程序F中断指令中断指令INT n,INTO和和IRET执行执行INT n时,会引起时,会引起CPU转入一个中

    14、断服务转入一个中断服务程序。其过程为:程序。其过程为:()首先标志位入堆栈)首先标志位入堆栈()清除中断允许标志)清除中断允许标志IF和单步标志和单步标志TF()保护断点,即断点地址入栈保护断点,即断点地址入栈()将)将n4得到的中断向量送得到的中断向量送IP和和CSF中断指令中断指令INT n,INTO和和IRETINTO 为溢出中断指令,当为溢出中断指令,当OF=1是,是,INTO的中断处理程序会给出出错标志。的中断处理程序会给出出错标志。IRET 中断返回指令,和中断指令配套使用,中断返回指令,和中断指令配套使用,用以退出中断过程,返回到主程序。用以退出中断过程,返回到主程序。F处理器控

    15、制指令处理器控制指令1、标志操作指令、标志操作指令CLC ;清清CF=0CMC ;使使CF取反取反STC ;置置CF=1CLD ;清清DF=0STD ;置置DF=1 CLI ;清清IF=0STI ;置置IF=1F处理器控制指令处理器控制指令2.处理器暂停指令处理器暂停指令HLT以下三种情况可使以下三种情况可使8088脱离暂停状态脱离暂停状态:(1)在在RESET上有复位信号上有复位信号(2)在在NMI线上有非屏蔽中断请求线上有非屏蔽中断请求(3)中断允许(中断允许(IF=1)时,时,INTR上有请求上有请求F处理器控制指令处理器控制指令3.处理器交权指令处理器交权指令ESC用于向外部处理机提供

    16、了从用于向外部处理机提供了从8088获得操作码获得操作码和存储器操作数的手段,用于多处理机中,和存储器操作数的手段,用于多处理机中,即即8088的最大工作模式。的最大工作模式。4.等待指令等待指令WAIT使使CPU进入等待状态,直至进入等待状态,直至TEST线上的信线上的信号有效为止,用于与外部接口电路的同步。号有效为止,用于与外部接口电路的同步。F处理器控制指令处理器控制指令5.总线封锁指令总线封锁指令LOCK可以放在任何一条指令前,是一个指令前缀。可以放在任何一条指令前,是一个指令前缀。用于最大工作模式。在执行紧跟在用于最大工作模式。在执行紧跟在LOCK前前缀之后的那条指令期间,发出总线封

    17、锁信号,缀之后的那条指令期间,发出总线封锁信号,并使该信号保持到该指令执行完。并使该信号保持到该指令执行完。LOCK信信号有效期间其它处理机不得占用总。号有效期间其它处理机不得占用总。6.空操作指令空操作指令NOPNOP使使CPU不做任何工作,它不影响标志,不做任何工作,它不影响标志,主要用于时序配合。主要用于时序配合。3.1 概述概述3.2 汇编语言程序的控制结构汇编语言程序的控制结构3.3 数据定义数据定义3.4 汇编语言的运算符汇编语言的运算符3.5 基本结构程序设计基本结构程序设计3.6 DOS/BIOS中断调用中断调用3.7 宏汇编与条件汇编宏汇编与条件汇编3.8 外部引用与全局说明

    18、外部引用与全局说明3.9 与高级语言的接口与高级语言的接口3.1 概述概述机器语言:计算机最终能识别的二进制语言。机器语言:计算机最终能识别的二进制语言。汇编汇编 语言:用助记符描述的语言,要求程序语言:用助记符描述的语言,要求程序 员了解硬件资源及软件资源。员了解硬件资源及软件资源。高级语言:面向过程的语言,不依赖于机器,高级语言:面向过程的语言,不依赖于机器,有很好的通用性和可移植性。有很好的通用性和可移植性。F机器语言、汇编语言与高级语言机器语言、汇编语言与高级语言3.1 概述概述汇编语言程序的上机处理过程汇编语言程序的上机处理过程主要主要的汇编程序:的汇编程序:MASM、ASMF汇编与

    19、连接汇编与连接3.2 汇编语言源程序的结构汇编语言源程序的结构DATA SEGMENT .DATA ENDSSTACK SEGMENT STACK .STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODESTART:CODE ENDS END START3.2 汇编语言源程序的结构汇编语言源程序的结构F汇编语言的语句格式汇编语言的语句格式1.指令语句的格式:指令语句的格式:标号:标号:指令助记符指令助记符 操作数操作数 ;注释;注释LABEL:MOV AL,DATASI ;取一个字节数取一个字节数合法的字符包括:合法的字符包括:字母:字母:

    20、AZ或或az 数字:数字:09 特殊字符:?、特殊字符:?、.、_、$标号和名字长度不能超过标号和名字长度不能超过31个字符,且必个字符,且必须由字母或特殊字符打头,中间不能有空格,须由字母或特殊字符打头,中间不能有空格,圆点只能打头。圆点只能打头。3.2 汇编语言源程序的结构汇编语言源程序的结构名字名字 伪指令伪指令 操作数操作数 ;注释;注释汇编伪指令的格式:汇编伪指令的格式:在名字和伪指令之间没有冒号,而标号在名字和伪指令之间没有冒号,而标号和指令之间必须有冒号。和指令之间必须有冒号。DATA DB 0F8H,60H,0ACH,74H ;数据缓冲区数据缓冲区3.2 汇编语言源程序的结构汇

    21、编语言源程序的结构F汇编语言源程序的定义汇编语言源程序的定义汇编语言源程序的段定义与内存的分段组织直汇编语言源程序的段定义与内存的分段组织直接相关。典型的程序包含代码段、数据段和堆接相关。典型的程序包含代码段、数据段和堆栈段。栈段。段段名字名字 SEGMENT(段模块)段模块)段名字段名字 ENDSDATA SEGMENT Buffer DB 20H,DATA ENDS3.2 汇编语言源程序的结构汇编语言源程序的结构F汇编语言的过程定义汇编语言的过程定义一个代码段可由一个或多个过程组成。一个代码段可由一个或多个过程组成。过程名过程名 PROC 类型类型 RET 过程名过程名 ENDPSTART

    22、 PROC FAR RETSTART ENDP类型有类型有FAR和和NEAR两种,过程由两种,过程由CALL调用。调用。3.2 汇编语言源程序的结构汇编语言源程序的结构F汇编语言的段寻址汇编语言的段寻址ASSUME 段寄存器:段名段寄存器:段名,段寄存器:段名,段寄存器:段名.ASSUME SS:STACK,CS:CODE,DS:DATA其中段寄存器有其中段寄存器有CS、DS、ES和和SS。每个每个指定之间用逗号分开。指定之间用逗号分开。ASSUME语句必须写在代码段中,一般放语句必须写在代码段中,一般放在段定义语句之后。在段定义语句之后。3.2 汇编语言源程序的结构汇编语言源程序的结构ASS

    23、UME只指定了对应关系,但没有真正只指定了对应关系,但没有真正给段寄存器赋值,这要由程序本身来完成。给段寄存器赋值,这要由程序本身来完成。CS:IP和和SS:SP由由DOS装入自动完成,而装入自动完成,而DS和和ES须由用户指定。须由用户指定。MOV AX,DATAMOV DS,AX3.2 汇编语言源程序的结构汇编语言源程序的结构在在DOS环境下运行一个程序时,自然要求当环境下运行一个程序时,自然要求当程序运行结束时,控制返回程序运行结束时,控制返回DOS。这一般用这一般用INT 20H指令来完成,程序一开始一般加入指令来完成,程序一开始一般加入以下三条指令。以下三条指令。PUSH DSSUB

    24、 AX,AXPUSH AXF标准程序前奏标准程序前奏3.2 汇编语言源程序的结构汇编语言源程序的结构ENDS 段名段名 ;段结束段结束ENDP 过程名过程名 ;过程序结束过程序结束END 表达式表达式 ;汇编结束汇编结束F汇编语言的结束语句汇编语言的结束语句表达式是第一条要执行的指令的地址的标表达式是第一条要执行的指令的地址的标号。号。3.3 数据定义数据定义1.常量、变量和表达式常量、变量和表达式F常量常量二进制二进制xxxxxxxxB01000101B八进制八进制xxxO 或或xxxQ721O或或721Q十进制十进制xxxx或或xxxxD1991或或1991D十六进制十六进制xxxxH0F

    25、1D4H字符串字符串xxx或或“xxx”AB注意对于数字加引号与不加引号的区别如:注意对于数字加引号与不加引号的区别如:12与与12,前面的表示数字,而后面是字,前面的表示数字,而后面是字符串。符串。数值常量、符号常量(用数值常量、符号常量(用EQU或或=定义)定义)F变量变量变量实际代表内存单元。内存单元的名字变量实际代表内存单元。内存单元的名字,由由DB/DW/DD/DQ/DT定义定义BUF DB?MOV BUF,AL变量的三种属性:变量的三种属性:段值段值 SEG偏移量偏移量 OFFSET类型类型 BYTE/WORD/.F标号标号标号实际上是代码段中的某一指令的地址,标号实际上是代码段中

    26、的某一指令的地址,即指令存放单元的符号地址即指令存放单元的符号地址,是转移是转移/调用调用/循循环指令的操作数。环指令的操作数。标号的三种属性:标号的三种属性:段值段值 SEG偏移量偏移量 OFFSET类型类型 NEAR/FARF表达式表达式由操作数和运算符组成的序列,按性质可分由操作数和运算符组成的序列,按性质可分为数值表达式和地址表达式两种。为数值表达式和地址表达式两种。操作数可以是寄存器、常量(数值常量、符操作数可以是寄存器、常量(数值常量、符号常量)、存储器操作数(标号、变量)号常量)、存储器操作数(标号、变量)运算符包括:算术运算符、逻辑运算符、关运算符包括:算术运算符、逻辑运算符、

    27、关系运算符、数值返回运算符和属性运算符系运算符、数值返回运算符和属性运算符F格式一格式一2、数据定义伪操作语句、数据定义伪操作语句名字名字 伪操作伪操作 表达式表达式伪操作有伪操作有DB、DW、DD、DQ、DTBUFFER DW 0,1,2,3MAX DB?F格式二格式二名字名字 伪操作伪操作 DUP(表达式表达式)用于定义一些重复的数据或分配一数据空间。用于定义一些重复的数据或分配一数据空间。BUFFER DW 10 DUP(?)DATA1 DB 5 DUP(1,2,3)FEQU语句语句3、等值伪操作语句、等值伪操作语句EQU可以用一个名字来代表一个数常或可以用一个名字来代表一个数常或表达式

    28、。如:表达式。如:CONST EQU 20BLOCK EQU Good morning!NUM EQU$-BLOCK使用使用EQU对某个名字赋值后,不能再用对某个名字赋值后,不能再用EQU对该名字重新赋值,且名字后不要冒号。对该名字重新赋值,且名字后不要冒号。F算术运算符算术运算符3.4 汇编语言的运算符汇编语言的运算符+、-、/、MOD、SHL、SHRF逻辑运算符逻辑运算符AND、OR、XOR、NOTF逻辑运算符逻辑运算符EQ、NE、LT、GT、LE、GEF数值返回运算符(分析运算符)数值返回运算符(分析运算符)$运算符运算符 :返回汇编器当前地址计数器值返回汇编器当前地址计数器值 BLOC

    29、K DB Good morning!NUM EQU$-BLOCK ;NUM=13SEG 变量变量/标号标号 :返回段地址返回段地址 OFFSET 变量变量/标号标号 :返回偏移地址:返回偏移地址 MOV AX,SEG TABLE ;把把TABLE的段地的段地 ;址送址送AX MOV BX,OFFSET TABLE ;把把TABLE的的 ;偏移地址送偏移地址送BXTYPE 变量变量/标号标号 :变量返回类型:变量返回类型:1字节、字节、2字、字、4双字双字标号返回类型:标号返回类型:-1NEAR、-2FAR 设设AB是是DB定义的变量,则定义的变量,则 MOV AX,TYPE AB ;AX=00

    30、01H 设设DATA1是是DW定义的变量,则定义的变量,则 MOV AX,TYPE DATA1 ;AX=0002HLENGTH 变量变量 :返回元素的个数:返回元素的个数SIZE 变量变量 :返回分配的字节数:返回分配的字节数 TABLE DW 100 DUP(?)MOV CX,LENGTH TABLE ;CX=100 MOV CX,SIZE TABLE ;CX=200HIGH :返回返回16位表达式的高位字节位表达式的高位字节LOW :返回返回16位表达式的低位字节位表达式的低位字节 NUM EQU 0CDEFH MOV AH,HIGH NUM ;AH=0CDH MOV AL,LOW NUM

    31、 ;AL=0EFHF属性运算符(合成运算符)属性运算符(合成运算符)PTR 新新属性属性 PTR 表达式表达式 用于暂时改变变量或标号的原有属性。用于暂时改变变量或标号的原有属性。F1 DW 1234HF2 DB 23H,56H,18HMOV AL,BYPE PTR F1 ;AL=34HMOV BX,WORD PTR F2 ;BX=5623HTHISTHIS与与PTR有类似的功能,但新的性放在有类似的功能,但新的性放在THIS的右边。的右边。FIRST EQU THIS BYTE SECOND DW 5678H MOV AX,TYPE FIRST ;AX=0001H MOV BL,FIRST

    32、SECOND ;BL=78H3.5 基本结构程序设计基本结构程序设计F顺序结构顺序结构乘法乘法MUL加法加法ADD保存结果保存结果DATA SEGMENT S DW?,?,?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,30H ADD AL,20H MOV BL,80H MUL BL ;结果在结果在AX中中 MOV S,AX 3.5 基本结构程序设计基本结构程序设计F分支结构分支结构程序段程序段1程序段程序段2条件条件JZ L1L1:.L2:.后继程序后继程序L3:.JMP L3T

    33、EST AX,1YN程序段程序段1后继程序后继程序条件条件JZ L1L1:.TEST AX,1F分支结构分支结构YNF循环结构循环结构先执行、后判断先执行、后判断初始化部分初始化部分循环体循环体修改部分修改部分条件条件先判断、后执行先判断、后执行初始化部分初始化部分循环体循环体修改部分修改部分条件条件后继程序后继程序F循环结构循环结构F循环结构循环结构循环控制:计数控制循环控制:计数控制 LOOP条件控制条件控制 JZ/.计数初值送计数初值送CX/CLF分支程序设计举例分支程序设计举例例例1 检查输入的字符,如果输入字符为检查输入的字符,如果输入字符为 A 则显示,则显示,否则循环等待。否则循

    34、环等待。输入字符输入字符是否为是否为 A?显显 示示 A结结 束束NYCODE SEGMENT ASSUME CS:CODE STA:MOV AH,07H INT 21H ;键入键入Ctr-Break结束结束 CMP AL,41H ;与与A进行比较进行比较 JZ DISY ;是是A则显示则显示 JMP STA ;不是不是A则重新检查则重新检查 DISY:MOV AH,02H;调用调用DOS 21号号中断显示字符中断显示字符 MOV DL,AL INT 21H MOV AH,4CH INT 21H CODE ENDS END STAF循环程序设计举例循环程序设计举例例例2、累加从地址累加从地址

    35、01000H开始的开始的 5 个字的內容,并将和个字的內容,并将和存入存入SUM单单 元(一个字长)。元(一个字长)。开开 始始初始初始SI、CX相相 加加修改修改SICX=0?结束结束NY01000H23H01H01002H00H2AH01004HEFH52H01006H00H07H01008H55H72H0100AH67HF7H0100BHSUMDATA SEGMENT ORG 1000H AB DW 0123H,2A00H,52EFH DW 0700H,7255H SUM DW?DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV

    36、 AX,DATA MOV DS,AX MOV CX,05 MOV AX,0 LEA SI,AB REG:ADD AX,SI INC SI ;修改指针修改指针 INC SI LOOP REG ;CX-1,CX=0循环。循环。MOV SUM,AX MOV AH,4CH INT 21H CODE ENDSEND START如果相加的结果超出了一个字的范围,那怎如果相加的结果超出了一个字的范围,那怎样修样修 改程序?改程序?例例3、编程序统计编程序统计 AX 寄存器中寄存器中 1 的个数。(采用的个数。(采用 AX=0?做为循环的条件)做为循环的条件)初始化初始化CX=0AX=0?逐逐位移到最高位位移

    37、到最高位CF1CX=CX+1结结 束束YNNYCODE SEGMENT ASSUME CS:CODE START:MOV CX ,0 ;存存 1 的个数的个数 AGAIN:TEST AX,0FFFFH JZ B SAL AX,1 JNC A INC CX A:JMP AGAIN B:MOV AH,4CH ;返回返回DOS INT 21H CODE ENDS END START例例4、根据状态控制循环,设、根据状态控制循环,设52H是接口中的状态口是接口中的状态口,其中其中D1位等于位等于1 时表示时表示CPU可从数据口读数据。可从数据口读数据。输入状态输入状态测试测试D1输入数据输入数据存存内

    38、存内存D1=0?YNBEGIN:IN AL,52H ;从状态口读从状态口读 TEST AL,02 ;测试测试 D1=0?JZ BEGIN ;D1=0 转,继续查转,继续查 IN AL,50H ;D1=0,数据口数据口 MOV DI,AL ;存内存存内存 INC DI F子程序结构设计举例子程序结构设计举例例例5、做十进制加法、做十进制加法 44332211+88776655初始化初始化SI、DI、BX、CX、CF、DF调调过程过程二进制加法二进制加法十进制调整十进制调整存存结果,修改地址结果,修改地址返回返回LOOP处处CX=0?结束结束DATA SEGMENT A DB 11H,22H,33

    39、H,44H,00H B DB 55H,66H,77H,88H,00H SUM DB 20 DUP (?)(?)DATA ENDSSTACK SEGMENT STA DB 20 DUP (?)(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX MOV SP ,TOP MOV SI,OFFSET A MOV DI ,OFFSET SUM MOV BX ,OFFSET B MOV

    40、CX,05 CLD CLC ADITI:CALL AAB LOOP ADITI MOV AH,4CH INT 21H AAB PROC NEAR LODSB ADC AL,BX DAA STOSB INC BX RET AAB ENDP CODE ENDS END START 3.6 DOS/BIOS中断调用中断调用BIOS功能调用:与硬件相关的基本输入功能调用:与硬件相关的基本输入 输出系统。输出系统。DOS功能调用:与硬件无关的基本输入功能调用:与硬件无关的基本输入 输出系统。输出系统。一、作系统一、作系统 MS-DOS 的结构的结构用用户户用户程序用户程序 命令处理模块命令处理模块磁盘管

    41、理模块磁盘管理模块基本输入输出模块基本输入输出模块软件中断和软件中断和系统调系统调用用键盘命键盘命令令COMMAND.COMIBM DOS.COMIBM BIO.COMROM BIOS二、二、DOS功能调用功能调用调用步骤:调用步骤:(1)传送入口参数到指定的寄存器。)传送入口参数到指定的寄存器。(2)调用号送)调用号送AH寄存器。寄存器。(3)执行)执行INT 21H。FDOS的的1号功能调用号功能调用从键盘输入单字符并显示从键盘输入单字符并显示调用号:调用号:01,无入口参数。,无入口参数。MOV AH,01 INT 21H功能:等待键入,检查是否是功能:等待键入,检查是否是Ctr-Bre

    42、ak键,是,键,是,退出;不是将键入的字符送退出;不是将键入的字符送 AL 寄存器并显示。寄存器并显示。FDOS的的2号功能调用号功能调用显示单个字符显示单个字符调用号:调用号:02,入口参数:入口参数:DL功能:将功能:将DL的内容显示(的内容显示(DL=待输出字符的待输出字符的ASII码)码)MOV DL,A MOV AH,02 INT 21H程序执行后,在显示器上显示字符程序执行后,在显示器上显示字符 AFDOS的的9号功能调用号功能调用显示字符串显示字符串调用号:调用号:09H,入口参数:入口参数:DS:DX(缓冲区首地址)缓冲区首地址)功能:将缓冲区内以功能:将缓冲区内以$结尾的字串

    43、显示结尾的字串显示,$(24H)不显示。不显示。BUF DB ABCDEF&MOV DX,OFFSET BUF MOV AH,09H INT 21H执行结果在显示器上显示执行结果在显示器上显示 ABCDEFFDOS的的10号功能调用号功能调用字符串输入字符串输入调用号:调用号:0AH,入口参数:入口参数:DS:DX=缓冲区首地址缓冲区首地址功能:将键盘键入的以功能:将键盘键入的以 ENTER(0DH)结尾的字符串写到结尾的字符串写到DS:DX指定的内存区。为此,应先用程序设置一内存区。例:指定的内存区。为此,应先用程序设置一内存区。例:BUF DB 20 ;第一个字节设的最大长度第一个字节设的

    44、最大长度(含含0DH)DB?;第二个字节空出第二个字节空出,由由DOS最后填实际长度最后填实际长度(不含不含0DH)DB 20 DUP (?)第三字节开始写字符第三字节开始写字符 MOV DX,OFFSET BUF MOV AH,0AH INT 21HFDOS的的4CH号功能调用号功能调用返回返回DOS调用号:调用号:4CH ,无入口参数。无入口参数。MOV AH,4CH INT 21H结束当前程序,返回操作系统。结束当前程序,返回操作系统。INT 20H系统把中断调用系统把中断调用20H作为结束任务返回作为结束任务返回DOS的一个子程序,故在用户程序结束时的一个子程序,故在用户程序结束时可插

    45、入一条可插入一条INT 20H指令以返回指令以返回DOS。FDOS的的25h号功能调用号功能调用设置中断向量设置中断向量调用号:调用号:25H,入口参数:入口参数:AL=中断类型号中断类型号 DS:DX=中断程序入口地址。中断程序入口地址。若中断类型号是若中断类型号是 40,中断程序入口地址,中断程序入口地址 300:2400H,装中断向量。装中断向量。MOV AX,300H MOV DS,AX MOV DX,2400H MOV AH,25H MOV AL,40 INT 21H三、三、BIOS功能调用功能调用BIOS的调用方法与的调用方法与DOS调用类似,过程如下:调用类似,过程如下:(1)设

    46、置功能号)设置功能号n(AH)(2)置入口参数置入口参数(3)执行)执行INT n(4)分析出口参数分析出口参数3.7 宏指令与宏调用宏指令与宏调用F宏指令定义语句宏指令定义语句宏指令名宏指令名 MACRO 宏体宏体 ENDM SHIFTMACROMOV CL,4SAL AL,CL ENDMF带参数的宏指令带参数的宏指令宏指令名宏指令名 MACRO 参数参数1,参数参数2,参数参数n 宏体宏体 ENDMSUM MACRO NUM1,NUM2,RESULTPUSH AXMOV AX,NUM1ADD AX,NUM2MOV RESULT,AXPOP AXENDMF宏调用宏调用宏指令名宏指令名 参数列

    47、表参数列表SUM 23H,45H,BXF宏指令与子程序的区别宏指令与子程序的区别子程序调用由微处理器完成子程序调用由微处理器完成 宏指令调用在汇编过程中由汇编程序完成宏指令调用在汇编过程中由汇编程序完成子程序调用可以减小目标程序的大小子程序调用可以减小目标程序的大小 宏指令调用不能宏指令调用不能DATA SEGMENT MESSAGE DB Hello world!,0DH,0AH,$DATA ENDSSSEG SEGMENT STACKDB 100 DUP(?)SSEG ENDSDISPLAY MACRO MSG ;宏定义宏定义MOV DX,OFFSET MSG MOV AH,9 ;显示字符

    48、串显示字符串 INT 21HENDM CSEG SEGMENTASSUME CS:CSEG,DS:DATA,SS:SSEG START:MOV AX,DATAMOV DS,AXDISPLAY MESSAGE ;宏调用宏调用MOV AH,4CHINT 21HCSEG ENDSEND START FLOCAL伪指令伪指令使用宏时,可能会导致变量、标号重定义的使用宏时,可能会导致变量、标号重定义的问题,使用问题,使用LOCAL伪指令可以解决这一问题。伪指令可以解决这一问题。LOCAL 变量变量/标号列表标号列表SOMEMACRO MACROLOCAL L1,N2L1:.L2:.ENDMFLOCAL伪

    49、指令伪指令这里的变量是宏定义中使用的变量或标号。这里的变量是宏定义中使用的变量或标号。LOCAL操作使汇编语言把这些变量或标号当操作使汇编语言把这些变量或标号当作形式变量,而在宏扩展时把它们变成实际变作形式变量,而在宏扩展时把它们变成实际变量。这些实际变量由两量。这些实际变量由两 个问号(个问号(?)打头,)打头,后面是数字序列,后面是数字序列,如如?0000,?0001,?0002避免了名字的避免了名字的重复。重复。LOCAL操作只能用在宏定义体内,而操作只能用在宏定义体内,而且必须是且必须是MACRO操作后的第一个语句。操作后的第一个语句。P1163.8 外部引用与全局说明外部引用与全局说

    50、明模块化程序设计模块化程序设计模块:能够独立汇编的若干逻辑段的汇编语模块:能够独立汇编的若干逻辑段的汇编语言源程序。言源程序。主模块:只能有一个,以主模块:只能有一个,以“END 启动指令标启动指令标号号”作为源程序的结束语句。作为源程序的结束语句。子模块:可以有多个,以子模块:可以有多个,以“END”作为源程序作为源程序的结束语句。的结束语句。FEXTERN伪指令伪指令EXTERN 符号名:类型,符号名:类型符号名:类型,符号名:类型类型:类型:BYTE/WORD/NEAR/FAR用用EXTRN说明的名字称为外部名,它指说明的名字称为外部名,它指示在本模块中使用该名字,而这个外部名示在本模块

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:汇编程序设计课件.ppt
    链接地址:https://www.163wenku.com/p-4146594.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库