收藏 分享(赏)

第六章 汇编语言及其程序设计.ppt

上传人:涵涵文库 文档编号:5537787 上传时间:2019-03-06 格式:PPT 页数:133 大小:832.50KB
下载 相关 举报
第六章 汇编语言及其程序设计.ppt_第1页
第1页 / 共133页
第六章 汇编语言及其程序设计.ppt_第2页
第2页 / 共133页
第六章 汇编语言及其程序设计.ppt_第3页
第3页 / 共133页
第六章 汇编语言及其程序设计.ppt_第4页
第4页 / 共133页
第六章 汇编语言及其程序设计.ppt_第5页
第5页 / 共133页
点击查看更多>>
资源描述

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

2、xtPad(Windows) 将源程序保存为 XXXX.asm 文件 使用MASM生成目标程序 XXXX.OBJ 使用LINK生成可执行程序 XXXX.EXE,使用汇编语言的过程,基本汇编语言程序实例,(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) MOV DS,AX (8) MOV DX,OFFSET String (9) MOV AH,9 (10) INT 21H (11)

3、 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 = 返回码,汇编语言程序的开发过程,结构化程序设计 程序设计的基本步骤 分析问题 确定处理方案 确定具体操作步骤,绘制流程图 编写程序 调试并运行程序,得到预期结果 整理输出结果,写出有关文档资料,流程图的画法,指令格式及寻址方式,指令格式,操 作

4、 码,操 作 数,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:REG字段指出的寄存器为目的操作数寄存器,字位,0:参加运算的操作数为字节操作数1:参加运算的操作数为字操作数,MOD字段编码表,REG字段编码表,MOD,R/M,8086/8088常用指令集 数据传送指令(14条),算术运算指

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

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

7、BL,CH,CL,DH,DL。,例: MOV AX , BX,指令执行前: (AX)= 3064H (BX)= 1234H,指令执行后: (AX)= 1234H (BX)= 1234H,这种方式中,不需要访问存储器来取得操作数, 所以这种方式可以得到较高的运算速度,操作数的地址,段地址,偏移地址,+,8086/8088段寄存器和相应存放偏移地址的寄存器之间的默认组合,16位寻址是有效地址的三种成分的组成,直接寻址方式 操作数的有效地制只包含位移量一种成分,其值就存放在代码段中指令的操作码之后。位移量的值就是操作数的有效地址。,例: MOV AX , 2000H,假设(DS)= 3000H,物理

8、地址 = 3000H * 16 +2000H = 32000H,假设(32000H)= 3050H,则指令执行后,AX = 3050H,可以用符号来代替数值地址MOV AX , VALUEMOV AX , VALUE如果在附加段,则应指定段前缀MOV AX , ES:VALUEMOV AX , ES:VALUE,直接寻址方式只适用于处理单个变量。例如某个存放在 存储器中的变量,可以用直接寻址方式先把变量取出送 到一个寄存器中,然后再做进一步的处理,寄存器间接寻址方式 操作数的有效地址只包含基址寄存器或变址寄存器的内容。因此有效地址就在某个寄存器中,而操作数在存储器中。 16位寻址,可用的寄存器

9、是BX,BP,SI,DI。使用BX、SI、DI,其默认段是数据段DS使用BP,其默认段是堆栈段SS,例:MOV AX , BX,如果(DS)= 2000H (BX)= 1000H,物理地址 = 2000H * 16 + 1000H= 21000H,如果(21000H)= 50A0H,指令执行后 AX = 50A0H,寄存器间接寻址方式可以用于表格处理,执行完一条指令后, 只需修改寄存器内容就可以取出表格的下一项。,寄存器相对寻址方式 操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和。,例:MOV AX , COUNTSI(也可以表示为MOV AX , COUNT+SI),

10、如果(DS)= 3000H (SI)= 2000HCOUNT = 3000H,物理地址 = 3000H * 16 + 2000H + 3000H = 35000H,如果(35000H)= 1234H,指令执行后 AX = 1234H,寄存器相对寻址方式同样可以用于表格的处理,表格的首地 址可设置为偏移量的地址,利用修改基址或变址寄存器中的 内容来取得表格中的值,基址变址寻址方式 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,例:MOV AX , BXDI(也可以表示为MOV AX , BX+DI),如果(DS)= 2100H (BX)= 0158H(DI)= 10A5H,物理地址

