第3章 指令系统_第1页
第3章 指令系统_第2页
第3章 指令系统_第3页
第3章 指令系统_第4页
第3章 指令系统_第5页
已阅读5页,还剩273页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,第3章 指令系统,2,主要内容:,指令系统的一般概念 对操作数的寻址方式 六大类指令的操作原理:,操作码的含义 指令对操作数的要求 指令执行的结果,3,3.1 概述,4,了解:,指令及指令系统; 指令的格式; 指令中的操作数类型; 指令字长与机器字长; 指令的执行时间 CISC和RISC指令系统,5,一、指令与指令系统,指令: 控制计算机完成某种操作的命令 指令系统: 处理器所能识别的所有指令的集合 指令的兼容性: 同一系列机的指令都是兼容的。,6,二、指令格式,指令中应包含的信息:,运算数据的来源 运算结果的去向 执行的操作,7,指令格式,操作码 操作数,操作数,执行何种操作,目标操作数

2、,源操作数,参加操作的数据或数据存放的地址,8,指令格式:,零操作数指令: 操作码 单操作数指令: 操作码 操作数 双操作数指令: 操作码 操作数,操作数 多操作数指令: 三操作数及以上,9,三、指令中的操作数,立即数 寄存器 存储器,表征参加操作的数据本身,表征数据存放的地址,10,立即数操作数,立即数本身是参加操作的数据,可以是8位或16位,只能作为源操作数。 例: MOV AX,1234H MOV BL,22H 立即数无法作为目标操作数 立即数可以是无符号或带符号数,其数值应在可取值范围内。,11,寄存器操作数:,参加运算的数存放在指令给出的寄存器中,可以是16位或8位。 例: MOV

3、AX,BX MOV DL,CH,12,存储器操作数,参加运算的数存放在存储器的某一个或某两个单元中。 表现形式: ,立即数或寄存器, 中的内容是存放所寻找数据的单元的偏移地址,13,存储器操作数例,例: MOV AX,1200H MOV AL,1200H,22H,11H,1200H,偏移地址,AH AL,14,四、指令字长,指令字长: 由操作码的长度、操作数地址长度、操作数个数决定。,15,五、指令的执行速度,指令的字长影响指令的执行速度 对不同的操作数,指令执行的时间不同: 存储器,快!,立即数,寄存器,16,六、CISC和RISC指令系统,CISC(complex instruction

4、set computer) 指令的功能强,种类多,常用指令用硬件实现; 指令系统复杂,难使用。 RISC指令系统 指令功能较弱,种类少,格式简单; 多数指令在一个计算机周期内完成; 对存储器的结构和存取速度要求较高。,17,3.2 寻址方式,18,寻址方式,寻找操作数所在地址的方法 寻找转移地址的方法,本节,19,寻址方式,操作数可能的来源或存放处: 由指令直接给出 寄存器 内存单元 寻找操作数所在地址的方法可以有三种大类型 指令直接给出的方式 存放于寄存器中的寻址方式 存放于存储器中的寻址方式,20,一、立即寻址,指令中的源操作数是立即数,即源操作数是参加操作的数据本身 例:MOV AX,1

5、200H,12H,00H,AH AL,MOV,代码段,立即寻址仅适合于源操作数,21,二、寄存器寻址,参加操作的操作数在CPU的通用寄存器中。 例:MOV AX,BX,AX,BX,22,三、直接寻址,指令中直接给出操作数的偏移地址 默认在数据段 例:MOV AX,1200H,22H,11H,1200H,偏移地址,数据段,AH AL,23,直接寻址,直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段。 例:MOV AX,ES:1200H,24,四、寄存器间接寻址,参与操作的操作数存放在内存中,其偏移地址为指令中的寄存器的内容。,25,寄存器间接寻址例,例:MOV AX,BX

