指令系统05课件_第1页
指令系统05课件_第2页
指令系统05课件_第3页
指令系统05课件_第4页
指令系统05课件_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

8088/8086CPU指令系统寻址方式解决了操作数存放的形式,本节讲述8088/8086CPU基本指令的助记符表示形式及功能结合不同的寻址方式,将133条基本指令组合为上千种指令功能8088/8086CPU指令系统寻址方式解决了操作数存放的形8088/8086CPU基本指令类数据传送类指令算术运算类指令逻辑运算类指令串操作类指令控制转移类指令处理器控制类指令8088/8086CPU基本指令类数据传送类指令程序转移指令用来控制程序的走向,其实质是设法改变当前的CS和IP值,以使CPU转移到一个新的地址处执行程序。控制转移类指令程序转移指令用来控制程序的走向,其实质是设法改变当前的CS和控制转移类指令无条件转移指令JMP指令CALL、RET指令有条件转移指令JXX组指令中断指令INT、IRET、INTO指令循环控制指令

LOOP,LOOPZ,

LOOPNZ指令控制转移类指令无条件转移指令JMP指令控制转移类指令JMP——无条件转移指令

段内直接短转移

JMPSHORTLABEL

;IP目的←IP当前

+rel8(8bit符号数)

rel8

在-128~+127之间

段内直接近转移

JMPNEARLABEL

;IP目的←IP当前

+rel16

(16bit符号数)

rel16

在-32768~+32767之间控制转移类指令JMP——无条件转移指令段内直接短转移段内直接短转移——rel8

操作码rel8←IP源←IP当前←IP目的错误的rel8正确的rel8LABELJMPSHORLABELIP目的←IP当前

+rel8IP目的←IP源

+rel8+2注:rel8

80H

←06H段内直接短转移——rel8操作码rel8←IP段内直接近转移——rel16

E9Hrel8低rel8高←IP源←IP当前←IP目的错误的rel16正确的rel16LABELJMPNEARLABELIP目的←IP当前

+rel16IP目的←IP源

+rel16+3←00H←05H段内直接近转移——rel16E9Hrel8低re例:设标号偏移地址=1000H,执行完JMP指令后的当前IP值为0009H,则位移量=1000H-0009H=0FF7H例:设标号偏移地址=1000H,执行完JMP指令后的当前IP控制转移类指令JMP——无条件转移指令

段内间接转移

寄存器中的值为段内IP目的地址

JMPBX

存储器中的值为段内IP目的地址

JMPWORD[BX]JMPWORD[2000H]

注:段内转移方式——CS不变、IP变控制转移类指令JMP——无条件转移指令段内间接转移注控制转移类指令JMP——无条件转移指令

段间直接远转移

JMPFARLABEL

;LABEL为CS目的:IP目的

段间间接远转移

JMPDWORD[BX]

;CS目的:IP目的在地址[BX]中

注:段间转移方式——CS变、IP变控制转移类指令JMP——无条件转移指令段间直接远转移当前CS=2100HJMP0C020065转移目标的偏移地址转移目标的段地址×1621000H代码段1×1665000H新CS=6500H代码段2转移至此当前IP=1500H新IP=020CH…当前CS=2100HJMP转移目标的偏移地址转移目标的段地控制转移类指令段内间接转移与段间间接远转移讨论

JMP[BX]

;指令错误,未确定[BX]中的数据类型

JMPWORD[BX]

;段内间接转移,返回16位IP目的值

JMPDWORD[BX]

;段间间接远转移,返回32位CS目的:IP目的值控制转移类指令段内间接转移与段间间接远转移讨论JMP段内间接转移与段间间接远转移例

若(BX)=2000HJMPWORD[BX]CS目的

=CS源

IP目的=3C2AHJMPDWORD[BX]CS目的

=3367HIP目的=3C2AH2AH3CH67H33H2000H段内间接转移与段间间接远转移例若(BX)=2000H2控制转移类指令CALL、RET

——过程调用与过程返回指令

过程调用指令—CALLLABEL