11、 = 2100H * 16 + 0158H + 10A5H = 221FDH,如果(221FDH)= 1234H,指令执行后 AX = 1234H,基址变址寻址方式同样可以用于数组或表格的处理,表格的 首地址可存放在基址寄存器中,利用变址寄存器来访问数组 或表格中的元素,相对基址变址寻址方式 操作数的有效地址是一个基址寄存器与一个变址寄存器的内容和指令中指定的位移量之和。,例:MOV AX , MASKBXSI(也可以表示为MOV AX , MASK+BX+SI),如果(DS)= 3000H (BX)= 2000H(SI)= 1000H MASK = 0250H,物理地址 = 3000H *

12、16 + 2000H + 1000H + 0250H = 33250H,如果(33250H)= 1234H,指令执行后 AX = 1234H,相对基址变址寻址方式常用于二维数组的寻址,如存储器中存 放着由多个记录组成的文件,则位移量可以指向文件之首,基 址寄存器指向某个记录,变址寄存器则指向该记录中的一个元 素,与转移地址有关的寻址方式 目的 确定转移指令(条件转移指令、无条件转移指令)及转子指令(CALL)的转向地址 当转移发生在段内的时候,给出即将转移去执行的那条指令的偏移地址,并用该偏移地址取代IP寄存器中的内容 当转去执行的指令与原来执行的指令不在同一段时,则还需要用新的代码段基址取代

13、CS寄存器中原有的内容,种类 段内直接寻址 段内间接寻址 段间直接寻址 段间间接寻址,段内直接寻址 转向的有效地址是当前IP寄存器的内容和指令中指定的8位或16位位移量之和无条件转移指令在位移量为8位的时候称为短跳转JMP SHORT QUEST IP IP+8位位移量 无条件转移指令在位移量为16位的时候称为近跳转JMP NEAR PTR PROGIA IP IP+16位位移量 特点指令中的位移量是转向的有效地址与当前IP值之差,所以这一程序段在内存的不同区域运行时,转移指令本身不会发生变化,符合程序再定位的要求,段内间接转移 转向的有效地址是一个寄存器或是一个存储单元的内容。这个寄存器或者

14、存储单元中的内容可以用除立即数以外的任何一种寻址方式获得(IP)(EA),这种寻址方式和以下的两种寻址方式都不能用于条件转移指令。 即,条件转移指令只能使用段内直接寻址,而无条件转移指令 JMP和CALL可以使用四种寻址方式中的任何一种。,假设: (DS)= 2000H,(BX)= 1256H,(SI)= 528FH , 位移量 = 20A1H(232F7)= 3280H,(264E5H)= 2450HJMP BX执行该指令后,(IP)= 1256HJMP TABLEBX执行该指令后,(IP)= (DS)* 16 + (BX)+ 位移量) = (20000H + 1256H + 20A1H)=

15、 (232F7H)= 3280HJMP BXSI(IP)= (DS)* 16 + (BX)+ (SI) = (20000H + 1256H + 528H)= (264E5H)= 2450H,寄存器相对寻址方式,基址变址寻址方式,段间直接寻址 指令中直接提供了转向的段地址和偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的内容,用指令中指定的段地址取代CS寄存器中的内容 完成的操作 JMP FAR PTR OPR(IP) OPR的段内偏移地址(CS) OPR所在的段地址,段间间接寻址 用存储器中的两个相继字的内容来取代IP和CS寄存器中的原始内容,以达到段间转移的目的。存储单元的地址是由指

16、令指定除立即数方式和寄存器方式以外的任何一种数据寻址方式获得 完成的操作 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,8086宏汇编语言的基本语法,汇编语句 指令性语句 经汇编之后,有目标程序与之对应,是有实际操作的语句。 一般指令性语句一条指令性语句对应一条8086/8088机器指令 宏语句该语句由伪操作符定义

17、,通过宏定义、宏调用、宏扩展的过程来实现宏语句。一个宏语句对应一组目标代码程序,macro name MACRO dummy parameter list 宏定义体ENDMmacro name actual parameter list,指令性语句格式标号:前缀指令助记符操作数,操作数;注释 标号:代表“:”后面语句的存储地址,供转移指令(JMP)、转子指令(CALL)、循环指令(LOOP)使用。由字母、数字组成串(第一个字符非数字) 前缀:是与串操作运算(MOVS、CMPS、SCAS、LODS、STOS)以及总线封锁指令(LOCK)配合使用的部分。它们是REP、REPZ、REPE、REPNZ

