汇编程序设计课件.ppt
- 【下载声明】
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标号标号标号实际上是代码段中的某一指令的地址,标号实际上是代码段中
展开阅读全文