段内近调用过程CS不变,IP变;保护现场即将IP当前值入栈段间远调用过程CS、IP均变;保护现场即将CS当前、IP当前值入栈过程返回指令—RET

定义近过程时

RET指令恢复现场即将IP当前值出栈定义远过程时

RET指令恢复现场即将IP当前、CS当前值出栈控制转移类指令CALL、RET——过程调用与过程返回指令控制转移类指令

(IP当前)→SS:SP

保护现场IP值入栈

段内近调用过程——CALLLABEL

段内近调用返回——RET(IP当前)←

SS:SP

恢复现场IP值出栈

段间远调用过程——CALLLABEL(CS当前)←

SS:SP恢复现场CS值出栈(CS当前)→SS:SP

保护现场CS值入栈(IP当前)→SS:SP

保护现场IP值入栈

段间远调用返回——RET(IP当前)←

SS:SP

恢复现场IP值出栈控制转移类指令(IP当前)→SS:SP控制转移类指令近过程的调用时的保持现场..MOVAX,BXCALLMAINMOVBX,AX..

E8H30H80H2002HCS2005HIP当前入栈IP目的

=

8030H←IP源←IP当前2000H控制转移类指令近过程的调用时的保持现场控制转移类指令CALL指令中的直接调用与间接调用段内近过程调用直接IP目的间接IP目的段间远过程调用直接CS目的:IP目的间接CS目的:IP目的CALLMAIN

CALLBX

CALLDWORD[BX]

CALLMAIN

控制转移类指令CALL指令中的直接调用与间接调用CALL控制转移类指令CALL、JMP指令比较

CALL指令

先保护现场CS当前:IP当前后获得调用过程入口CS目的:IP目的

JMP指令

不保护现场CS当前:IP当前只获得跳转程序入口CS目的:IP目的控制转移类指令CALL、JMP指令比较CALL指令控制转移类指令JXX——有条件转移指令

指令格式

JL、JGE、......JNZ等

指令特点

仅有段内短转移,IP目的

=IP当前

+rel8rel8

值在页内,即-128~+127间

前导指令

CMP、TEST、DECCX等

注:执行JXX指令前的指令必须影响标志位控制转移类指令JXX——有条件转移指令指令格式注:执行条件转移指令的执行流程条件满足

?顺序执行下一条指令目标处执行NY,转移条件转移指令的执行流程条件满足顺序执行下一条指令目标处执行控制转移类指令有条件转移指令的英文符号

Zero——目的操作数减源操作数为0(ZF=0)

Equal——目的操作数等于源操作数(ZF=0)

Above——目的操作数高于源操作数(CF=0)

Below——目的操作数低于源操作数(CF=1)

Greater——目的操作数大于源操作数(OF⊕SF=0)

Less——目的操作数小于源操作数(OF⊕SF=1)

Carry——两无符号运算后有进位(CF=1)

Overflow——两有符号运算后有溢出(OF=1)

Sign——两有符号运算后有符号(SF=1)

Parity——奇偶位为偶(PF=1)

Not——不是控制转移类指令有条件转移指令的英文符号Zero——目的操控制转移类指令JXX指令与状态标志位——ZF、CF与ZF有关的条件转移指令

JE/JZ——两数相等/两数相减不为零(ZF=0)

JNE/JNZ——两数有等/两数相减为零(ZF=1)与CF有关的条件转移指令

JAE/JNB——高于或等于/不低于(CF=0)

JNC——无进位/无借位(CF=0)

JB/JNAE——低于/不高于也不等于(CF=1)

JC——有进位/有借位(CF=1)控制转移类指令JXX指令与状态标志位——ZF、CF与ZF例:JC/JNC指令;统计BX中1的个数(方法一)

xoral,al ;AL=0,CF=0again: testbx,0ffffh;等价于

cmpbx,0 jenext;ZF=1,即(BX)=0,转移 shlbx,1 jncagain;CF=0.转移 incal;CF=1,加1 jmpagainnext: ... ;AL保存1的个数例:JC/JNC指令;统计BX中1的个数(方法一)统计BX中“1”的个数(方法二)