18、、REPNE等等。LOOP1: REP MOVS DEST, SOURCE 操作数的数目可以为0,1或2,用“,”隔开,指示性语句 功能:对程序的起止信息、分段情况、变量说明、内存结构等进行说明。 格式:名字伪操作指令参数,参数;注释 PC宏汇编的伪指令 段定义伪指令:SEGMENT,ENDS,ASSUME,GROUP,ORG 符号定义伪指令:EQU,=,LABEL 数据定义伪指令:DB,DW,DD,DQ,DT,RECORD,STRUC,过程定义伪指令:PROC,ENDP 宏处理伪指令:MACRO,REPT,IRPC 条件汇编伪指令:IF,ENDIF,IFDIF,IFDEF 基本元素 汇编语言

19、字符集 大写字母:AZ 小写字母:az 数字:09 符号:+,-,*,/,(,),;,,,.,:,_,“,$,&,#,?,!注:汇编语言源程序中,大小写字母作用相同,常量与数值表达式 常量 在汇编时已经确定的值。在指令中作为直接操作数,或者给变量赋初值 类型 数值常量:以数值的形式直接写在语句中 符号常量:预先为它定义一个名字,然后在语句中用名字来表示该常量(提高程序的可读性)用 EQU 或 = 来定义例:PORT EQU 83HALPHT = 35*21,各种形式常量的格式,返 回,标号 标号是为一组机器指令所起的名字,用于程序转移指令、调用指令和循环指令的操作数(转向地址),一般在CS段内

20、定义和使用。 标号的属性:段地址、段内偏移地址和类型标号所处的代码段的段基址,称为该标号的段地址标号所处的位指向对于段首地址的相对地址,称为该标号的段内偏移地址 形式一:标号 形式二:OFFSET 标号,LC1: MOV AL, 20H JMP LC1,MOV BX, OFFSET LB1,MOV BX, OFFSET LB1 与 MOV BX, LB1 有什么不同?,标号有FAR(远标号)和NEAR(近标号)种类型 近标号:该标号的定义在本段在机器指令助记符之前,加一标号名字,后面紧跟一个冒号 “ :”LC1: MOV AL, 20HJMP LC1 远标号:该标号的定义不在本段过程定义时,为

21、过程起的名字也是标号,可作为转子指令的操作数,这类标号的类型在定义子过程时确定PROP PROC FARPROP ENDP,注:标号在使用时(1)循环指令、条件转移指令只能引用NEAR型,并且定义标号语句和使用标号语句的相对距离只能在 128 +127 字节范围内(2)无条件转移指令、调用(转子)指令可引用 NEAR 和 FAR 两种类型的标号(3)如果同一段内,无条件转移指令语句到定 义该标号语句的距离在 128 +127 字节范围内,则可在使用的标号前指定为短标号:记为 SHORT 标号,变量 变量的定义及格式 变量是内存中一个数据区的名字,可以作为指令的存储器操作数来引用 变量定义的格式

22、:变量名 变量类型定义符 表达式 ,,变量名:由用户定义(符合标识符定义的规范),变量类型: DB: 1个字节 DW: 2个字节,即1个字 DD: 4个字节,即2个字 DQ: 8个字节,即4个字 DT: 10个字节,即5个字,表达式 算术运算符:+,-,*,/, 逻辑运算符:NOT, AND, OR, XOR 关系运算符: EQ - 相等 NE - 不相等 LT - 小于 GT - 大于 LE - 小于或等于 GE - 大于或等于,分析操作符 TYPE格式: TYPE 变量或标号说明:变量:则汇编程序将回送该变量类型包含的字节数标号:则汇编程序将回送代表该标号类型的数值。 NEAR(-1)、F

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

24、W 1, 2, 3MOV CX, SIZE ARRAY,则汇编结果为: MOV CX, 2,OFFSET格式:OFFSET 变量或标号说明:回送该变量或标号的偏移地址值,例: MOV BX, OFFSET OPR则汇编程序将OPR的偏移地址回送给指令,在执行时,将该偏移地址装入BX寄存器中,SEG格式:SEG 变量或标号说明:回送该变量或标号的段地址,例: MOV BX, SEG OPR,则汇编程序将OPR所在的段基址送入BX寄存器,属性操作符I. PTR格式:类型 PTR 表达式类型:BYTE, WORD, DWORD, FAR, NEAR表达式:是存储器操作数说明:用来给已分配的存储地址赋

