汇编语言及其程序设计课件.ppt

上传人:牧羊曲112 文档编号:1489087 上传时间:2022-12-01 格式:PPT 页数:133 大小:1.70MB
返回 下载 相关 举报
汇编语言及其程序设计课件.ppt_第1页
第1页 / 共133页
汇编语言及其程序设计课件.ppt_第2页
第2页 / 共133页
汇编语言及其程序设计课件.ppt_第3页
第3页 / 共133页
汇编语言及其程序设计课件.ppt_第4页
第4页 / 共133页
汇编语言及其程序设计课件.ppt_第5页
第5页 / 共133页
点击查看更多>>
资源描述

《汇编语言及其程序设计课件.ppt》由会员分享,可在线阅读,更多相关《汇编语言及其程序设计课件.ppt(133页珍藏版)》请在三一办公上搜索。

1、第六章 汇编语言及其程序设计,1,谢谢观赏,2019-8-23,主要内容,汇编程序及其开发过程指令格式及寻址方式8086汇编语言的基本语法顺序、分支、循环结构程序设计子程序设计,2,谢谢观赏,2019-8-23,汇编语言程序及开发过程,基本概念汇编语言:是一种面向机器的程序设计语言,它是机器语言的符号化描述。特点:代码短、空间省、效率高汇编语言源程序:用汇编语言编写的程序目标程序:汇编语言经翻译程序翻译成的代码程序(即机器语言的程序)。汇编程序:把源程序转变为相应目标程序的翻译程序,3,谢谢观赏,2019-8-23,宏汇编:不仅包含一般汇编语言的功能,而且采用了高级语言使用的数据结构,是一种接

2、近高级语言的汇编语言。汇编语言程序的开发过程编写源程序:EDIT(DOS),TextPad(Windows)将源程序保存为 XXXX.asm 文件使用MASM生成目标程序 XXXX.OBJ使用LINK生成可执行程序 XXXX.EXE,4,谢谢观赏,2019-8-23,使用汇编语言的过程,5,谢谢观赏,2019-8-23,基本汇编语言程序实例,(1) DATA SEGMENT(2) String DB 程序设计,”$”(3) DATA ENDS(4) CODE SEGMENT(5) ASSUME CS:CODE,DS:DATA,SS:STACK(6) START: MOV AX,DATA(7)

3、MOV DS,AX(8) MOV DX,OFFSET String(9) MOV AH,9(10) INT 21H(11) MOV AX,4C00H (12) INT 21H(13) CODE ENDS(14) STACK SEGMENT STACK(15) DB 256 DUP(?)(16) STACK ENDS(17) END START,AH = 9功能:显示字符串DS:DX = 串地址字符串以“$”结尾,AH = 4C功能:带返回码终止AL = 返回码,6,谢谢观赏,2019-8-23,汇编语言程序 的开发过程,7,谢谢观赏,2019-8-23,结构化程序设计程序设计的基本步骤分析问题

4、确定处理方案确定具体操作步骤,绘制流程图编写程序调试并运行程序,得到预期结果整理输出结果,写出有关文档资料,8,谢谢观赏,2019-8-23,流程图的画法,9,谢谢观赏,2019-8-23,指令格式及寻址方式,指令格式,操 作 码,操 作 数,OP CODE,D,W,0,1,2,7,形式1,OP CODE,D,W,0,1,2,7,形式2,OP CODE,D,W,0,1,2,7,形式3,DATA/DISP,DATA/DISP,12个字节,12个字节,MOD,REG,R / M,DATA/DISP,DATA/DISP,12个字节,12个字节,方向位,0:REG字段指出的寄存器为源操作数寄存器 1:

5、REG字段指出的寄存器为目的操作数寄存器,字位,0:参加运算的操作数为字节操作数 1:参加运算的操作数为字操作数,10,谢谢观赏,2019-8-23,MOD字段编码表,REG字段编码表,11,谢谢观赏,2019-8-23,MOD,R/M,12,谢谢观赏,2019-8-23,8086/8088常用指令集数据传送指令(14条),13,谢谢观赏,2019-8-23,算术运算指令(20条),14,谢谢观赏,2019-8-23,逻辑运算指令(13条),15,谢谢观赏,2019-8-23,字符串指令(10条),16,谢谢观赏,2019-8-23,控制转移指令(28条),17,谢谢观赏,2019-8-23,