6、 设BX=1200H,22H,11H,1200H,偏移地址,AH AL,11 22,数据段,代码段,MOV,26,寄存器间接寻址,由寄存器间接给出操作数的偏移地址; 存放偏移地址的寄存器称为间址寄存器,它们是:BX,BP,SI,DI 操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器: BX,SI,DI BP,默认在数据段,默认在堆栈段,27,寄存器间接寻址,寄存器 间接寻址,基址寻址(间址寄存器为基址寄存 器BX,BP) 变址寻址(间址寄存器为变址寄存 器SI,DI),28,五、寄存器相对寻址,操作数的偏移地址为寄存器的内容加上一个位移量 例: MOV AX,BX+DATA 设:DS

7、=2000H,BX=0220H,DATA=05H 则:AX=20225H,29,六、基址、变址寻址,操作数的偏移地址为 一个基址寄存器的内容 + 一个变址寄存器的内容; 操作数的段地址由选择的基址寄存器决定 基址寄存器为BX,默认在数据段 基址寄存器为BP,默认在堆栈段 基址变址寻址方式与相对寻址方式一样,主要用于一维数组操作。,30,例:,执行下列指令: MOV SI,1100H MOV BX,SI MOV AX,SI+BX,22H,11H,2200H,偏移地址,AH AL,11 22,数据段,31,七、基址、变址、相对寻址,操作数的偏移地址为: 基址寄存器内容+变址寄存器内容+位移量 操作

8、数的段地址由选择的基址寄存器决定。 基址变址相对寻址方式主要用于二维表格操作。,32,例:,执行以下程序段: MOV DI,1100H MOV BP,DI MOV AL,BPDI5,22H,11H,2205H,偏移地址,AL,22,堆栈段,33,八、隐含寻址,指令中隐含了一个或两个操作数的地址,即操作数在默认的地址中。 例: MUL BL 指令执行: ALBL,AX,例题1,假设已知(DS)=2900H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)= 0100H,(BP)=0010H,数据段中变量名VAL的偏移地址值为0050H,试指出下列源操作数字段的寻址方式是