25、予另一种属性,使该地址具有另一种类型,例: MOV BX, 5, 非法指令,MOV BYTE PTR BX, 5MOV WORD PTR BX, 5,II. 段超越前缀说明:用来表示一个标号、变量或地址表达式的段属性例:用段前缀来指定某段的地址操作数MOV AX, ES:BX+SIIII.SHORT说明:表明JMP指令中转移地址的属性 128+127,指示性语句(说明性语句) 存储分配语句 数值表达式 如 3*20 ? 保留存储空间但不存入数据 例: ABC DB 0, ?, ?, 0DEF DW ?, 52存储空间分配如图所示 ASCII字符串 例: MESSAGE DB HELLO存储空间

26、分配如图所示,00,-,-,00,-,-,34,00,ABC,DEF,48,45,4C,4C,4F,MESSAGE,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),返 回,段定义 段定义语句 段名 SEGMENT 边界类型连接类型类别 段名 ENDS 边界类型:用来指明段的起始边界 连接类型:段的连接方式 类别:表示段的类别,连接程序只使同类

27、别的段发生关联 段值设定伪指令语句ASSUME 格式ASSUME 段寄存器:段名,段寄存器:段名,,SEGA SEGMENT SEGA ENDS SEGB SEGMENT SEGB ENDS CODE SEGMENTASSUME DS:SEGA, ES:SEGB, CS:CODE, SS:NOTHINGMOV AX, SEGAMOV DS, AXMOV AX, SEGBMOV ES, AX CODE ENDS,ORG 置汇编单元计数器语句 功能:用来指出其后的程序段或数据块存放的起始地址的偏移量 格式: ORG 表达式汇编程序用语句中表达式之值作为起始地址连续存放程序 例: VECTORS S

28、EGMENTORG 10VECT1 DW 47A5HORG 20VECT2 DW 0C596HVECTORS ENDS,VECT1偏移地址为0AH,VECT2偏移地址为14H,地址计数器$ 汇编程序对源程序进行汇编时,使用$保存当前正在汇编的指令的偏移地址。 开始汇编或在每一段开始时,地址计数器初始化为0,以后在汇编过程中,每处理一条指令,地址计数器增加一个值,此值为该指令所需要的字节数 例 JNE $+6当上一条指令执行的结果不为零时,转向地址是JNE指令的首地址加上6注:$+6必须为另一条指令的首地址,否则,汇编程序将指示出错信息,例:计算字符串的长度STRING DB “THIS IS

29、A BOOK”,能否用分析操作符SIZE来计算?,COUNT EQU $ - STRING,例:计算数的个数ARRAY DW 1, 2, 3, 4, 5, 6,COUNT EQU ($ - ARRAY)/2,过程定义 过程也称为 “子程序” CALL指令调用过程,RET指令结束过程 过程具有“NEAR”属性和“FAR”属性,如果不指定属性,汇编程序认为它是“NEAR”属性 具有NEAR属性的过程,只能由属于该过程的段中的其它程序调用 具有FAR属性的过程,可以由任意段调用 格式 过程名 PROC NEAR 或 FARRET 过程名 ENDP,SEGX SEGMENT SUBT PROC FAR

30、RET SUBT ENDPCALL FAR PTR SUBT SEGX ENDS SEGY SENGMENTCALL FAR PTR SUBT SEGY ENDS,DOS下程序正常结束的方式 MOV AH, 4CHINT 21H 主程序名 PROC FARPUSH DSMOV AX, 0PUSH AXRET主程序名 ENDP,顺序结构程序设计,数据传送指令 一般传送指令 格式:MOV 目的,源 功能:将源内容送至目的地址内 说明:该指令有7种格式 MOV MEM / REG1 , MEM / REG2MOV AX, BXMOV AX, 2000HMOV 2000H, DS MOV REG, D