6、处理机控制指令(12条),18,谢谢观赏,2019-8-23,寻址方式(重点)概述目的大多数情况下,指令不直接给出操作数本身,而是给出存放操作数的寄存器或者是内存单元的地址。大多数情况下,操作数地址也不是直接给出,而是给出计算操作数地址的方法,称之为寻址方式寻址方式的种类与数据有关的寻址方式(7种)与转移地址有关的寻址方式(4种),19,谢谢观赏,2019-8-23,MOV指令(简介)指令格式 mov 目的,源功能:该指令将源内容送至目的地址内例: mov ax, bx 将寄存器bx中的内容送到寄存器ax中,20,谢谢观赏,2019-8-23,与数据有关的寻址方式立即寻址方式操作数直接存放在指

7、令中,紧跟在操作码之后,它作为指令的一部分存放在代码段里,这种操作数称为立即数。立即数可以是8位的或者16位的。(386之后的机器也可以是32位的)立即数方式用来表示常数,它经常用来给寄存器赋初值。只能用于源操作数字段,不能用于目的操作数字段,且源操作数长度应与目的操作数长度一致。,21,谢谢观赏,2019-8-23,立即数寻址方式举例 MOV AL, 5 - 指令执行后(AL)= 05H MOV AX, 3064H - 指令执行后(AX)= 3064H,22,谢谢观赏,2019-8-23,寄存器寻址操作数在寄存器中,指令中指定寄存器号。16位的操作数,寄存器可以是 AX,BX,CX,DX,S

8、I,DI,SP,BP。8位的操作数,寄存器可以是 AH,AL,BH,BL,CH,CL,DH,DL。,例: MOV AX , BX,指令执行前: (AX)= 3064H (BX)= 1234H,指令执行后: (AX)= 1234H (BX)= 1234H,这种方式中,不需要访问存储器来取得操作数,所以这种方式可以得到较高的运算速度,23,谢谢观赏,2019-8-23,24,谢谢观赏,2019-8-23,操作数的地址,段地址,偏移地址,+,25,谢谢观赏,2019-8-23,8086/8088段寄存器和相应存放偏移地址的寄存器之间的默认组合,16位寻址是有效地址的三种成分的组成,26,谢谢观赏,2

9、019-8-23,直接寻址方式操作数的有效地制只包含位移量一种成分,其值就存放在代码段中指令的操作码之后。位移量的值就是操作数的有效地址。,例: MOV AX , 2000H,假设(DS)= 3000H,物理地址 = 3000H * 16 +2000H = 32000H,假设(32000H)= 3050H,则指令执行后,AX = 3050H,27,谢谢观赏,2019-8-23,可以用符号来代替数值地址 MOV AX , VALUE MOV AX , VALUE 如果在附加段,则应指定段前缀 MOV AX , ES:VALUE MOV AX , ES:VALUE,直接寻址方式只适用于处理单个变量

10、。例如某个存放在存储器中的变量,可以用直接寻址方式先把变量取出送到一个寄存器中,然后再做进一步的处理,28,谢谢观赏,2019-8-23,寄存器间接寻址方式操作数的有效地址只包含基址寄存器或变址寄存器的内容。因此有效地址就在某个寄存器中,而操作数在存储器中。16位寻址,可用的寄存器是BX,BP,SI,DI。 使用BX、SI、DI,其默认段是数据段DS 使用BP,其默认段是堆栈段SS,例:MOV AX , BX,如果(DS)= 2000H (BX)= 1000H,物理地址 = 2000H * 16 + 1000H = 21000H,如果(21000H)= 50A0H,指令执行后 AX = 50A

11、0H,寄存器间接寻址方式可以用于表格处理,执行完一条指令后,只需修改寄存器内容就可以取出表格的下一项。,29,谢谢观赏,2019-8-23,寄存器相对寻址方式操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和。,例:MOV AX , COUNTSI(也可以表示为 MOV AX , COUNT+SI),如果(DS)= 3000H (SI)= 2000H COUNT = 3000H,物理地址 = 3000H * 16 + 2000H + 3000H = 35000H,如果(35000H)= 1234H,指令执行后 AX = 1234H,寄存器相对寻址方式同样可以用于表格的处理,

