汇编语言复习提纲

上传人:cl****1 文档编号:567950993 上传时间:2024-07-22 格式:PPT 页数:65 大小:471KB
返回 下载 相关 举报
汇编语言复习提纲_第1页
第1页 / 共65页
汇编语言复习提纲_第2页
第2页 / 共65页
汇编语言复习提纲_第3页
第3页 / 共65页
汇编语言复习提纲_第4页
第4页 / 共65页
汇编语言复习提纲_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《汇编语言复习提纲》由会员分享,可在线阅读,更多相关《汇编语言复习提纲(65页珍藏版)》请在金锄头文库上搜索。

1、第第1 1页页教材:教材:IBM-PCIBM-PC汇编语言程序设计汇编语言程序设计 汇编语言程序设计汇编语言程序设计第第2 2页页总评成绩构成总评成绩构成 考试成绩:考试成绩: 70% 平时成绩平时成绩: 10-20% 实验成绩实验成绩: 20-10% 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第3 3页页第第3页页考试题型考试题型选择题选择题 20%20%填空题填空题 20%20%判断题判断题 10%10%程序分析题程序分析题 20%20%程序设计题程序设计题 30%30%考试范围:考试范围: 第第1 1章章-第第1111章章 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲

2、第第4 4页页第第4页页第第1章章 基础知识基础知识数制转换数制转换 R(B、O、H)进制转换为十进制)进制转换为十进制 十进制转换为十进制转换为R(B、O、H)进制)进制 R(B、O、H)进制间的相互转换)进制间的相互转换 补码数的表数范围(补码数的表数范围(n=8、16)字符的表示字符的表示-ASCII:0-9、A-Z、a-z、空格、回车、空格、回车、换行。换行。 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第5 5页页第第5页页 D01234567 B00000001001000110100010101100111 H01234567 D89101112131415 B1000

3、1001101010111100110111101111 H89ABCDEF二进制、十进制及十六进制对应关系二进制、十进制及十六进制对应关系二进制、八进制对应关系二进制、八进制对应关系 B000001010011010101110111 O01234567 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第6 6页页第第6页页课堂练习课堂练习把十进制数把十进制数 65533 转换成二进制、八进制和十六进制转换成二进制、八进制和十六进制。参考答案:参考答案: 二进制:二进制:1111 , 1111 , 1111 , 1101 B 八进制:八进制: 177775 O 十六进制:十六进制:FF

4、FDH对不同机器字长对不同机器字长n = 8,16,32,64,补码的表数范围为:,补码的表数范围为: n=8 : n=16 : n=32 : 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第7 7页页第第7页页 标准的标准的ASCII码共码共128个字符,分为二类:非打印的和可打个字符,分为二类:非打印的和可打印的印的ASCII码。码。 非打印非打印ASCII码:这类编码用于控制性代码,共码:这类编码用于控制性代码,共33个。如个。如: BEL(响铃,(响铃,07H),), DEL(删除,(删除,7FH),), CR (回车,(回车,0DH),), LF (换行,(换行,0AH)等。

5、等。 可打印可打印ASCII码:共有码:共有95个。其中有:个。其中有: 数字数字09的编码的编码 30H39H 大写字母大写字母AZ的编码的编码 41H5AH 小写字母小写字母az 的编码的编码 61H7AH 空格(空格(Space)的编码)的编码 20H 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第8 8页页第第8页页 Intel 8086/8088CPU共有共有14个十六位寄存器,分别为:个十六位寄存器,分别为:通用寄存器通用寄存器8个,控制寄存器个,控制寄存器2个,段寄存器个,段寄存器4个。个。8086寄存器寄存器通用寄存器通用寄存器控制寄存器控制寄存器段寄存器段寄存器AX

6、 BX CX DXSP BP SI DIIP 指令指针寄存器指令指针寄存器FLAGS 标志寄存器标志寄存器CS 代码段寄存器代码段寄存器DS 数据段寄存器数据段寄存器ES 附加段寄存器附加段寄存器SS 堆栈段寄存器堆栈段寄存器第第2章章 8086寄存器结构和使用寄存器结构和使用 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第9 9页页第第9页页 上上述述寄寄存存器器在在某某些些指指令令中中,或或在在某某种种场场合合下下又又有有其其默默认认的的用用法。通常是:法。通常是: (1)AX的默认用法有:的默认用法有: AX为十六位为十六位累加器累加器,AL为八位为八位累加器累加器; 在在I/

7、O指令(指令(IN、OUT)中必须用)中必须用AX或或AL; AX与与DX配合组成配合组成32位数据,位数据,DX中存放高中存放高16位数据等;位数据等; 在乘法和除法指令中必须使用在乘法和除法指令中必须使用AX。 (2)BX常做为基地址寄存器;常做为基地址寄存器; (3)CX常常用用作作计计数数器器,在在串串操操作作或或用用循循环环指指令令(如如LOOP等等)中的循环计数必须选用中的循环计数必须选用CX; (4)DX作作为为数数据据寄寄存存器器,在在I/O端端口口操操作作中中存存放放端端口口地地址址,与与AX配合形成配合形成32位数据。位数据。 汇编语言程序设计汇编语言程序设计 复习提纲复习

8、提纲 第第1010页页第第10页页 堆栈指针堆栈指针SP是指向堆栈段栈顶存储单元的偏移量,且是指向堆栈段栈顶存储单元的偏移量,且总是总是指向栈顶指向栈顶,进栈与出栈的操作(字操作)皆由,进栈与出栈的操作(字操作)皆由SP来指明偏移地来指明偏移地址,堆栈指针址,堆栈指针SP就是这样的隐含使用。就是这样的隐含使用。 基址指针基址指针BP作地址指针时,默认的也是堆栈段,用作地址指针时,默认的也是堆栈段,用BP作地作地址指针可以对堆栈中任何字节存储单元或字单元进行操作,这址指针可以对堆栈中任何字节存储单元或字单元进行操作,这与与SP所不同之处。但所不同之处。但BP 指明的存储单元可允许段跨越。指明的存

9、储单元可允许段跨越。 指令指针寄存器指令指针寄存器IP与其它计算机和微处理器中程序计数器与其它计算机和微处理器中程序计数器PC的作用类同,它是指令的地址指针。它用来的作用类同,它是指令的地址指针。它用来存放代码段中的存放代码段中的偏移地址偏移地址。在程序运行的过程中,它始终指向下一条指令的首在程序运行的过程中,它始终指向下一条指令的首地址地址,称为,称为当前当前IP,它,它与与CS寄存器联用确定下一条指令的物理寄存器联用确定下一条指令的物理地址地址。 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第1111页页第第11页页 PSW(Program Status Word)为为程程序序状

10、状态态字字寄寄存存器器,这这是是一一个个16位位寄寄存存器器。也也称称为为标标志志寄寄存存器器。用用来来反反映映微微处处理理器器在在程程序序运运行行时时的的某某些些状状态态。PSW寄寄存存器器中中有有9个个标标志志位位,其其中中6个个标标志志位位(OF,SF,ZF,AF,PF,CF)作作为为状状态态标标志志,记记载载了了刚刚刚刚执执行行完完算算术术或或逻逻辑辑运运算算指指令令后后的某些特征。的某些特征。 另另外外三三个个标标志志位位为为DF、IF、TF作作为为控控制制标标志志,完完全全由由编程者设定,在执行某些指令时起控制作用。编程者设定,在执行某些指令时起控制作用。程序状态字寄存器程序状态字

11、寄存器PSW80868086的标志寄存器的标志寄存器CFPFAFZFSFTFIFDFOFD15D0D7 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第1212页页第第12页页 DF:(:(Direction Flag)方向标志)方向标志,主要用在串处理指令中控制处理,主要用在串处理指令中控制处理信息的地址增减的方向。当信息的地址增减的方向。当DF位置位置1时(使用时(使用STD指令),每次串操作指令),每次串操作后变址寄存器后变址寄存器SI和和DI自动减自动减1(字节操作)或减(字节操作)或减2(字操作),这样就使串处(字操作),这样就使串处理从高地址向低地址方向处理。当理从高地址向

12、低地址方向处理。当DF为为0时,则使变址寄存器时,则使变址寄存器SI和和DI自自动加动加1(字节操作)或加(字节操作)或加2(字操作),使串处理从低地址向高地址方向进行。(字操作),使串处理从低地址向高地址方向进行。 IF:(:(Interrupt Flag)中断标志)中断标志,这个标志位主要针对外中断中可屏,这个标志位主要针对外中断中可屏蔽中断的开放或禁止。当蔽中断的开放或禁止。当IF=1时,时,CPU允许响应可屏蔽中断,相反,允许响应可屏蔽中断,相反,IF0时,则不允许响应可屏蔽中断,这里所说的屏蔽即为时,则不允许响应可屏蔽中断,这里所说的屏蔽即为“拒绝拒绝”之意。之意。用用STI指令使指

13、令使IF置置1,用,用CLI使使IF=0。 TF:又称陷阱标志(:又称陷阱标志(Trap Flag),又称跟踪标志(),又称跟踪标志(Trace Tlag)或称)或称单步标志位单步标志位。用于单步方式操作,当。用于单步方式操作,当TF=1时,在执行完一条指令后,产生时,在执行完一条指令后,产生单步中断。这在单步中断。这在DEBUG调试程序状态下,可以使指令单步运行,可逐一检调试程序状态下,可以使指令单步运行,可逐一检查各寄存器内容,标志状态、存储器的检查或修改等等。查各寄存器内容,标志状态、存储器的检查或修改等等。TF=1时为调试程时为调试程序时所用,当程序调试成功后让序时所用,当程序调试成功

14、后让TF=0,CPU正常工作不产生单步中断。正常工作不产生单步中断。 控制标志位控制标志位 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第1313页页第第13页页第第3章章 存储器的分段存储器的分段基本概念:地址、内容、不同单元地址的定义等。基本概念:地址、内容、不同单元地址的定义等。实模式下最大寻址空间、段的最大寻址空间等。实模式下最大寻址空间、段的最大寻址空间等。物理地址的计算:段地址:偏移地址物理地址的计算:段地址:偏移地址 存储器地址的分段存储器地址的分段 8086/8088 CPU 有有20根地址总线根地址总线A19A18A1A0,可以访,可以访问存储器的最大容量为:问存储

15、器的最大容量为:220B=1048576B=1024KB=1MB 在在PC机里采用了机里采用了存储器地址分段存储器地址分段的办法。把的办法。把IMB的存储空的存储空间划分成若干个段(间划分成若干个段(Segment),每个段可由每个段可由164KB(最大(最大64KB)个连续的字节单元组成。每个段是一个可独立寻址的)个连续的字节单元组成。每个段是一个可独立寻址的逻辑单位。逻辑单位。 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第1414页页第第14页页逻辑地址与物理地址逻辑地址与物理地址 CPU访问主存必须传送出物理地址,而用户编程则使用访问主存必须传送出物理地址,而用户编程则使用逻

16、辑地址,于是在逻辑地址,于是在8086/8088系列微型机中,每个存储单元都系列微型机中,每个存储单元都有两种形式的地址:有两种形式的地址:物理地址(物理地址(Phsysical Address)和逻)和逻辑地址(辑地址(Logical Address)以及以及CPU内如何把程序员使用内如何把程序员使用的逻辑地址形成物理地址(真实地址)的问题。的逻辑地址形成物理地址(真实地址)的问题。 每一个存储单元的物理地址是唯一的,就是这个单元的每一个存储单元的物理地址是唯一的,就是这个单元的地址编码。地址编码。CPU与存储器之间的任何信息交换,都必须使用与存储器之间的任何信息交换,都必须使用20位的物理

17、地址先行,经地址译码器后形成开门信号,把被位的物理地址先行,经地址译码器后形成开门信号,把被访问的存储单元的访问的存储单元的“门门”打开,方能进行数据交换。打开,方能进行数据交换。 在程序设计中,在程序设计中,程序员使用的是逻辑地址,而不使用物程序员使用的是逻辑地址,而不使用物理地址理地址,这不仅有利于程序的开发,且对存储器的动态管理,这不仅有利于程序的开发,且对存储器的动态管理也是有利的。一个逻辑地址是由也是有利的。一个逻辑地址是由段基值和偏移量段基值和偏移量(OFFSET)两部分组成,而且都是无符号的两部分组成,而且都是无符号的16位二进制数。位二进制数。 汇编语言程序设计汇编语言程序设计

18、 复习提纲复习提纲 第第1515页页第第15页页物理地址的计算物理地址的计算计算公式:计算公式: 物理地址物理地址= =段地址段地址10H+10H+偏移地址偏移地址 每个存储单元只有唯一的物理地址,但它却可以由不同每个存储单元只有唯一的物理地址,但它却可以由不同的段地址和不同的偏移地址组成。的段地址和不同的偏移地址组成。 1616位段地址位段地址1501616位偏移地址位偏移地址150+2020位物理地址位物理地址190 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第1616页页第第16页页第第4章章 数据和指令的寻址方式数据和指令的寻址方式与数据有关的寻址方式与数据有关的寻址方式

19、要求熟练分析源操作数和物理操作数的寻址方式、要求熟练分析源操作数和物理操作数的寻址方式、 计算计算对应的物理地址、对应的物理地址、EA等。等。 立即寻址立即寻址 MOV AX, 2000H 寄存器寻址寄存器寻址 MOV AX, BX 直接寻址直接寻址 MOV AX, 1000H 寄存器间接寻址寄存器间接寻址 MOV AX, SI 寄存器相对寻址寄存器相对寻址 MOV AX, ARRAYDI 基址变址寻址基址变址寻址 MOV AX, BXSI 相对基址变址寻址相对基址变址寻址 MOV AX, ARRAYBXDI 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第1717页页第第17页页需要

20、注意的问题需要注意的问题1. 1. 对大多数指令而言,目标(目的)操作数不能使用立即对大多数指令而言,目标(目的)操作数不能使用立即寻址方式;寻址方式;2. EA2. EA只对存储器操作数;立即寻址和寄存器寻址无物理地只对存储器操作数;立即寻址和寄存器寻址无物理地址;址;3. 3. 对存储器操作数,能用于存放地址的寄存器是:对存储器操作数,能用于存放地址的寄存器是: BX BP SI DIBX BP SI DI;其它寄存器不能使用。;其它寄存器不能使用。4. 4. 对大多数指令而言,目标(目的)操作数和源操作数不对大多数指令而言,目标(目的)操作数和源操作数不能同时使用存储器操作数;能同时使用

21、存储器操作数;5. 5. 计算物理地址时,计算物理地址时,BPBP默认与默认与SSSS搭配;搭配;BXBX、SISI、DIDI默认与默认与DSDS搭配。搭配。 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第1818页页第第18页页【例例】 DS=091DH,SS=1E4AH,AX=1234H,BX=0024H,CX=5678H,BP=0024H,SI=0012H,DI=0032H,分析下列,分析下列指令的寻址方式,并求出存储器操作数的物理地址。指令的寻址方式,并求出存储器操作数的物理地址。(1) MOV CL, 20HBX+SI 【解解】 源操作数源操作数 相对基址变址寻址相对基址变

22、址寻址 目的操作数目的操作数 寄存器寻址寄存器寻址求物理地址:求物理地址: EA=20H+BX+SI=20H+24H+12H=56H PA=DS10H+EA =091DH10H+56H=09226H (2) MOV BPDI, CX 【解解】 源操作数采用源操作数采用寄存器寻址寄存器寻址,目的操作数用,目的操作数用基址变址寻基址变址寻址址 目标操作数的物理地址:目标操作数的物理地址: EA=BP+DI=24H+32H=56H PA=SS10H+EA =1E4AH10H+56H=1E4F6H 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第1919页页第第19页页第第5章章 80X86的

23、指令系统的指令系统数据传送指令数据传送指令通用数据传送指令:通用数据传送指令: MOV PUSH POP XCHG换码指令:换码指令: XLAT地址传送指令:地址传送指令: LEA LEA BX, ARRAY 等价的指令等价的指令 MOV BX, OFFSET ARRAY 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第2020页页第第20页页例例: 分析下列指令执行后,各寄存器的值:分析下列指令执行后,各寄存器的值: MOV AX,200H MOV BX,300H MOV CX,950H PUSH AX PUSH BX PUSH CX ;其间用到其间用到AX、BX、CX POP CX

24、 POP BX POP AX该程序段执行完后,该程序段执行完后,AX=200H,BX=300H,CX=950H。 POP AX POP CX POP BX则执行完后,各寄存器的值:则执行完后,各寄存器的值: AX= 950H BX= 200H CX= 300H 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第2121页页第第21页页第第5章章 80X86的指令系统的指令系统算术指令算术指令加法指令:加法指令: ADD ADC INC减法指令:减法指令: SUB SBB DEC CMP NEG乘法指令:乘法指令: MUL IMUL除法指令:除法指令: DIV IDIV CBW CWD上述

25、指令对标志位的影响,单个指令使用及在程序设计上述指令对标志位的影响,单个指令使用及在程序设计中的应用。中的应用。 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第2222页页第第22页页【例例】:综合运算举例。计算:综合运算举例。计算 (V-(X*Y+Z-540)/X 其中其中X、Y、Z、V均为均为16位带符号数,已分别装入位带符号数,已分别装入X、Y、Z、V单元中,要求计算结果把商存入单元中,要求计算结果把商存入AX,余数存入,余数存入DX。第一步,完成乘法运算第一步,完成乘法运算X*Y: MOV AX,X IMUL Y第二步,保存计算结果:低位保存到第二步,保存计算结果:低位保存到

26、CX,高位保存到,高位保存到BX MOV CX,AX MOV BX,DX注意:乘法运算完后,结果为注意:乘法运算完后,结果为32位数。位数。 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第2323页页第第23页页算术指令算术指令-除法指令除法指令第三步:完成求和运算,第三步:完成求和运算,X*Y+Z MOV AX,Z CWD ADD CX,AX ADC BX,DX第四步:完成第四步:完成X*Y+Z-540 SUB CX,540 SBB BX,0第五步:完成第五步:完成 V-(X*Y+Z-540) MOV AX,V CWD SUB AX,CX SBB DX,BX第六步:完成除法运算第六

27、步:完成除法运算 IDIV X结果:商送结果:商送AX,余数送,余数送DX。 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第2424页页第第24页页乘法除法指令使用乘法除法指令使用【例例】 分析指令执行后,分析指令执行后,AX的值的值 MOV AX, 0FFFAH MOV BL, AH IMUL BL MOV AX, 0A9H MOV BL, 0E8H DIV BLAX=6AX=0A900H 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第2525页页第第25页页第第5章章 80X86的指令系统的指令系统逻辑指令逻辑指令逻辑运算指令:逻辑运算指令: AND OR NOT XO

28、R TEST移位指令:移位指令: SHL SAL SHR SAR循环移位指令:循环移位指令: ROL ROR RCL RCR串处理指令:串处理指令: REP MOVS CLD STD 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第2626页页第第26页页例例: 若要把若要把AX中的高位字节置为中的高位字节置为0,低位字节内容保持,低位字节内容保持不变,(不变,(AX)=789AH,处理完后,(,处理完后,(AX)=9AH 例例: 若上例(若上例(AX)=789AH,处理完后,要求,处理完后,要求(AX)=78FFH,该用什么指令实现?,该用什么指令实现?AND AX, 0FFHOR

29、AX, 0FFH例例: 寄存器清零的几种方式:寄存器清零的几种方式:XOR AX, AX MOV AX,0SUB AX,AX 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第2727页页第第27页页TESTTEST的应用的应用:该指令主要是用来测试目的操作数中,对应位:该指令主要是用来测试目的操作数中,对应位是否为是否为“1”1”,测试时,对应位置为,测试时,对应位置为1 1,无关位设置为,无关位设置为0 0。例例: 测试测试BX中中D8是否为是否为0? TEST BX,100H ;即;即D8位置为位置为1,其它位为,其它位为0。结果:若结果:若ZF=1,则该位为,则该位为0;若;若Z

30、F=0,该位为,该位为1。例例: 测试测试AX中中D15、D9、D7、D1、D0是否全为是否全为0? TEST AX,8283H ;结果:若结果:若ZF=1,则这些被测试位全为,则这些被测试位全为0; 若若ZF=0,则这些被测试位中不全为,则这些被测试位中不全为0。 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第2828页页第第28页页例例: 乘乘2/除除2的操作。的操作。 在数的表示范围内,乘在数的表示范围内,乘2操作用左移指操作用左移指令实现,除令实现,除2操作用右移指令实现;无符号数用逻辑移位指令,操作用右移指令实现;无符号数用逻辑移位指令,带符号数用算术移位指令。带符号数用算

31、术移位指令。乘乘2: MOV AX,100H MOV CL,4 SHL AX,CL执行完后,(执行完后,(AX)=1000H即相当于乘以即相当于乘以24。除除2: MOV AX,100H MOV CL,2 SHR AX,CL执行完后,(执行完后,(AX)=40H即相当于除以即相当于除以22。 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第2929页页第第29页页【例例】 已知已知AX=0ABCDH,CL=8,则下列指令执行后,则下列指令执行后,AX的值是多少?的值是多少?1.SHL AX, CL2.SHR AX, CL3.SAR AX, CL4.ROL AX, CL5.ROR AX,

32、CLAX=0CD00HAX=00ABHAX=0FFABHAX=0CDABHAX=0CDABH 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第3030页页第第30页页例例:分析下列程序段执行后,:分析下列程序段执行后,AX的值:的值: XOR AX,AX MOV AX,0A2D5H MOV CL,3 RCL AX,CL ADC AX,1234H 答答: AX=28DFH。分析:分析: 第四条指令执行完,(第四条指令执行完,(AX)=16AAH,CF=1。 第五条指令注意要加上第五条指令注意要加上CF的值。的值。(AX)=0,CF=0(AX)=0A2D5H,CF=0(AX)=16AAH,

33、 CF=1(AX)=0A2D5H,CF=0(AX)=28DFH, CF=0 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第3131页页第第31页页串处理指令串处理指令串传送指令举例串传送指令举例例例: 在数据段在数据段datarea中有一个字符串,其长度为中有一个字符串,其长度为17,要求,要求把它们转送到附加段把它们转送到附加段extra中的一个缓冲区。中的一个缓冲区。 程序如下:程序如下:;先完成数据段和附加段定义,其中源串放在数据段,目的;先完成数据段和附加段定义,其中源串放在数据段,目的串放在附加段。串放在附加段。datarea segment ;定义数据段定义数据段 mes

34、s1 db personal computer $datarea endsextra segment ;定义附加段定义附加段 mess2 db 17 dup(?) ;在存储器中分配;在存储器中分配17个字节单元的空间个字节单元的空间extra ends 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第3232页页第第32页页code segment assume cs:code, ds:datarea, es:extra mov ax,datarea mov ds,ax ;数据段地址送;数据段地址送ds mov ax,extra mov es,ax ;附加段地址送;附加段地址送es l

35、ea si,mess1 ;mess1首地址送首地址送si lea di,mess2 ;mess2首地址送首地址送di mov cx,17 ;字符串大小;字符串大小 cld ;地址自动增量方式;地址自动增量方式 rep movsb ;重复实现串复制;重复实现串复制 code ends 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第3333页页第第33页页第第5章章 80X86的指令系统的指令系统条件转移指令条件转移指令测试单个标志的转移指令:测试单个标志的转移指令:测试测试ZF的指令:的指令: JZ(JE)/JNZ(JNE)测试测试SF的指令:的指令: JS/JNS测试测试OF的指令:

36、的指令: JO/JNO测试测试PF的指令:的指令: JP(JPE)/JNP(JPO)测试测试CF的指令:的指令: JB(JC,JNAE)/JNB(JNC,JAE) 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第3434页页第第34页页无符号、带符号的转移指令无符号、带符号的转移指令 比较大小比较大小无符号数无符号数 JB / JCJNAE JBE/JNC JNAJNB/JNC JAE JNBE JA带符号数带符号数JL/JNGE JLE/JNGJNL/JGEJG/JNLE循环指令:循环指令: LOOP 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第3535页页第第35页页【

37、例例】: 判断判断AX当前值的正负(非零数),若为正数,则置当前值的正负(非零数),若为正数,则置CX为为50,否则令,否则令CX为为200。程序段一程序段一: CMP AX,0 JNS L MOV CX,200 JMP NEXTL: MOV CX,50NEXT: ;比较;比较AX是否为是否为0;若;若AX为为0,则转移,则转移;若;若AX不为不为0,则令,则令CX=200;跳转到;跳转到NEXT程序段二程序段二: ADD AX,0 JS L MOV CX,50 JMP NEXTL: MOV CX,200NEXT: 程序段三(用程序段三(用ZF测试)测试): TEST AX,8000H JNZ

38、 L MOV CX,50 JMP NEXTL: MOV CX,200NEXT: 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第3636页页第第36页页例例: 已知已知X为为16位的数,判断位的数,判断X是奇数还是偶数,若为奇数,则是奇数还是偶数,若为奇数,则令令Z=X,若为偶数,令,若为偶数,令Z=0。程序段一(用程序段一(用ZF测试)测试): MOV AX,X TEST AX,1 JNZ L MOV Z,0 JMP NEXTL: MOV Z,AXNEXT: 程序段二(用程序段二(用CF测试)测试): MOV AX,X BT AX,0 JC L MOV Z,0 JMP NEXTL:

39、MOV Z,AXNEXT: SHR AX,1 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第3737页页第第37页页【例例】 设X、Y均为存放在BUF1和BUF2单元中的16位带符号数,满足X100转移到TOOHIGH去执行,否则作XY,如出现溢出,则转移到OVERFLOW去执行,否则计算XY,并把结果存入RESULT中。 主要的程序段为: MOV AX,BUF1 ;取X值 CMP AX,100 JG TOOHIGH ;X100 转 SUB AX,BUF2 ;XYAX JO OVERFLOW ;溢出转OVERFLOW JNS NEXT ;为非负数,则转为非负数,则转NEXTNEXT

40、NEG AX NEXT: MOV RESULT,AX TOOHIGH: OVERFLOW: 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第3838页页第第38页页【例例】 X、Y为两个带符号双精度数,已分别存放于DX、AX及BX、CX中。要求编制一个程序使XY时,转向L1执行,XY时转向L2执行,XY时转L3执行。主要程序段如下: CMP DX,BX ;先比较高16位为带符号数 JG L1 JL L3 CMP AX,CX ;再比较低16位为无符号数 JA L1 JB L3 L2: L1: L3: 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第3939页页第第39页页例例:

41、M字数组的首地址字数组的首地址ARRAY,试编写一个程序,求出该数,试编写一个程序,求出该数组的内容之和(不考虑溢出),并把结果存入组的内容之和(不考虑溢出),并把结果存入TOTAL中。中。 程序段如下程序段如下: MOV CX,M ;循环次数;循环次数 MOV AX,0 ;AX寄存器清寄存器清0 MOV SI,AX ;SI寄存器清寄存器清0LSTART:ADD AX,ARRAYSI ADD SI,2 LOOP LSTART MOV TOTAL,AX ;结果送;结果送TOTAL 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第4040页页第第40页页例例: 已知已知ARRAY为字数组,

42、有为字数组,有200个元素,试统计该数组中零个元素,试统计该数组中零的个数,把结果放在的个数,把结果放在BX中。中。程序段如下程序段如下: XOR BX,BX ;BX清零清零 MOV CX,200 ;数组元素个数数组元素个数 LEA SI,ARRAY ;数组首地址送数组首地址送SI CLD ; DF=0AGAIN:LODSW ;从数组取一个数;从数组取一个数 CMP AX,0 ;比较是否为零;比较是否为零 JNZ NEXT ;不为零则跳转;不为零则跳转 INC BX ;为零则统计个数;为零则统计个数NEXT: DEC CX ;CX减一减一 JNZ AGAIN ;不为零则继续统计;不为零则继续统

43、计程序段也可改写为程序段也可改写为: XOR BX,BX MOV CX,200 LEA SI,ARRAYAGAIN:MOV AX,SI CMP AX,0 JNZ NEXT INC BXNEXT: ADD SI,2 LOOP AGAIN程序段也可改写为程序段也可改写为: XOR BX,BX MOV CX,200 MOV SI,0AGAIN:MOV AX,ARRAYSI CMP AX,0 JNZ NEXT INC BXNEXT: ADD SI,2 DEC CX JNZ AGAIN 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第4141页页第第41页页第第6章章 汇编语言程序格式汇编语言程

44、序格式段定义伪操作段定义伪操作数据定义及存储器分配伪操作数据定义及存储器分配伪操作 DB DW DD DF DQ DT DUP表达式赋值伪操作表达式赋值伪操作 EQU = 使用特点、差别使用特点、差别 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第4242页页第第42页页数据定义及存储器分配伪操作数据定义及存储器分配伪操作 DUP操作可以嵌套操作可以嵌套试给出下列变量所占用的存储空间(字节数)试给出下列变量所占用的存储空间(字节数)ARRAY DB ABC,200 DUP (20,10 DUP(EF,5,6),),10)TEST DW 1,2,10 DUP(20 DUP (9, 5

45、DUP (7,6,5),),10)例例: DUP嵌套使用嵌套使用 ARRAY3 DB 100 DUP(0,2 DUP(1,2),),0,3)占用的存储单元数为:占用的存储单元数为: 100(1+2(1+1)+1+1)=700B答案:答案: 1. ARRAY 8403 , TEST 6424 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第4343页页第第43页页例:例:试分析下列程序段执行完后,试分析下列程序段执行完后,AX的值。的值。 ORG 3200HARRAY DB abc EVENLIST DW 1,2,3,$+4,5 MOV CX,3 LEA BX,LIST ; SHL CX

46、,1 ; ADD BX,CX ; MOV AX,BX ;答案:答案:AX=320EH(BX)=3204H(CX)=6(BX)=320AH 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第4444页页第第44页页第第710章章 程序设计程序设计找最大找最大/最小值问题最小值问题奇数奇数/偶数、正偶数、正/负数判断,个数统计问题。负数判断,个数统计问题。累加求和问题,求平均数问题累加求和问题,求平均数问题数的大小判断和归类问题数的大小判断和归类问题字符串复制问题字符串复制问题不等数判断、求绝对值问题不等数判断、求绝对值问题 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第4545页

47、页第第45页页分支程序设计举例分支程序设计举例例例: :已知已知X X,Y Y是字变量,编制完整的程序段实现如下要求:是字变量,编制完整的程序段实现如下要求: 1 1)当)当X X和和Y Y均大于均大于0 0时,时,A=3A=3; 2 2)当)当X X和和Y Y均等于均等于0 0时,时,A=2A=2; 3 3)当)当X X和和Y Y均小于均小于0 0时,时,A=1A=1; 4 4)其他情况,)其他情况,A=0A=0。 分析分析: 这是个多重分支结构的程序。可以先判断这是个多重分支结构的程序。可以先判断X X,即,即X0X0,再,再判断判断Y Y的情况,若的情况,若Y0Y0,则执行,则执行A=3

48、A=3,否则,否则A=0A=0;依此类推,可;依此类推,可以完成其它操作。以完成其它操作。 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第4646页页第第46页页程序分支部分的流程框图程序分支部分的流程框图X0?Y=0?X=0?Y0?A=1A=0A=3A=2YYYYYNNNNNL1L2L3ZEROEXITZEROL5L6L7L8 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第4747页页第第47页页参考程序参考程序;数据段:定义相关变量,分配储存空间。;数据段:定义相关变量,分配储存空间。data segment ;定义;定义x、y、a变量变量 x dw ? y dw ?

49、a dw ?data endscode segment ;代码段;代码段 assume cs:code,ds:datastart: mov ax,data mov ds,ax ;设置;设置ds 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第4848页页第第48页页参考程序参考程序 cmp x,0 jg l1 ;大于;大于0则转移则转移L1 cmp x,0 ;比较;比较x的大小,此指令可省略的大小,此指令可省略 jl l5 ;小于;小于0则转移到则转移到L5 cmp y,0 ;比较;比较y=0? jnz zero ;不等则转移到;不等则转移到ZERO mov a,2 ;令;令a=2 j

50、mp exit ;结束分支部分;结束分支部分l5: cmp y,0 ;比较;比较y是否小于是否小于0? jnl zero ;不小于则转移到;不小于则转移到ZERO mov a,1 ;令;令a=1 jmp exit 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第4949页页第第49页页参考程序参考程序l1: cmp y,0 ;比较;比较y是否大于是否大于0 jng zero ;不大于则转移到;不大于则转移到ZERO mov a,3 ;大于则令;大于则令a=3 jmp exitzero: mov a,0 ;令;令a=0exit: mov ah,4ch ;返回;返回 int 21hcode

51、 ends end start 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第5050页页第第50页页例例: 已知有四个已知有四个16位带符号数位带符号数W、X、Y和和Z,试编写程序,若,试编写程序,若四个数中有一个为四个数中有一个为0,则把另外三个单元清零;若四个数都不,则把另外三个单元清零;若四个数都不为为0,则求其累加和(不考虑溢出),并保存到,则求其累加和(不考虑溢出),并保存到BUF单元中单元中。 参考程序:参考程序:DATA SEGMENT W DW ? ; 定义变量 X DW ? Y DW ? Z DW ? BUF DW ?DATA ENDSCODE SEGMENT A

52、SSUME CS:CODE, DS:DATA 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第5151页页第第51页页 START: MOV AX,DATA MOV DS,AX CMP X, 0 JZ ZERO CMP Y,0 JZ ZERO CMP Z,0 JZ ZERO CMP W,0 JZ ZERO MOV AX, W ADD AX,X ;四个数累加 ADD AX,Y ADD AX,Z MOV BUF,AX JMP NEXT ;置四个数为0ZERO: MOV W,0 MOV X,0 MOV Y,0 MOV Z,0NEXT: MOV AH,4CH INT 21HCODE ENDS

53、END START 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第5252页页第第52页页【例】从STR1为起始地址的100个字符,依次传送到以STR2为起始地址的连续字节存储单元中。(设两个数组不发生重叠)试用不同寻址方式编写循环程序。 方法一方法一:采用寄存器间接寻址方式编写循环程序。 DATA SEGMENT STR1 DB AB*$D ; 共100个字符 STR2 DB 100 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA BX,STR1 ; 取源数组首

54、址 LEA SI, STR2 ;取目标数组首址 MOV CX,100 ;置循环次数 LOP: MOV AL,BX ; MOV SI,AL ; 完成字符传送 INC BX ; 修改地址指针 INC SI ; LOOP LOP MOV AH,4CH INT 21H CODE ENDS END START 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第5353页页第第53页页方法二方法二:用寄存器相对寻址方式编写循环程序。 DATA SEGMENT STR1 DB AB*$D. ; 共100个字符 STR2 DB 100 DUP(?) DATA ENDS CODE SEGMENT ASSU

55、ME CS :CODE,DS :DATA START:MOV AX,DATA MOV DS,AX MOV SI,0 MOV CX,100 LOP: MOV AL,SI+STR1 MOV SI+STR2,AL INC SI LOOP LOP MOV AH,4CH INT 21H CODE ENDS END START 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第5454页页第第54页页方法三方法三 :采用基址变址寻址方式编写循环程序。 DATA SEGMENT STR1 DB AB*$D ; 共100个字符 STR2 DB 100 DUP(?) DATA ENDS CODE SEGM

56、ENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV BX,OFFSET STR1 LEA BP,STR2 MOV SI,0 MOV CX,100 LOP: MOV AL,BX +SI MOV DS:BP+SI,AL ;段超越指向数据段 INC SI LOOP LOP MOV AH,4CH INT 21H CODE ENDS END START 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第5555页页第第55页页方法四方法四:采用串传送指令编写循环程序。(数据段定义如方法三,此处略) CODE SEGMENT ASSU

57、ME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX ; 附加段的段首址与数据段重叠 LEA SI,STR1 ; 取原串首址 LEA DI,STR2 ; 取目的串首址 MOV CX,100 ; 取字符长度 CLD ; 增址方问 REP MOVSB MOV AH, 4CH INT 21H CODE ENDS END START 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第5656页页第第56页页 【例例】 从字节变量X单元开始,连续存放有100个无符号数,从中找出最大者送入MAX字节单元中。 分析:可把第一

58、个数先送到AL中,将AL中的数与后面的99个数逐个进行比较,如果AL中的数大于或等于与之相比较的数,则转下一个数进行比较;若AL中的数小于相比较的数,则把相比较的数送入AL中,保证AL中的数始终处于较大的数。比较99次之后最大数必定在AL中,最后把AL中的数送入MAX单元。 程序编写如下: DATA SEGMENT X DB 106,135,101,210,; 共100个 MAX DB ? DATA ENDS STAK SEGMENT STACK DW 20H DUP(?) STAK ENDS 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第5757页页第第57页页 CODE SEGM

59、ENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX,X MOV AL,BX MOV CX,99 LOP: INC BX CMP AL,BX JAE L1 MOV AL,BX L1 : LOOP LOP MOV MAX,AL MOV AH,4CH INT 21H CODE ENDS END START 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第5858页页第第58页页例:例: 已知字数组已知字数组ARRAY,有,有50个元素,试编写程序,从中个元素,试编写程序,从中找出最大值,把结果放在找出最大值,把结果放在

60、MAX中。中。DATA SEGMENT ARRAY DW 50 DUP(?)(?) MAX DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX,DATA MOV DS,AX LEA SI, ARRAY MOV CX,49 MOV AX,SI ADD SI,2AGAIN: CMP AX,SI JG NEXT MOV AX,SINEXT: ADD SI,2 LOOP AGAIN MOV MAX,AX MOV AX,4C00H INT 21HCODE ENDS END START 汇编语言程序设计汇编语言程序设计 复习提纲复习

61、提纲 第第5959页页第第59页页例:例:已知字数组已知字数组ARRAY,有,有N个元素,试编写程序,把数组中个元素,试编写程序,把数组中的正数累加,结果放在的正数累加,结果放在SUM中(不考虑溢出),并统计正数个中(不考虑溢出),并统计正数个数,保存到数,保存到COUNT。DATA SEGMENT ARRAY DW N DUP(?)(?) SUM DW 0 COUNT DW 0DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX,DATA MOV DS,AX LEA SI, ARRAY MOV CX,N AGAIN:MOV AX

62、,SI CMP AX,0 JLE NEXT ADD SUM,AX INC COUNTNEXT: ADD SI,2 LOOP AGAIN MOV AX,4C00H INT 21HCODE ENDS END START 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第6060页页第第60页页例:例: 试编写程序,求级数试编写程序,求级数12+22+32+ 的前的前n项和刚大于项和刚大于1000的项数的项数n。并在屏幕上显示结果(用十六进制)。并在屏幕上显示结果(用十六进制)。 (注:(注:n n是一个满足十六进制的个位数)是一个满足十六进制的个位数)CODE SEGMENT ASSUME

63、CS:CODE START: MOV BL,1 ; MOV CX,0 ;CX清零,用于统计级数的和清零,用于统计级数的和AGAIN: MOV AL,BL ; MUL BL ;求平方,指令也可使用;求平方,指令也可使用IMUL ADD CX,AX ;平方和;平方和 CMP CX,1000 ;比较;比较CX是否大于是否大于1000 JG DISPLAY ;是,则转入显示处理;是,则转入显示处理 INC BL ;不是,;不是,BL加加1 JMP SHORT AGAIN ;重复执行;重复执行 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第6161页页第第61页页DISPLAY:MOV DL,

64、BL ; CMP DL,9 ; 比较是否大于比较是否大于9 JG ADD37 ;是则转;是则转ADD37执行执行 ADD DL,30H ;不是,把数符变成;不是,把数符变成ASCII码码 JMP NEXTADD37: ADD DL,37HNEXT: MOV AH,2 ;显示一个字符;显示一个字符 INT 21H MOV AH,4CH ;返回;返回DOS INT 21HCODE ENDS END START 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第6262页页第第62页页【例例】已知字符串已知字符串MESS1MESS1中包含中包含5050个互不相等的字符,字符串个互不相等的字符,

65、字符串MESS2MESS2中包含中包含3030个互不相等的字符,找出既在个互不相等的字符,找出既在MESS1MESS1中出现,也中出现,也在在MESS2MESS2中出现的字符,组合成一一新的字符串,保存到中出现的字符,组合成一一新的字符串,保存到STRINGSTRING中,并把新字符串长度保存在中,并把新字符串长度保存在COUNTCOUNT。 分析分析: : 需要使用两重循环实现。需要使用两重循环实现。 从从MESS1MESS1中取一个字符,与中取一个字符,与MESS2MESS2逐个比较,符合要求的送逐个比较,符合要求的送STRINGSTRING。 重复这个过程,直到完成为止。重复这个过程,直

66、到完成为止。 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第6363页页第第63页页参考程序参考程序DATA SEGMENT MESS1 DB AB7DTB5 ; 共共50个字符个字符 MESS2 DB 9DACFG ;共;共30个字符个字符 STRING DB 30 DUP (?) ;给;给STRING分配存储空间分配存储空间 COUNT DB ? ;用于统计新字;用于统计新字符串字符数符串字符数DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI, MESS1 ;MESS

67、1首地址送首地址送SI LEA BX,STRING ;STRING首地址送首地址送BX MOV CX,50 ;MESS1长度,作为外循环次数长度,作为外循环次数 MOV COUNT,0 ;用;用COUNT统计统计STRING长度长度 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第6464页页第第64页页AGAIN: MOV AL,SI ;从;从MESS1中取出一个字中取出一个字符符 PUSH CX ;CX入栈入栈 MOV CX,30 ;MESS2长度,内循环次数长度,内循环次数 LEA DI,MESS2 ;MESS2首地址送首地址送DI CONTI: CMP AL,DI ;比较两个字

68、符是否相等;比较两个字符是否相等 JNZ NEXT MOV BX,AL ;相等把字符送;相等把字符送STRING INC BX ;指针指向下一个存储单元;指针指向下一个存储单元 INC COUNT ;字符串长度加;字符串长度加1 JMP EXIT1 ;退出内循环;退出内循环 NEXT: INC DI ; 指向下一个字符指向下一个字符 LOOP CONTI EXIT1: POP CX INC SI LOOP AGAIN MOV AH, 4CH INT 21HCODE ENDS END START 汇编语言程序设计汇编语言程序设计 复习提纲复习提纲 第第6565页页第第65页页子程序属性子程序属性 FAR(段间调用)、(段间调用)、NEAR(段内调用)(段内调用) 调用调用 CALL 返回返回 RET传递参数的三种方式:传递参数的三种方式:寄存器、堆栈和存储单元。寄存器、堆栈和存储单元。现场保护和现场恢复常采用的方法:现场保护和现场恢复常采用的方法:堆栈、存储单元和寄存器堆栈、存储单元和寄存器第第11章章 子程序结构程序设计子程序结构程序设计

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号