31、ATA MOV AL, 5,不可两个内存位置直接传送数据,MOV AC , MEM MOV MEM, AC MOV SEGREG, MEM / REG MOV DS, AX MOV MEM/REG, SEGREG MOV AX, DS MOV MEM/REG, DATA MOV AX, 3168H,段寄存器之间不能 传送数据,MOV指令不能改变CS当前的内容,交换指令 格式:XCHG OPR1, OPR2 功能:将源操作数OPR2内容和目的操作数OPR1内容互换(OPR1)(OPR2) 说明 段寄存器不能作为操作数 无法将两个内存内容互换 例:XCHG BX, BP+SI(BX)= 6F30H

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

33、存器AX的内容压入堆栈PUSH DS 将寄存器DS的内容压入堆栈PUSH WORD PTR BX将内存单元中的字压入堆栈POP CX 将堆栈栈顶16位的字送入寄存器CX中PUSHFMOV BP, SPAND BP, 0FEFFHPOPF修改标志寄存器中TF的值,地址传送指令 取偏移地址指令 格式: LEA REG, SRC 执行的操作 (REG) SRC 功能:将内存变量的偏移地址送入16位的通用寄存器中 例 LEA BX, BX+SI+0F62H(BX)= 0400H (SI)= 003CH执行后BX = 0400H + 003CH+ 0F62H = 139EH 说明:LEA指令与分析操作符

34、OFFSET功能类似,LEA的功能更强,指令中的操作数可带下标,取32位地址指令 LDS, LES 格式: LDS REG, SRCLES REG, SRC 执行的操作 (REG)(SRC)(SREG)(SRC+2) 功能:内存的一个双字存储地址,内容的高十六位为段地址,低十六位是偏移量地址。将偏移量地址送入指定的寄存器中,段地址送入DS或ES中 例 ADDR DD 11223344HLDS SI, ADDR执行后, (DS)= 1122H (SI)= 3344H,数据段,存放段地址和偏移地址,存放偏移地址,算术运算指令 二进制加法运算指令ADD, ADC, INC ADD指令 格式: ADD

35、 DST, SRC 执行的操作 (DST)(SRC)+(DST) 影响标志位:CF, OF, ZF, SF(只考虑主要的标志位) 例 ADD DX, 0F0F0H指令执行前 (DX)= 4652H1111 0000 1111 0000+ 0100 0110 0101 00101 0011 0111 0100 0010指令执行后: (DX)= 3742HZF = 0, SF = 0, CF = 1, OF = 0,带进位的加法指令ADC 格式: ADC DST, SRC 执行的操作:(DST)(SRC)+(DST)+CF 例:设目的操作数存放在DX和AX,其中DX存放高位字。源操作数存放在BX,

36、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, ZF = 0, CF = 0, OF = 0,0002H,0F365H,DX,AX,0005H,0E024H,BX,CX,INC指令 格式: INC OPR 执行的操作: (OPR)(OPR)+ 1,例:X = 124, Y = 5,

37、将X+Y的结果存于RESULT单元中。,DATA SEGMENTX DB 124Y DB 5RESULT DB ? DATA ENDS,CODE SEGMENTASSUME CS:CODE, DS:DATA START: MOV AX, DATAMOV DS, AXMOV AL, XADD AL, YMOV RESULT, ALMOV AH, 4CHINT 21H CODE ENDSEND START,二进制减法指令SUB, SBB, DEC, NEG, CMP SUB 减法指令 格式: SUB DST, SRC 执行的操作: (DST)(DST)-(SRC) SBB 带借位减法指令 格式:

38、SBB DST, SRC 执行的操作: (DST)(DST)-(SRC)- CF DEC 减1指令 格式: DEC OPR 执行的操作: (OPR)(OPR)-1,NEG 求补指令 格式: NEG OPR 执行的操作: (OPR) -(OPR) 说明:把操作数按位求反后末位加1,因而执行的操作也可以表示为: (OPR) 0FFFFH -(OPR)+1 CMP 比较指令 格式: CMP OPR1, OPR2 执行的操作: (OPR1)-(OPR2) 说明:该指令执行的操作与SUB指令执行的操作一样,但不保存结果。根据该指令执行的结果设置标志位,例:设X, Y, Z均位双精度数,他们分别存放在地址

39、为X, X+2, Y, Y+2, Z, Z+2的存储单元中 中,存放时高位字在高地址中,低位字在低地址中,在8086中如何实现WX+Y+24-Z,DATA SEGMENTX DD 11223344HY DD 55667788HZ DD 22336699HW DD ? DATA ENDS,START: MOV AX, DATAMOV DS, AX,MOV AX, XMOV DX, X+2,ADD AX, YADC DX, Y+2,ADD AX, 24ADC DX, 0,SUB AX, ZSBB DX, Z+2,MOV W, AXMOV W+2, DX,MOV AX, 4C00HINT 21H,二

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

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

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