12、表格的首地址可设置为偏移量的地址,利用修改基址或变址寄存器中的内容来取得表格中的值,30,谢谢观赏,2019-8-23,基址变址寻址方式操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,例:MOV AX , BXDI(也可以表示为 MOV AX , BX+DI),如果(DS)= 2100H (BX)= 0158H (DI)= 10A5H,物理地址 = 2100H * 16 + 0158H + 10A5H = 221FDH,如果(221FDH)= 1234H,指令执行后 AX = 1234H,基址变址寻址方式同样可以用于数组或表格的处理,表格的首地址可存放在基址寄存器中,利用变址寄存器

13、来访问数组或表格中的元素,31,谢谢观赏,2019-8-23,相对基址变址寻址方式操作数的有效地址是一个基址寄存器与一个变址寄存器的内容和指令中指定的位移量之和。,例:MOV AX , MASKBXSI(也可以表示 为MOV AX , MASK+BX+SI),如果(DS)= 3000H (BX)= 2000H (SI)= 1000H MASK = 0250H,物理地址 = 3000H * 16 + 2000H + 1000H + 0250H = 33250H,如果(33250H)= 1234H,指令执行后 AX = 1234H,相对基址变址寻址方式常用于二维数组的寻址,如存储器中存放着由多个记

14、录组成的文件,则位移量可以指向文件之首,基址寄存器指向某个记录,变址寄存器则指向该记录中的一个元素,32,谢谢观赏,2019-8-23,与转移地址有关的寻址方式目的确定转移指令(条件转移指令、无条件转移指令)及转子指令(CALL)的转向地址当转移发生在段内的时候,给出即将转移去执行的那条指令的偏移地址,并用该偏移地址取代IP寄存器中的内容当转去执行的指令与原来执行的指令不在同一段时,则还需要用新的代码段基址取代CS寄存器中原有的内容,33,谢谢观赏,2019-8-23,种类段内直接寻址段内间接寻址段间直接寻址段间间接寻址,34,谢谢观赏,2019-8-23,段内直接寻址转向的有效地址是当前IP

15、寄存器的内容和指令中指定的8位或16位位移量之和无条件转移指令在位移量为8位的时候称为短跳转 JMP SHORT QUEST IP IP+8位位移量无条件转移指令在位移量为16位的时候称为近跳转 JMP NEAR PTR PROGIA IP IP+16位位移量特点 指令中的位移量是转向的有效地址与当前IP值之差,所以这一程序段在内存的不同区域运行时,转移指令本身不会发生变化,符合程序再定位的要求,35,谢谢观赏,2019-8-23,段内间接转移转向的有效地址是一个寄存器或是一个存储单元的内容。 这个寄存器或者存储单元中的内容可以用除立即数以外的任何一种寻址方式获得 (IP)(EA),这种寻址方

16、式和以下的两种寻址方式都不能用于条件转移指令。即,条件转移指令只能使用段内直接寻址,而无条件转移指令JMP和CALL可以使用四种寻址方式中的任何一种。,36,谢谢观赏,2019-8-23,假设: (DS)= 2000H,(BX)= 1256H, (SI)= 528FH , 位移量 = 20A1H (232F7)= 3280H,(264E5H)= 2450H JMP BX 执行该指令后,(IP)= 1256H JMP TABLEBX 执行该指令后, (IP)= (DS)* 16 + (BX)+ 位移量) = (20000H + 1256H + 20A1H) = (232F7H)= 3280H J

17、MP BXSI (IP)= (DS)* 16 + (BX)+ (SI) = (20000H + 1256H + 528H) = (264E5H)= 2450H,寄存器相对寻址方式,基址变址寻址方式,37,谢谢观赏,2019-8-23,段间直接寻址指令中直接提供了转向的段地址和偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的内容,用指令中指定的段地址取代CS寄存器中的内容完成的操作 JMP FAR PTR OPR (IP) OPR的段内偏移地址 (CS) OPR所在的段地址,38,谢谢观赏,2019-8-23,段间间接寻址用存储器中的两个相继字的内容来取代IP和CS寄存器中的原始内容,以

18、达到段间转移的目的。 存储单元的地址是由指令指定除立即数方式和寄存器方式以外的任何一种数据寻址方式获得完成的操作 JMP DWORD PTR OPR (IP) (EA) (CS) (EA+2)例 JMP DWORD PTRBX+8 (BX)= 3706H,(DS)= 1000H 物理地址 = (DS)* 16 + (BX)+ 8 = 10000H + 3706H + 8 = 1370EH,指令执行后,(IP)= 67B2H,(CS)= 3305H,39,谢谢观赏,2019-8-23,8086宏汇编语言的基本语法,汇编语句指令性语句经汇编之后,有目标程序与之对应,是有实际操作的语句。一般指令性语