xoral,al ;AL=0,CF=0again: cmpbx,0 jznext shlbx,1 ;也可使用shrbx,1 adcal,0 jmpagainnext: ... ;AL保存1的个数统计BX中“1”的个数(方法二) xoral,al ;例:JZ/JNZ指令

repz

cmpsb ;重复比较两个字符串

jnzunmat ;ZF=0(不等),转移

mov

al,0 ;顺序执行(相等)

jmp

outputunmat: mov

al,0ffhoutput: mov

result,al repzcmpsb ;重复比较两个字符串

jzmat ;ZF=1(相等),转移

mov

al,0ffh ;顺序执行(不等)

jmp

outputmat: mov

al,0output: mov

result,al例:JZ/JNZ指令 repzcmpsb ;重复比较两控制转移类指令JXX指令与状态标志位——SF、PF、OF与SF有关的条件转移指令

JS——(SF=1)时跳转

JNS——(SF=0)时跳转与PF有关的条件转移指令

JO/JPE——(PF=1)时跳转

JNP/JPO——(PF=0)时跳转与OF有关的条件转移指令

JO——(OF=1)时跳转

JNO——(OF=0)时跳转控制转移类指令JXX指令与状态标志位——SF、PF、OF例:JS/JNS指令;计算|X-Y|(绝对值);X和Y为存放于X单元和Y单元的16位操作数;结果存入result movax,X subax,Y jnsnonneg neg

ax ;neg是求补指令nonneg: movresult,ax例:JS/JNS指令;计算|X-Y|(绝对值)例:JO/JNO指令;计算X-Y;;X和Y为存放于X单元和Y单元的16位操作数;若溢出,则转移到overflow处理

movax,X subax,Y jooverflow ... ;无溢出,结果正确overflow: ... ;有溢出处理例:JO/JNO指令;计算X-Y;例:JP/JNP指令;设字符的ASCII码在AL寄存器中;将字符加上奇校验位;在字符ASCII码中为“1”的个数已为奇数时;则令其最高位为“0”;否则令最高位为“1”

andal,7fh

;最高位置“0”,同时判断“1”的个数

jnpnext

;个数已为奇数,则转向next

oral,80h

;否则,最高位置“1”next: ...01000001例:JP/JNP指令;设字符的ASCII码在AL寄存器中01控制转移类指令高于与大于、低于与小于

两无符号数比较称——高于、低于与标志位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指令与状态标志位——CF,ZFJA/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指令与状态标志位——CF,ZFJ控制转移类指令JXX指令与状态标志位——OF,SF,ZFJG/JNLE——目操作数>源操作数则转移(OF⊕SF=0且ZF=0)

JGE/JNL——目操作数≥源操作数则转移(OF⊕SF=0、ZF=0或ZF=1)

JL/JNGE——目操作数<源操作数则转移(OF⊕SF=1且ZF=0)

JLE/JNG——目操作数≤源操作数则转移(OF⊕SF=1、ZF=0或ZF=1)注:两个有符号数的比较>称大于、<称小于控制转移类指令JXX指令与状态标志位——OF,SF,ZF例:比较无符号数

cmpax,bx ;比较ax和bx jnbnext ;若ax≥bx,转移

xchgax,bx ;若ax<bx,交换next: ...例:比较无符号数 cmpax,bx ;比较ax和bx例:比较有符号数

cmpax,bx ;比较ax和bx jnlnext ;若ax≥bx,转移

xchgax,bx ;若ax<bx,交换next: ...例:比较有符号数 cmpax,bx ;比较ax和b控制转移类指令LOOP——循环控制指令

指令特点以计数器CX,标志位ZF为条件,控制循环体

指令格式

LOOPLABEL

若(CX)≠0,执行循环体LABEL

LOOPZLABEL或LOOPELABEL

若(CX)≠0或ZF=1,执行循环体LABEL

LOOPNZLABEL或LOOPNELABEL

若(CX)≠0或ZF=0、执行循环体LABEL