9、什么?其物理地址值是多少? (1) MOV AX,0ABH (2) MOV AX,BX (3) MOV AX,100H (4) MOV AX,VAL (5) MOV AX,BX (6) MOV AX,ES:BX (7) MOV AX,BP (8) MOV AX,SI (9) MOV AX,BX+10 (10) MOV AX,VALBX (11) MOV AX,BXSI (12) MOV AX,10BPSI,例题2,现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(2120

10、0H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器的内容。 (1)MOV AX,1200H (2)MOV AX,BX (3)MOV AX,1200H (4)MOV AX,BX (5)MOV AX,BX+1100 (6)MOV AX,BX+SI (7)MOV AX,BX+SI+1100,36,3.3 8086指令系统,37,掌握:,指令码的含义 指令对操作数的要求 指令的对标志位的影响 指令的功能,38,8086指令系统,从功能上包括六大类:,数据传送 算术运算 逻辑运算和移位 串操作 程序控制 处理器控制,39,数

11、据传送指令,通用数据传送 输入输出 地址传送 标志位操作,40,一、通用数据传送,一般数据传送指令 堆栈操作指令 交换指令 查表转换指令 字位扩展指令,特点: 该类指令的执行对标志位不产生影响,41,1. 一般数据传送指令,一般数据传送指令 MOV 格式: MOV dest,src 操作: src 例: MOV AL,BL,dest,通用传送指令 MOV 数据传送原则,reg reg reg seg reg mem seg mem reg im mem im,通用寄存器之间可直接传数,通用寄存器与段寄存器之间 可直接传数,通用寄存器与存储器之间可 直接传数,段寄存器与存储器之间可直接传数,立即

12、数可传送到通用寄存器,立即数可传送到存储器(注意特殊性),通用传送指令 MOV 数据传送原则,reg,seg,mem,im,通用寄存器的桥梁作用,seg reg seg MOV AX,ES MOV DS,AX,im reg seg MOV AX,2000H MOV DS,AX,MOV DS,ES seg seg,MOV DS,2000H im seg,通用寄存器的桥梁作用,m reg m MOV AX, 20H MOV BX ,AX,im reg m * MOV AL,20H MOV 2000H ,AL,MOV BX , 20H m m,MOV 2000H ,20H im m*,注:MOV B

13、X ,20H 是正确的指令,通用传送指令 MOV 数据传送中问题,数据类型的匹配 MOV AX,DL MOV AL,2000H 存储器数据传送 MOV 2000H , 20H ,改错 MOV AL,DL,改错 MOV AX,2000H,改错 MOV BX, 20H MOV 2000H ,BX,47,一般数据传送指令,注意点: 两操作数字长必须相同; 两操作数不允许同时为存储器操作数; 两操作数不允许同时为段寄存器; 在源操作数是立即数时,目标操作数不能是段寄存器; IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现。,48,一般数据传送指令例,判断下列指令的正确性: MOV

14、AL,BX MOV AX,SI05H MOV BXBP,BX MOV DS,1000H MOV DX,09H MOV 1200,SI,49,一般数据传送指令应用例,将(*)的ASCII码2AH送入内存数据段1000H开始的100个单元中。 题目分析: 确定首地址 确定数据长度 写一次数据 修改单元地址 修改长度值 判断写完否? 未完继续写入,否则结束,1063H,100B,1000H,2AH,数据段,2AH,2AH,2AH,50,一般数据传送指令应用例,程序段: MOV DI,1000H MOV CX,64H MOV AL,2AH AGAIN:MOV DI,AL INC DI ;DI+1 DE

15、C CX ;CX-1 JNZ AGAIN ;CX0则继续 HLT,51,上段程序在代码段中的存放形式,設CS=109EH,IP=0100H,则各条指令在代码段中的存放地址如下: CS : IP 机器指令 汇编指令 109E:0100 B80010 MOV DI,1000H 109E:0103 . MOV CX,64H 109E:0105 . MOV AL,2AH 109E:0107 . MOV DI,AL 109E:0109 INC DI 109E:010A DEC CX 109E:010B JNZ 0107H 109E:010D HLT,52,数据段中的分布,送上2AH后数据段中相应存储单元

16、的内容改变如下: DS:1000 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1010 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1020 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1030 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1040 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1050 2A

17、2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1060 2A 2A 2A 2A 00 00 00 00 00 00 00 00 00 00 00 00,偏移地址DI,53,2. 堆栈操作指令,掌握: 有关堆栈的概念 栈顶、栈首、栈底 堆栈指令的操作原理 执行过程,执行结果,54,堆栈操作的原则,先进后出 以字为单位,55,堆栈操作指令,压栈指令 PUSH 格式: PUSH OPRD 出栈指令 POP 格式: POP OPRD,16位寄存器或 存储器两单元,16位寄存器或 存储器两单元,56,压栈指令 PUSH,指令执行过程: SP - 2 SP

18、 操作数高字节 SP+1 操作数低字节 SP,SP,堆栈段,SP,高8位,低8位,57,压栈指令的操作,设AX=1234H,SP=1200H 执行 PUSH AX 指令后堆栈区的状态:,1200H,堆栈段,SP-2=11FEH,12H,34H,1200H,堆栈段,12H 34H,AX,入栈后,入栈前,58,出栈指令POP,指令执行过程: SP SP+1 SP SP+2,操作数低字节,操作数高字节,SP,堆栈段,SP,高8位,低8位,59,出栈指令的操作,执行 POP AX,12H,34H,11FEH,堆栈段,代码段,PUSH,12 34,AX,SP+2,1200H,出栈后,出栈前,60,堆栈操

19、作指令说明,指令的操作数必须是16位的; 操作数可以是寄存器或存储器两单元,但不能是立即数; 不能从栈顶弹出一个字给CS; PUSH和POP指令在程序中一般成对出现; PUSH指令的操作方向是从高地址向低地址,而POP指令的操作正好相反。,61,堆栈操作指令例,MOV AX,1234H MOV SP,AX MOV BX,5678H MOV BX,AH MOV BX+1,BL PUSH AX PUSH BX PUSH WORD PTRBX POP WORD PTRBX POP AX POP BX,如此,会使AX和BX的内容互换,62,3. 交换指令,格式: XCHG REG,MEM/REG 注:

20、 两操作数必须有一个是寄存器操作数 不允许使用段寄存器。 例: XCHG AX,BX XCHG 2000,CL,XCHG 指令的应用范围,通用寄存器与通用寄存器间交换数据 通用寄存器与存储器间交换数据,XCHG AX,BX XCHG DL,CH,XCHG AX, BX XCHG SI ,AL,XCHG 指令的 禁用情况,不能使用段寄存器 不能使用双存储器 不能使用立即数,XCHG DS,ES XCHG AX,DS XCHG DS, BX ,XCHG BX , SI ,XCHG AX,2000H XCHG 20H,BL,例用 MOV、PUSH,POP、XCHG 指令 完成两寄存器AX、BX 中数

21、据的交换 (讨论所用机器码数量),用MOV指令 用PUSH指令 POP 用XCHG指令,MOV CX,AX MOV AX,BX MOV BX,CX 6 字节机器码,PUSH AX PUSH BX POP AX POP BX 4 字节机器码,XCHG AX,BX 1 字节机器码,4.数据查表指令 XLAT,指令格式 指令功能,XLAT ;(AL) (BX)+(AL),执行 XLAT 指令前 (BX) 表的首地址,(AL) 表的偏移地址 执行XLAT 指令 执行XLAT 指令后 (BX)+(AL)地址单元中的字节数据送(AL),67,查表指令例,数据段中存放有一 张ASCII码转换表, 设首地址为

22、2000H, 现欲查出表中第11 个代码的ASCII码,30,31,32,.,39,41,42,.,45,46,2000H+0,2000H+11,0,1,2,9,A,B,E,F,68,查表指令例,可用如下指令实现: MOV BX,2000H ;BX表首地址 MOV AL,0BH ;AL序号 XLAT ;查表转换 执行后:AL = 42H 还可用其他方法实现,如: MOV BX,2000H MOV AL,BX+0BH,69,5. 字位扩展指令,将符号数的符号位扩展到高位; 指令为零操作数指令,采用隐含寻址,隐含的操作数为AX及AX,DX 无符号数的扩展规则为在高位补0,70,字节到字的扩展指令,

23、格式: CBW 操作: 将AL内容扩展到AX 规则: 若最高位=1,则执行后AH=FFH 若最高位=0,则执行后AH=00H,71,字到双字的扩展指令,格式: CWD 操作: 将AX内容扩展到DX AX 规则: 若最高位=1,则执行后DX=FFFFH 若最高位=0,则执行后DX=0000H,72,字位扩展指令例,判断以下指令执行结果: MOV AL,44H CBW MOV AX,0AFDEH CWD MOV AL,86H CBW,73,二、输入输出指令,掌握: 指令的格式及操作 指令的两种寻址方式 指令对操作数的要求,I/O端口输入/输出指令 IN、OUT,指令格式 指令功能,IN AL,po

24、rt ;(AL) port IN AX,port ;(AX) port OUT port ,AL ; port (AL) OUT port ,AX ; port (AX),专用寄存器 AL、AX 与 I/O 端口传送数据 port 为输入端口地址或输出端口地址,口地址,IN、OUT 指令的长格式,定义:端口地址值(port)为一字节表示 (值为 0 - 255 或 00H FFH),输入指令格式 IN AL,port 端口port 中的字节数据输入到AL 中 IN AX,port 端口port, port+1中的字数据输入到AX 中 输出指令格式 OUT port,AL AL中的字节数据输出到

25、端口 port 中 OUT port,AX AX中的字数据输出到端口地址 port, port+1中去,IN、OUT 指令的短格式,定义:端口地址值为二字节表示,即值大于 255 或 FFH 时,端口地址应用间址寄存器 DX 表示。,输入指令格式 MOV DX,port IN AL,DX 端口port 中的字节数据输入到AL 中 IN AX,DX 端口port, port+1中的字数据输入到AX 中 输出指令格式 MOV DX,port OUT DX,AL AL中的字节数据输出到端口 port中 OUT DX,AX AX中的字数据输出到端口地址 port, port+1中去,IN、OUT 指令

26、使用中的常见错误,寄存器使用错误 IN BL,20H 短格式地址寄存器使用错误 MOV CX,2000H OUT CX,AL 端口地址写法错误 IN AL, 20H IN AL, DX 源、目的操作数位置错误 IN 20H,AL IN 指令 AL、AX为目的 OUT AL,20H OUT 指令 AL、AX为源,仅能用寄存器 AL、AX,仅能用地址寄存器 DX,端口地址无需用 号,78,三、地址传送指令,取偏移地址指令LEA *LDS指令 *LES指令,有效地址传送指令 LEA,指令格式 指令功能 指令应用,LEA reg,src ; ( reg ) src 的 EA,将 src 的有效地址(1

27、6 位段内偏移地址) 传送给通用寄存器 reg,MOV BX,2130H 立即数 2130H 赋给通用寄存器 BX LEA BX, 2130H 地址值 2130H 赋给通用寄存器 BX,数据传送类指令,符号地址的获得 例:将符号地址 BUFF 的地址值赋给通用寄存器 BX,LEA BX,BUFF 指令 LEA 传送 BUFF 的地址值给 BX MOV BX,OFFSET BUFF 运算符 OFFSET 返回 BUFF 的地址值后赋给 BX MOV BX,BUFF 注: 将 BUFF 地址单元中的字数据传送给 BX,81,LEA指令,比较下列指令: MOV SI,DATA1 LEA SI,DAT

28、A1 MOV BX,BX LEA BX,BX,DATA1,符号地址,12H,34H,1100H,88H,77H,BX=1100H,执行结果:SI=1234H,执行结果:SI=DATA1,执行结果:BX=7788H,执行结果:BX=1100H,例 查表求数字 0 9 的格雷码,格雷码表,TABLE,DS段,0 9 的格雷码从符号地 址 TABLE 开始顺序存入。,编程序段,LEA BX,TABLE ;表首地址赋 BX MOV AL,7 ;表偏为 7 XLAT ;查表,注: AL 中有 7 的格雷码 11H,目标地址传送指令 LDS、LES,指令格式 指令功能,LDS reg,src ;( reg

29、 ) src 的(EA) (DS) src 的(EA + 2) LES reg,src ;( reg ) src 的(EA) (ES) src 的(EA + 2),LDS,32位目标地址送 段寄存器DS和通用寄存器 reg LES,32位目标地址送 段寄存器ES和通用寄存器 reg,指令 LEA 与 LDS,LES 的区别,LEA reg,src scr 表示存储器单元地址本身 LDS reg,src LES reg,src src 表示存储器单元地址中的地址值,地址传送指令的比较,已知:DS09A0H,BX0048H,LEA DI,BX,LDS DI,BX,LES DI,BX, 执行后:DI

30、0048H, 执行后:DI003EH DS0816H, 执行后:DI003EH ES0816H,86,四、标志位操作指令,LAHF SAHF PUSHF POPF,隐含操作数AH,隐含操作数FLAGS,87,1. LAHF,SAHF,LAHF 操作: 将FLAGS的低8位装入AH,CF,PF,AF,ZF,CF,.,AH,FLAGS,D15,D0,D7,D0,SAHF,执行与LAHF相反的操作,88,2. PUSHF,POPF,针对FLAGS的堆栈操作指令 将标志寄存器压栈或从堆栈弹出,数据传送类指令总结,源、目的操作数类型必须一致 源、目的操作数不能同时是存储器操作数 源、目的操作数不能同时是

31、段寄存器 立即数、CS、IP不能作目的操作数 数传指令仅改变目的操作数,源操作数保持不变除 (XCHG指令除外) 数传指令的执行不影响状态标志位 (SAHF、POPF指令除外) XLAT指令专用寄存器为 AL、AX,90,算术运算类指令,91,算术运算类指令,加法运算指令 减法运算指令 乘法指令 除法指令,算术运算指令的执行大多对状态标志位会产生影响,92,一、加法指令,普通加法指令ADD 带进位位的加法指令ADC 加1指令INC,加法指令对操作数的要求与MOV指令相同,93,1. ADD指令,格式: ADD OPRD1,OPRD2 操作: OPRD1+OPRD2,ADD指令的执行对全部6个状

32、态标志位都产生影响,OPRD1,94,ADD指令例,MOV AL,78H ADD AL,99H 指令执行后6个状态标志位的状态,95,ADD指令例,01111000 + 10011001 00010001,1,标志位状态: CF= SF= AF= ZF= PF= OF=,1,0,1,0,1,0,96,2. ADC指令,指令格式、对操作数的要求、对标志位的影响与ADD指令完全一样 指令的操作: OPRD1+OPRD2+CF OPRD1 ADC指令多用于多字节数相加,例两双倍精度字 1234FEDCH 和11228765H 相加,DS段,1000H,2000H,编程,存储图,LEA SI, 100

33、0H LEA DI, 2000H MOV AX, SI ADD AX, DI MOV SI ,AX MOV AX, SI + 2 ADC AX, DI + 2 MOV SI + 2 ,AX,结果,23H,57H,86H,41H,98,ADC指令应用例求两个20B数的和,LEA SI,M1 LEA DI,M2 MOV CX,20 CLC ;使CF=0 NEXT : MOV AL,SI ADC DI,AL INC SI INC DI DEC CX JNZ NEXT HLT,INC 加 1 指令,指令格式 指令功能 影响的标志 (不影响的标志) 允许的操作数,INC oprd ;oprd oprd

34、+ 1,多用于循环程序中的地址指针加 1,OF、SF、ZF、PF、AF,(CF),reg、mem,100,二、减法指令,普通减法指令SUB 考虑借位的减法指令SBB 减1指令DEC 比较指令CMP 求补指令NEG,减法指令对操作数的要求与对应的加法指令相同,101,1. SUB指令,格式: SUB OPRD1,OPRD2 操作: OPRD1- OPRD2 OPRD1 对标志位的影响与ADD指令同,102,2. SBB指令,指令格式、对操作数的要求、对标志位的影响与SUB指令完全一样 指令的操作: OPRD1- OPRD2- CF OPRD1,103,3. DEC指令,格式: DEC OPRD

35、操作: OPRD - 1 OPRD,指令对操作数的要求与INC相同 指令常用于在程序中修改计数值,104,应用程序例,MOV BL,2 NEXT1 :MOV CX,0FFFFH NEXT2: DEC CX JNZ NEXT2 ; ZF=0转NEXT2 DEC BL JNZ NEXT1 ; ZF=0转NEXT1 HLT ; 暂停执行,105,4. NEG指令,格式: NEG OPRD 操作: 0 - OPRD OPRD,8/16位寄存器或存储器操作数,用0减去操作数,相当于求相反数,NEG 求补指令,对标志位的影响 AF, CF,OF,PF,SF,ZF CF = 1, 操作数不为0 CF = 0

36、, 操作数为0,107,5. CMP指令,格式: CMP OPRD1,OPRD2 操作: OPRD1- OPRD2 指令执行的结果不影响目标操作数,仅影响标志位!,108,CMP指令,用途: 用于比较两个数的大小,可作为条件转移指令转移的条件 指令对操作数的要求及对标志位的影响与SUB指令相同,109,CMP指令,两个无符号数的比较: CMP AX,BX 若 AX BX 若 AX BX OF和SF状态不同 AX 9 或标志 AF = 1( 15) 则调整 (AL)=(AL)+ 06H AF = 1 CF = 1 结果 (AL)=(AL) ZF=1,即(BX)=0,转移 shl bx,1 jnc

37、 again ;CF=0.转移 inc al ;CF=1,加1 jmp again next: . ;AL保存1的个数,统计BX中“1”的个数(方法二),xor al,al ;AL0,CF0 again: cmp bx,0 jz next shl bx,1 ;也可使用 shr bx,1 adc al,0 jmp again next: . ;AL保存1的个数,例:JZ/JNZ指令,repz cmpsb ;重复比较两个字符串 jnz unmat ;ZF0(不等),转移 mov al,0 ;顺序执行(相等) jmp output unmat: mov al,0ffh output: mov res

38、ult,al repz cmpsb ;重复比较两个字符串 jz mat ;ZF1(相等),转移 mov al,0ffh ;顺序执行(不等) jmp output mat: mov al,0 output: mov result,al,JXX指令与状态标志位 SF、PF、OF,与SF有关的条件转移指令 JS (SF = 1)时跳转 JNS (SF = 0)时跳转 与PF有关的条件转移指令 JP/JPE (PF = 1)时跳转 JNP/JPO (PF = 0)时跳转 与OF有关的条件转移指令 JO (OF = 1)时跳转 JNO (OF = 0)时跳转,例:JS/JNS指令,;计算|XY|(绝对值

39、) ;X和Y为存放于X单元和Y单元的16位操作数 ;结果存入result mov ax,X sub ax,Y jns nonneg neg ax ;neg是求补指令 nonneg: mov result,ax,例:JO/JNO指令,;计算XY; ;X和Y为存放于X单元和Y单元的16位操作数 ;若溢出,则转移到overflow处理 mov ax,X sub ax,Y jo overflow . ;无溢出,结果正确 overflow: . ;有溢出处理,例:JP/JNP指令,;设字符的ASCII码在AL寄存器中 ;将字符加上奇校验位 ;在字符ASCII码中为“1”的个数已为奇数时 ;则令其最高位为

40、“0”;否则令最高位为“1” and al,7fh ;最高位置“0”,同时判断“1”的个数 jnp next ;个数已为奇数,则转向next or al,80h ;否则,最高位置“1” next: .,01000001,控制转移类指令,高于与大于、低于与小于,两无符号数比较称 高于、低于 与标志位CF有关 JA/JNBE、 JAE/JNB、 JB/JNAE、 JBE/JNA Above、Below、Not、Equal 两有符号数比较称 大于、小于 与标志位OF,SF有关 JG/JNLE、 JGE/JNL 、 JL/JNGE、 JLE/JNG Greater、Less、Not、Equal,JXX

41、指令与状态标志位 CF,ZF,JA/JNBE 目操作数源操作数则转移 (CF = 0且ZF = 0) JAE/JNB 目操作数 源操作数则转移 (CF = 0、ZF = 0 或 ZF = 1) JB/JNAE 目操作数 源操作数则转移 (CF = 1且ZF = 0) JBE/JNA 目操作数 源操作数则转移 (CF = 1、ZF = 0 或 ZF = 1) 注:两个无符号数的比较, 称高于、 称低于,JXX指令与状态标志位 OF,SF,ZF,JG/JNLE 目操作数源操作数则转移 (OF SF = 0 且 ZF = 0) JGE/JNL 目操作数 源操作数则转移 (OF SF = 0、ZF =

42、 0 或 ZF = 1) JL/JNGE 目操作数 源操作数则转移 (OF SF = 1 且 ZF = 0) JLE/JNG 目操作数 源操作数则转移 (OF SF = 1、ZF = 0 或 ZF = 1) 注:两个有符号数的比较 称大于、 称小于,例:比较无符号数,cmp ax,bx ;比较ax和bx jnb next ;若axbx,转移 xchg ax,bx ;若axbx,交换 next: .,例:比较有符号数,cmp ax,bx ;比较ax和bx jnl next ;若axbx,转移 xchg ax,bx ; 若axbx,交换 next: .,241,二、循环控制指令,循环范围: 以当前

43、IP为中心的-128+127范围内循环。 循环次数由CX寄存器指定。 循环指令:,LOOP *LOOPZ *LOOPNZ,无条件循环指令,条件循环指令,LOOP 循环控制指令,指令 特点 以计数器 CX,标志位 ZF 为条件,控制循环体 指令格式 LOOP LABEL 若(CX) 0,执行循环体 LABEL LOOPZ LABEL 或 LOOPE LABEL 若(CX) 0 或 ZF = 1,执行循环体LABEL LOOPNZ LABEL 或 LOOPNE LABEL 若(CX) 0 或 ZF = 0、执行循环体LABEL JCXZ 短标号 若 (CX)= 0 则转移至目标地址,例:统计空格个

44、数,mov cx,count ;设置循环次数 mov si,offset string xor bx,bx ;bx清0,用于统计空格数 mov al,20h again: cmp al,es:si jnz next ;ZF=0,非空格,转移 inc bx ;ZF=1,是空格,个数加1 next: inc si loop again ;字符个数减1,不为0继续循环,244,三、过程调用和返回,用于调用一个子过程; 子过程由程序员预先设计 并装入内存 子过程执行结束后要返回 原调用处,调用程序,断点,入口地址,子程序,CALL、JMP 指令比较,CALL 指令 先保护现场 CS当前:IP当前 后获

45、得调用过程入口CS目的:IP目的,JMP 指令 不保护现场 CS当前:IP当前 只获得跳转程序入口CS目的:IP目的,246,调用指令的执行过程,保护断点; 将调用指令的下一条指令的地址(断点)压入堆栈 获取子过程的入口地址; 子过程第1条指令的偏移地址 执行子过程,含相应参数的保存及恢复; 恢复断点,返回原程序。 将断点偏移地址由堆栈弹出,247,过程调用,段内调用 段间调用,段内直接调用 段内间接调用,段间直接调用 段间间接调用,248,1. 段内调用,被调用程序与调用程序在同一代码段 调用前只需保护断点的偏移地址 格式: CALL NEAR PROC 执行过程:,近过程名,代码段1,调用

46、程序,被调用程序,代码段1,将断点的偏移地址压入堆栈 根据过程名找子程序入口,249,段内调用例,(1)CALL TIMRE (2)CALL WORD PTRSI,直接调用,间接调用,44H,33H,CALL,代码段,数据段,设:SI=1200H CS=6000H,1200H,执行第(2)条指令后:,6000H,CS =,3344H,IP =,250,2. 段间调用,子过程与原调用程序不在同一代码段 断点保护时的压栈顺序: 先将断点的CS压栈,再压入IP。,调用前需保护断点的段基地址和偏移地址,251,段间调用例,格式: CALL FAR PROC 格式例: CALL FAR TIMRE CA

47、LL DWORD PTRSI,XXH,XXH,CALL,代码段,数据段,SI,XXH,XXH,CS,IP,252,3. 返回指令,功能: 从堆栈中弹出断点地址,返回原程序 格式: RET RET指令一般位于子程序的最后。,253,四、中断指令,中断 中断源 中断的类型 中断指令 引起CPU产生一次中断的指令,INT 中断控制指令,中断概念 特事特办,立即处理 中断类型 内部中断 软中断,由执行中断指令 INT 获得中断服务 外部中断 硬中断,由外部电平触发获得中断服务,CALL 指令与 INT 指令比较,执行 CALL LABEL 指令 调用过程名为LABEL 的子程序 执行 INT n 指令

48、 调用中断类型(号)为 n 的中断服务程序,控制转移类指令,保护现场与恢复现场,保护现场(断点) CALL 近调用保护IP,远调用保护CS、IP INT 保护FLAG、CS、IP 恢复现场(断点) RET 根据定义过程恢复IP 或IP、CS IRET 恢复IP、CS、 FLAG,注:由指令完成入栈、出栈操作,中断号、中断向量、中断向量表,中断号 (中断类型码) PC 机定义了 256 个中断号 从0 255 或 00H 0FFH 中断向量 中断服务程序的入口地址,即 CS目的:IP目的值 中断向量表 存放所有中断号对应中断服务程序的 入口地址 CS目的:IP目的值的存储区,8086可以处理25

49、6个中断请求。每个中断请求均对应于唯一固定的类型码。被0除类型码是0,单步为1; NMI为2;断点中断为3,溢出中断为4,中断类型码(中断号),中断向量的存放,中断服务程序,中断向量表,8FC0H:2A30H,IP目的,CS目的,每个中断服务程序的 入口地址CS目的:IP目的 占用4 个存储单元。,IP目的值放在低地址的 2 个存储单元。,CS目的值放在高地址的 2 个存储单元。,从CS目的: IP目的 处 执行中断服务程序。,30H,2AH,C0H,8FH,中断号与中断向量表的关系,根据中断号 n 求中断服务程序的入口表地址 IP目的 = n * 4 或 IP目的 = n 2 CS目的 = n * 4 + 2 或 CS目的 = n 2 + 2 根据中断服务程序的入口表地址求中断号 n n = IP目的 / 4 n = IP目的 2,261,1. 中断指令,格式: INT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论