19、句 一条指令性语句对应一条8086/8088机器指令宏语句 该语句由伪操作符定义,通过宏定义、宏调用、宏扩展的过程来实现宏语句。一个宏语句对应一组目标代码程序,40,谢谢观赏,2019-8-23,macro name MACRO dummy parameter list 宏定义体 ENDMmacro name actual parameter list,41,谢谢观赏,2019-8-23,指令性语句格式 标号:前缀指令助记符操作数,操作数;注释标号:代表“:”后面语句的存储地址,供转移指令(JMP)、转子指令(CALL)、循环指令(LOOP)使用。 由字母、数字组成串(第一个字符非数字)前缀:

20、是与串操作运算(MOVS、CMPS、SCAS、LODS、STOS)以及总线封锁指令(LOCK)配合使用的部分。它们是REP、REPZ、REPE、REPNZ、REPNE等等。 LOOP1: REP MOVS DEST, SOURCE操作数的数目可以为0,1或2,用“,”隔开,42,谢谢观赏,2019-8-23,指示性语句功能:对程序的起止信息、分段情况、变量说明、内存结构等进行说明。格式: 名字伪操作指令参数,参数;注释PC宏汇编的伪指令段定义伪指令:SEGMENT,ENDS,ASSUME,GROUP,ORG符号定义伪指令:EQU,=,LABEL数据定义伪指令:DB,DW,DD,DQ,DT,RE

21、CORD,STRUC,43,谢谢观赏,2019-8-23,过程定义伪指令:PROC,ENDP宏处理伪指令:MACRO,REPT,IRPC条件汇编伪指令:IF,ENDIF,IFDIF,IFDEF基本元素汇编语言字符集大写字母:AZ小写字母:az数字:09符号:+,-,*,/,(,),;,,,.,:,_,“,$,&,#,?,! 注:汇编语言源程序中,大小写字母作用相同,44,谢谢观赏,2019-8-23,常量与数值表达式常量在汇编时已经确定的值。在指令中作为直接操作数,或者给变量赋初值类型数值常量:以数值的形式直接写在语句中符号常量:预先为它定义一个名字,然后在语句中用名字来表示该常量(提高程序的

22、可读性) 用 EQU 或 = 来定义 例:PORT EQU 83H ALPHT = 35*21,45,谢谢观赏,2019-8-23,各种形式常量的格式,返 回,46,谢谢观赏,2019-8-23,标号标号是为一组机器指令所起的名字,用于程序转移指令、调用指令和循环指令的操作数(转向地址),一般在CS段内定义和使用。标号的属性:段地址、段内偏移地址和类型 标号所处的代码段的段基址,称为该标号的段地址 标号所处的位指向对于段首地址的相对地址,称为该标号的段内偏移地址形式一:标号形式二:OFFSET 标号,LC1: MOV AL, 20H JMP LC1,MOV BX, OFFSET LB1,MOV

23、 BX, OFFSET LB1 与 MOV BX, LB1 有什么不同?,47,谢谢观赏,2019-8-23,标号有FAR(远标号)和NEAR(近标号)种类型近标号:该标号的定义在本段 在机器指令助记符之前,加一标号名字,后面紧跟一个冒号 “ :” LC1: MOV AL, 20H JMP LC1远标号:该标号的定义不在本段 过程定义时,为过程起的名字也是标号,可作为转子指令的操作数,这类标号的类型在定义子过程时确定 PROP PROC FAR PROP ENDP,48,谢谢观赏,2019-8-23,注:标号在使用时 (1)循环指令、条件转移指令只能引用NEAR型, 并且定义标号语句和使用标号

24、语句的相对 距离只能在 128 +127 字节范围内 (2)无条件转移指令、调用(转子)指令可引 用 NEAR 和 FAR 两种类型的标号 (3)如果同一段内,无条件转移指令语句到定 义该标号语句的距离在 128 +127 字节 范围内,则可在使用的标号前指定为短标 号:记为 SHORT 标号,49,谢谢观赏,2019-8-23,变量变量的定义及格式变量是内存中一个数据区的名字,可以作为指令的存储器操作数来引用变量定义的格式: 变量名 变量类型定义符 表达式 ,,变量名:由用户定义(符合标识符定义的规范),变量类型:DB: 1个字节 DW: 2个字节,即1个字DD: 4个字节,即2个字DQ:

25、8个字节,即4个字DT: 10个字节,即5个字,50,谢谢观赏,2019-8-23,表达式算术运算符:+,-,*,/,逻辑运算符:NOT, AND, OR, XOR关系运算符:EQ - 相等NE - 不相等LT - 小于GT - 大于LE - 小于或等于GE - 大于或等于,51,谢谢观赏,2019-8-23,分析操作符TYPE 格式: TYPE 变量或标号 说明:变量:则汇编程序将回送该变量类型包含的 字节数 标号:则汇编程序将回送代表该标号类型的 数值。 NEAR(-1)、FAR(-2),例: ARRAY DW 1, 2, 3 ADD SI, TYPE ARRAY,汇编的结果为 ADD S

26、I, 2,52,谢谢观赏,2019-8-23,LENGTH 格式: LENGTH 变量 说明:回送分配给该变量的单元数,表达式中带 DUP 时有效,非 DUP 时,回送1,例: FEES DW 100DUP(0) MOV CX, LENGTH FEES,则汇编结果为: MOV CX, 100,例: ARRAY DW 1, 2 MOV CX, LENGTH ARRAY,则汇编结果为: MOV CX, 1,53,谢谢观赏,2019-8-23,SIZE 格式:SIZE 变量 说明:回送分配给该变量的字节数,此值是 LENGTH 值和 TYPE 值的乘积,例: ARRAY DW 1, 2, 3 MOV

27、 CX, SIZE ARRAY,则汇编结果为: MOV CX, 2,OFFSET 格式:OFFSET 变量或标号 说明:回送该变量或标号的偏移地址值,例: MOV BX, OFFSET OPR 则汇编程序将OPR的偏移地址回送给指令,在 执行时,将该偏移地址装入BX寄存器中,54,谢谢观赏,2019-8-23,SEG 格式:SEG 变量或标号 说明:回送该变量或标号的段地址,例: MOV BX, SEG OPR,则汇编程序将OPR所在的段基址送入BX寄存器,属性操作符 I. PTR 格式:类型 PTR 表达式 类型:BYTE, WORD, DWORD, FAR, NEAR 表达式:是存储器操作

28、数 说明:用来给已分配的存储地址赋予另一种属性,使 该地址具有另一种类型,例: MOV BX, 5, 非法指令,MOV BYTE PTR BX, 5MOV WORD PTR BX, 5,55,谢谢观赏,2019-8-23,II. 段超越前缀 说明:用来表示一个标号、变量或地址表达式的段属 性 例:用段前缀来指定某段的地址操作数 MOV AX, ES:BX+SI III.SHORT 说明:表明JMP指令中转移地址的属性 128+127,56,谢谢观赏,2019-8-23,指示性语句(说明性语句)存储分配语句数值表达式如 3*20? 保留存储空间但不存入数据例: ABC DB 0, ?, ?, 0

29、 DEF DW ?, 52 存储空间分配如图所示 ASCII字符串例: MESSAGE DB HELLO 存储空间分配如图所示,00,-,-,00,-,-,34,00,ABC,DEF,48,45,4C,4C,4F,MESSAGE,57,谢谢观赏,2019-8-23,nDUP(?) 重复因子n为正整数,表示数据项重复n次例: ARRAY1 DB 2 DUP (0, 1, 2, ?) ARRAY2 DB 100 DUP (?) 内存分配如图所示nDUP( 表达式 表达式, )例: ARRAY3 DB 100 DUP ( 0, 2 DUP (1, 2), 0, 3),返 回,58,谢谢观赏,2019

30、-8-23,段定义段定义语句段名 SEGMENT 边界类型连接类型类别段名 ENDS边界类型:用来指明段的起始边界连接类型:段的连接方式类别:表示段的类别,连接程序只使同类别的段发生关联段值设定伪指令语句ASSUME格式 ASSUME 段寄存器:段名,段寄存器:段名,,59,谢谢观赏,2019-8-23,SEGA SEGMENTSEGA ENDSSEGB SEGMENTSEGB ENDSCODE SEGMENT ASSUME DS:SEGA, ES:SEGB, CS:CODE, SS:NOTHING MOV AX, SEGA MOV DS, AX MOV AX, SEGB MOV ES, AX