43、IDIV BL 的结果为(AH)= 24H = 36D 余数(AL)= 0F3H = -13D 商,符号位扩充:CBW, CWD CBW 字节转换为字 格式: CBW 执行的操作:AL的内容符号为扩展到AH,形成AX中的字。即如果(AL)的最高有效位为0,则(AH)=0;如果(AL)的最高有效位为1,则(AH)=0FFH CWD 字转换为双字 格式: CWD 执行的操作:AX的内容符号扩展到DX,形成DX:AX中的双字。即如果(AX)的最高有效位为0,则(DX)=0;如果(AX)的最高有效位为1,则(DX)=0FFFFH,例:算术综合运算举例,计算(V -(X * Y + W - 540)/

44、X 其中,X, Y, W, V均为16位带符号数,已分别装入X, Y, W, V单元 中,要求上式计算的结果的商存入AX寄存器,余数存入DX寄存器,IDIV X,8086/8088位处理运算指令 逻辑运算指令 NOT 指令 格式: NOT OPR 执行的操作:(OPR)(OPR) AND 指令 格式: AND DST, SRC 执行的操作:(DST)(DST)(SRC) OR 指令 格式: OR DST, SRC 执行的操作:(DST)(DST)(SRC),XOR 指令 格式: XOR DST, SRC 执行的操作:(DST)(DST)(SRC) TEST 指令 格式: TEST DST, S

45、RC 执行的操作:(DST)(SRC) 注:该指令执行完毕,设置相应的标志位,不保存结果,例1 要求将AL的第5位置1MOV AL, 43HOR AL, 20H0100 00110010 0000 OR0110 0011 例2 要测试AL寄存器中第2位是否为1,若为1则转移到EXIT去执行TEST AL, 00000100BJNE EXIT,移位指令 算术移位指令 格式: SAL DST, 计数值SAR DST, 计数值 算术移位指令适用于带符号数的运算,用SAL来乘以2,用SAR来除以2 计数值可以为1,多于1时,为CL中的内容 CF的内容被改变,SF, PF, ZF也根据目的操作数的新值而

46、改变。当符号位改变时,OF置1,例 MOV CL, 5SAR DI, CL如果指令执行前:(DS)= 0F800H (DI)= 180AH (0F980A)=0064H则实际的物理地址为= 0F800H * 16d + 180AH = 0F980A指令执行后,(0F980A)= 0003HCF = 0, PF = 1, ZF = 0, SF = 0, OF = 0,逻辑移位指令 格式:SHL DST, 计数值SHR DST, 计数值 逻辑移位指令用于实现无符号数的运算。SHL用来乘以2,SHR用来除以2,例:MOV CL, 2SHL SI, CL执行前:(SI)= 1450H 5200D执行后

47、:(SI)= 5140H 20800D,循环移位指令 格式:ROL DST, 计数值ROR DST, 计数值RCL DST, 计数值RCR DST, 计数值,例:(AX)=0012H,(BX)= 0034H,要求把他们装配在一起,形成(AX)= 1234HMOV CL, 8ROL AX, CLADD AX, BX,分支结构程序设计,CMP 比较指令 格式: CMP OPR1, OPR2 执行的操作: (OPR1)-(OPR2) 说明:该指令执行的操作与SUB指令执行的操作一样,但不保存结果。根据该指令执行的结果设置标志位,转移指令 无条件转移指令 格式: JMP 目的地址(标号) 功能:无条件

48、跳转到目的地址处执行指令 转移的情形 段内短转移0000H B4H 01H NEXT: MOV AH, 010018H EBH E6H JMP NEXT001AH B4H 4CH EXIT: MOV AH, 4CH,段内近转移0018H E9H 0FH 01H JMP NEXT001BH 8AH D0H MOV DL, AL012AH B4H 4CH NEXT: MOV AH, 4CH,段间转移C1 SEGMENT 0018H FFH 0010H 34C0H JMP NEXTPROG C1 ENDSC2 SEGMENT .0010H B4H 4CH NEXTPROG: MOV AH, 4CH C2 ENDS,

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

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报