JCXZ短标号

若(CX)=0则转移至目标地址控制转移类指令LOOP——循环控制指令指令特点控制转移类指令JNZ、LOOP指令比较AGA:MOVAX,BX

...

DECCXJNZAGAEXIT:......AGA:MOVAX,BX

...

LOOPAGAEXIT:......控制转移类指令JNZ、LOOP指令比较AGA:MOVA例:统计空格个数movcx,count;设置循环次数movsi,offsetstringxorbx,bx;bx清0,用于统计空格数moval,20hagain:cmpal,es:[si]jnznext;ZF=0,非空格,转移incbx;ZF=1,是空格,个数加1next:incsiloopagain;字符个数减1,不为0继续循环deccxjnzagainstring:::::例:统计空格个数movcx,cou控制转移类指令INT——中断控制指令

中断概念特事特办,立即处理

中断类型

内部中断软中断,由执行中断指令INT获得中断服务外部中断硬中断,由外部电平触发获得中断服务控制转移类指令INT——中断控制指令中断概念控制转移类指令CALL指令与INT指令比较

执行CALLLABEL指令调用过程名为LABEL的子程序

执行INTn指令调用中断类型(号)为n的中断服务程序控制转移类指令CALL指令与INT指令比较执行CA控制转移类指令保护现场与恢复现场

保护现场(断点)

CALL近调用保护IP,远调用保护CS、IPINT保护FLAG、CS、IP

恢复现场(断点)

RET根据定义过程恢复IP或IP、CSIRET恢复IP、CS、FLAG

注:由指令完成入栈、出栈操作控制转移类指令保护现场与恢复现场保护现场(断点)注:由指控制转移类指令INTn指令执行过程(F)→SS:SP

将标志寄存器F的值入栈保存

TF→0

中服程序正常运行,非单步运行

IF→0

中服程序中关可屏蔽中断INTR(CS当前)→SS:SP

保护现场CS值入栈

[n*4+2]→(CS目的)获得中服程序的入口CS值(IP当前)→SS:SP

保护现场IP值入栈

[n*4]→(IP目的)获得中服程序的入口IP值从CS目的:IP目的处执行中服程序控制转移类指令INTn指令执行过程(F)→SS:SP控制转移类指令IRET指令执行过程(IP当前)←

SS:SP

恢复现场IP值出栈(CS当前)←

SS:SP恢复现场CS值出栈(FLAG)←

SS:SP恢复标志寄存器的值出栈控制转移类指令IRET指令执行过程(IP当前)←SS:控制转移类指令INTO——溢出中断指令

指令功能若溢出标志OF=1,产生4号中断(中断向量地址为10H),否则顺序执行ADDAX,BXINTOSUBAX,BXINTO控制转移类指令INTO——溢出中断指令指令功能ADD控制转移类指令中断号、中断向量、中断向量表

中断号(中断类型码)

PC机定义了256个中断号从0~255或00H~0FFH

中断向量

中断服务程序的入口地址,即CS目的:IP目的值

中断向量表存放所有中断号对应中断服务程序的入口地址CS目的:IP目的值的存储区控制转移类指令中断号、中断向量、中断向量表中断号(中断类控制转移类指令Intel对8088/8086CPU的保留中断向量表区00000H0007FHFFFFFH128B中断向量表区可存放32个中断向量控制转移类指令Intel对8088/8086CPU的保留中断控制转移类指令中断向量的存放中断服务程序中断向量表8FC0H:2A30HIP目的CS目的

每个中断服务程序的入口地址CS目的:IP目的

占用4个存储单元。IP目的值放在低地址的

2个存储单元。CS目的值放在高地址的

2个存储单元。

从CS目的:

IP目的处执行中断服务程序。30H2AHC0H8FH控制转移类指令中断向量的存放中断服务程序中断向量表8FC0H控制转移类指令中断号与中断向量表的关系

根据中断号n求中断服务程序的入口表地址

[IP目的]=n*4

温馨提示

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

评论

0/150

提交评论