31、 CODE ENDS,60,谢谢观赏,2019-8-23,ORG 置汇编单元计数器语句功能:用来指出其后的程序段或数据块存放的起 始地址的偏移量格式: ORG 表达式 汇编程序用语句中表达式之值作为起始地址连续存放程序例: VECTORS SEGMENT ORG 10 VECT1 DW 47A5H ORG 20 VECT2 DW 0C596H VECTORS ENDS,VECT1偏移地址为0AH,VECT2偏移地址为14H,61,谢谢观赏,2019-8-23,地址计数器$汇编程序对源程序进行汇编时,使用$保存当前正在汇编的指令的偏移地址。开始汇编或在每一段开始时,地址计数器初始化为0,以后在汇

32、编过程中,每处理一条指令,地址计数器增加一个值,此值为该指令所需要的字节数例 JNE $+6 当上一条指令执行的结果不为零时,转向地址是JNE指令的首地址加上6 注:$+6必须为另一条指令的首地址,否则,汇编 程序将指示出错信息,62,谢谢观赏,2019-8-23,例:计算字符串的长度 STRING DB “THIS IS A BOOK”,能否用分析操作符SIZE来计算?,COUNT EQU $ - STRING,例:计算数的个数 ARRAY DW 1, 2, 3, 4, 5, 6,COUNT EQU ($ - ARRAY)/2,63,谢谢观赏,2019-8-23,过程定义过程也称为 “子程序

33、”CALL指令调用过程,RET指令结束过程过程具有“NEAR”属性和“FAR”属性,如果不指定属性,汇编程序认为它是“NEAR”属性具有NEAR属性的过程,只能由属于该过程的段中的其它程序调用具有FAR属性的过程,可以由任意段调用格式过程名 PROC NEAR 或 FAR RET过程名 ENDP,64,谢谢观赏,2019-8-23,SEGX SEGMENT SUBT PROC FAR RETSUBT ENDP CALL FAR PTR SUBT SEGX ENDSSEGY SENGMENT CALL FAR PTR SUBT SEGY ENDS,65,谢谢观赏,2019-8-23,DOS下程序

34、正常结束的方式MOV AH, 4CH INT 21H主程序名 PROC FAR PUSH DS MOV AX, 0 PUSH AX RET 主程序名 ENDP,66,谢谢观赏,2019-8-23,顺序结构程序设计,数据传送指令一般传送指令格式:MOV 目的,源功能:将源内容送至目的地址内说明:该指令有7种格式MOV MEM / REG1 , MEM / REG2 MOV AX, BX MOV AX, 2000H MOV 2000H, DSMOV REG, DATAMOV AL, 5,不可两个内存位置直接传送数据,67,谢谢观赏,2019-8-23,MOV AC , MEMMOV MEM, AC

35、MOV SEGREG, MEM / REGMOV DS, AXMOV MEM/REG, SEGREGMOV AX, DSMOV MEM/REG, DATAMOV AX, 3168H,段寄存器之间不能传送数据,MOV指令不能改变CS当前的内容,68,谢谢观赏,2019-8-23,69,谢谢观赏,2019-8-23,交换指令格式:XCHG OPR1, OPR2功能:将源操作数OPR2内容和目的操作数OPR1 内容互换 (OPR1)(OPR2)说明段寄存器不能作为操作数无法将两个内存内容互换例:XCHG BX, BP+SI (BX)= 6F30H (BP)= 0200H (SI)= 0046H (S

36、S)= 2F00H (2F246H)= 4154H OPR2的物理地址 = 2F00H*16d + 0200H +0046H = 2F246H,指令执行后:(BX)= 4154H(BP+SI)= 6F30H,70,谢谢观赏,2019-8-23,堆栈操作命令格式PUSH SRC 执行的操作(16位指令) (SP) (SP)- 2 (SP)+ 1,(SP) (SRC)POP DST 执行的操作(16位指令) (DST) (SP)+ 1,(SP) (SP) (SP)+ 2,注意:8086/8088中,不允许立即数进栈 标志寄存器的内容入栈和出栈:PUSHF和POPF,71,谢谢观赏,2019-8-2

37、3,例: PUSH AX 将寄存器AX的内容压入堆栈 PUSH DS 将寄存器DS的内容压入堆栈 PUSH WORD PTR BX 将内存单元中的字压入堆栈 POP CX 将堆栈栈顶16位的字送入寄存器CX中 PUSHF MOV BP, SP AND BP, 0FEFFH POPF 修改标志寄存器中TF的值,72,谢谢观赏,2019-8-23,地址传送指令取偏移地址指令格式: LEA REG, SRC执行的操作 (REG) SRC功能:将内存变量的偏移地址送入16位的通用寄存器中例 LEA BX, BX+SI+0F62H (BX)= 0400H (SI)= 003CH 执行后 BX = 040

38、0H + 003CH+ 0F62H = 139EH说明:LEA指令与分析操作符OFFSET功能类似,LEA的 功能更强,指令中的操作数可带下标,73,谢谢观赏,2019-8-23,取32位地址指令 LDS, LES格式: LDS REG, SRC LES REG, SRC执行的操作 (REG)(SRC) (SREG)(SRC+2)功能:内存的一个双字存储地址,内容的高十六位为 段地址,低十六位是偏移量地址。将偏移量地 址送入指定的寄存器中,段地址送入DS或ES中例 ADDR DD 11223344H LDS SI, ADDR 执行后, (DS)= 1122H (SI)= 3344H,74,谢谢

39、观赏,2019-8-23,数据段,存放段地址和偏移地址,存放偏移地址,75,谢谢观赏,2019-8-23,算术运算指令二进制加法运算指令ADD, ADC, INCADD指令格式: ADD DST, SRC执行的操作 (DST)(SRC)+(DST)影响标志位:CF, OF, ZF, SF(只考虑主要的标志位)例 ADD DX, 0F0F0H 指令执行前 (DX)= 4652H 1111 0000 1111 0000 + 0100 0110 0101 0010 1 0011 0111 0100 0010 指令执行后: (DX)= 3742H ZF = 0, SF = 0, CF = 1, OF

40、= 0,76,谢谢观赏,2019-8-23,带进位的加法指令ADC格式: ADC DST, SRC执行的操作:(DST)(SRC)+(DST)+CF例:设目的操作数存放在DX和AX,其中DX存放高位 字。源操作数存放在BX,CX中,其中BX存放高位 字。指令执行前: (DX)= 0002H,(AX)= 0F365H,(BX)= 0005H,(CX)= 0E024H 指令序列为:ADD AX, CX (1) ADC DX, BX (2) 指令1执行后: (AX)= 0D389H, SF =1, ZF = 0, CF = 1, OF = 0 指令2执行后: (DX)= 0008H, SF = 0,

41、 ZF = 0, CF = 0, OF = 0,0002H,0F365H,DX,AX,0005H,0E024H,BX,CX,77,谢谢观赏,2019-8-23,INC指令格式: INC OPR执行的操作: (OPR)(OPR)+ 1,78,谢谢观赏,2019-8-23,例:X = 124, Y = 5, 将X+Y的结果存于RESULT 单元中。,DATA SEGMENT X DB 124 Y DB 5 RESULT DB ?DATA ENDS,CODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, AX MOV AL, X

42、 ADD AL, Y MOV RESULT, AL MOV AH, 4CH INT 21HCODE ENDS END START,79,谢谢观赏,2019-8-23,二进制减法指令SUB, SBB, DEC, NEG, CMPSUB 减法指令格式: SUB DST, SRC执行的操作: (DST)(DST)-(SRC)SBB 带借位减法指令格式: SBB DST, SRC执行的操作: (DST)(DST)-(SRC)- CFDEC 减1指令格式: DEC OPR执行的操作: (OPR)(OPR)-1,80,谢谢观赏,2019-8-23,NEG 求补指令格式: NEG OPR执行的操作: (OP

43、R) -(OPR)说明:把操作数按位求反后末位加1,因而执行的操作也可以表示为: (OPR) 0FFFFH -(OPR)+1CMP 比较指令格式: CMP OPR1, OPR2执行的操作: (OPR1)-(OPR2)说明:该指令执行的操作与SUB指令执行的操作一样, 但不保存结果。 根据该指令执行的结果设置标志位,81,谢谢观赏,2019-8-23,例:设X, Y, Z均位双精度数,他们分别存放在地 址为X, X+2, Y, Y+2, Z, Z+2的存储单元中 中,存放时高位字在高地址中,低位字在低 地址中,在8086中如何实现WX+Y+24-Z,DATA SEGMENT X DD 11223

44、344H Y DD 55667788H Z DD 22336699H W DD ?DATA ENDS,START: MOV AX, DATA MOV DS, AX,MOV AX, X MOV DX, X+2,ADD AX, Y ADC DX, Y+2,ADD AX, 24 ADC DX, 0,SUB AX, Z SBB DX, Z+2,MOV W, AX MOV W+2, DX,MOV AX, 4C00H INT 21H,82,谢谢观赏,2019-8-23,二进制乘法指令:MUL,IMULMUL 无符号数乘法格式: MUL SRC执行的操作:字节操作数: (AX)(AL)*(SRC)字操作数

45、:(DX, AX)(AX)*(SRC)IMUL 带符号数乘法格式: IMUL SRC执行的操作与MUL相同,注:乘法指令只对CF和OF有定义 对于MUL指令:如果乘积的高一半为0,则CF和OF均为0,否则为1。这样 的条件妈设置可以用来检查字节乘积的结果是字节还是字 对于IMUL指令:如果乘积的高一半是低一半的符号扩展,则CF和OF均为 0,否则为1,83,谢谢观赏,2019-8-23,例:如(AL)= 0B4H,(BL)=11H,求指令 IMUL BL 和 MUL BL 的结果 解:(AL)= 0B4H 无符号数为180D,带符号数为-76D (BL)= 11H 无符号数为17D,带符号数为

46、17D 执行 IMUL BL 的结果为 (AX)= 0FAF4H = -1292D, CF=OF=1 执行 MUL BL 的结果为 (AX)= 0BF4H = 3060D, CF=OF=1,84,谢谢观赏,2019-8-23,二进制除法指令:DIV,IDIV无符号数除法 DIV格式: DIV SRC执行的操作:字节操作:16位的被除数在AX中,8位的除数为源操作数,结果的8位商在AL中,8位余数在AH中 (AL)(AX)/(SRC)的商 (AH)(AX)/(SRC)的余数字操作:32位的被除数在DX,AX中,DX为高位字;16位的除数为源操作数,结果的16位商在AX中,16位的余数在DX中 (

47、AX)(DX, AX)/(SRC)的商 (DX)(DX, AX)/(SRC)的余数,85,谢谢观赏,2019-8-23,带符号数除法 IDIV格式: IDIV SRC执行的操作:与DIV执行的操作相同。但操作数必须是带符号数,商和余数也都是带符号数,86,谢谢观赏,2019-8-23,例:如(AX)= 0400H,(BL)=0B4H,求指 令 IDIV BL 和 DIV BL 的结果 解:(AX)= 0400H 无符号数为1024D,带符号数为+1024D (BL)= 0B4H 无符号数为180D,带符号数为-76D 执行 DIV BL 的结果为 (AH)= 7CH = 124D 余数 (AL

48、)= 05H = 5D 商 执行 IDIV BL 的结果为 (AH)= 24H = 36D 余数 (AL)= 0F3H = -13D 商,87,谢谢观赏,2019-8-23,符号位扩充:CBW, CWDCBW 字节转换为字格式: CBW执行的操作:AL的内容符号为扩展到AH,形成AX中的字。即如果(AL)的最高有效位为0,则(AH)=0;如果(AL)的最高有效位为1,则(AH)=0FFHCWD 字转换为双字格式: CWD执行的操作:AX的内容符号扩展到DX,形成DX:AX中的双字。即如果(AX)的最高有效位为0,则(DX)=0;如果(AX)的最高有效位为1,则(DX)=0FFFFH,88,谢谢

49、观赏,2019-8-23,例:算术综合运算举例,计算(V -(X * Y + W - 540)/ X 其中,X, Y, W, V均为16位带符号数,已分别装入X, Y, W, V单元 中,要求上式计算的结果的商存入AX寄存器,余数存入DX寄存器,IDIV X,89,谢谢观赏,2019-8-23,8086/8088位处理运算指令逻辑运算指令NOT 指令格式: NOT OPR执行的操作:(OPR)(OPR)AND 指令格式: AND DST, SRC执行的操作:(DST)(DST)(SRC)OR 指令格式: OR DST, SRC执行的操作:(DST)(DST)(SRC),90,谢谢观赏,2019

50、-8-23,XOR 指令格式: XOR DST, SRC执行的操作:(DST)(DST)(SRC)TEST 指令格式: TEST DST, SRC执行的操作:(DST)(SRC)注:该指令执行完毕,设置相应的标志位,不保存结 果,91,谢谢观赏,2019-8-23,例1 要求将AL的第5位置1 MOV AL, 43H OR AL, 20H 0100 0011 0010 0000 OR 0110 0011例2 要测试AL寄存器中第2位是否为1,若为1则 转移到EXIT去执行 TEST AL, 00000100B JNE EXIT,92,谢谢观赏,2019-8-23,移位指令算术移位指令格式: S

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号