3微型计算机的指令系统课件_第1页
3微型计算机的指令系统课件_第2页
3微型计算机的指令系统课件_第3页
3微型计算机的指令系统课件_第4页
3微型计算机的指令系统课件_第5页
已阅读5页,还剩179页未读 继续免费阅读

下载本文档

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

文档简介

第三章微型计算机的指令系统

§1指令的构成和操作数的类型

一、指令构成一条指令由操怍码字段和操作数字段构成。1、操作码字段操作码字段表明指令执行何种性质的操作。2、操作数字段操作数字段是指明指令执行的操作所需要的操作数.

该字段中,可以是操作数本身或是操作数地址。

1

二、操作数类型操作数有以下三种类型:立即数操作数、寄存器操 作数和存储器操作数。

1、立即数操作数 立即数只能作为源操作数,而不能作为目标操作 数。立即数可以是8位和16位带符号数或者无符号 数,并只能是整数,不能是小数。

2、寄存器操作数寄存器操作数可以存放于CPU内部寄存器中,即通 用寄存器、地址指针寄存器、变址寄存器、段寄存 器。所有的通用寄存器和地址指针寄存器既可以用 作源操作数,又可以用作目标操作数。

3、存储器操作数存储器操作数的数据可能是8位、16位和32位的二进 制数。在指令中,存储器操作数可以分别作为源操 作数和目标操作数,但是不允许二者同时都为存储 器操作数。二、操作数类型2

§28086的寻址方式

一、立即寻址 操作数包含在指令中,此操作数又称为立即数,(立 即数只能作源操作数)立即数可为8位,也可为16 位,它用来给寄存器存贮器赋初值。二、寄存器寻址 操作数在某一寄存器中。一条指令中,可以对源 操作数采用寄存器寻址,也可对目的操作数采用 寄存器寻址,还可两者都用寄存器寻址。寄存器可为:AX,BX,CX,DX,SI,DI,SP,BP AH,AL,BH,BL,CH,CL,DH,DL。

§28086的寻址方式3

三、直接寻址操作数的地址包含在指令中。 (注意:此地址为16位偏移地址) 通常操作数一般在数据段区域中,如果要对其他段 寄存器所指出的存贮区进行寻址(所谓段超越),则在本条指令中,须用前缀指出段寄存器名。

三、直接寻址4四、寄存器间接寻址 操作数的地址在某寄存器中, 这些寄存器可以为:BX,BP,SI,DI之一。

有效地址:EA=[BX或BP或SI或DI]注:如果指令前没有用前缀指明具体的段寄存器,则 寻址时默认为DS/SS。 采用寄存器间址允许在指令中指定一个位移量(8位 或16位)。其有效地址EA为寄存器内容加上此位移 量。(称寄存器相对寻址)

有效地址:EA=[(BX或BP或SI或DI)+位移量(带符号数)]51、数据段基址寻址用BX寄存器进行间接寻址。2、堆栈段基址寻址用BP寄存器进行间接寻址。3、变址寻址用SI,DI寄存器进行间接寻址。4、基址加变址寻址用BX、BP和SI、DI寄存器组合起来进行间接寻址。有效地址EA=[(BX或BP)+(SI或DI)]

注:只要用上BP寄存器,那么默认的段寄存器就是SS,在其他情况,则为DS。否则应用前缀指出相应段寄存器名。1、数据段基址寻址6

附:几种常见的书写形式

MOVAX,VALUE→MOVAX,[VALUE](VALUE为符号地址)MOVAX,ES:VALUE→MOVAX,ES:[VALUE]MOVAX,COUNT[SI]→MOVAX,[COUNT+SI](COUNT为位移量的符号地址)MOVAX,[BX][DI]→MOVAX,[BX+DI]MOVAX,MASK[BX][SI]→MOVAX,MASK[BX+SI] →MOVAX,[MASK+BX+SI]7

5、例1:DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H, VAL=0050H,请指出下列的源操作数字段是什么寻址方式? 它的物理地址是多少?A、MOVAX,OABHB、MOVAX,BXC、MOVAX,[VAL+100H]D、MOVAX,[BX]E、MOVAX,ES:[BX]F、MOVAX,[BP]G、MOVAX,[SI]H、MOVAX,[VAL+BX+SI]5、例1:DS=2000H,ES=2100H,SS8例2:根据以下要求写出相应的汇编语言指令A、把数OB5H与(AL)相加,结果送回AL中。

B、把BX和DX内容相加,结果存入DX中。

C、用位移量0524H的直接寻址方式把存贮器中一个字 与数2A59相加,结果送回存贮单元中。

D、用BX和SI的基址变址寻址方式,把存贮器中一个字 节与AL内容相加,结果存入AL中。

E、用BX和位移量OB2H的寄存器相对寻址方式把存贮 器中一个字和CX相加,结果存入内存单元中。

例2:根据以下要求写出相应的汇编语言指令hijiyi.co9

§38086/8088CPU指令系统一、数据传送指令

1、通用数据传送指令<1>MOV传送指令格式:MOVDST,SRC DST:目的操作操作:DSTSRCSRC:源操

A、立即数到寄存器存贮器reg,data

注:不包括段寄mem,data

10

B、从寄存器到寄存器reg,reg从存贮器到寄存器mem,reg从寄存器到存贮器reg,mem注:不包括段寄

11C、从存贮器/寄存器到段寄存器(mem/reg,segreg)

注:不能往CS中传送数据.D、从段寄存器到存贮器/寄存器(segreg,mem/reg)

12

注:1,不影响标志 2,不允许两操作数都使用存储器3,不允许往CS中送数 4,8位传送/16位传送决定于指令中寄存器及立 即数形式 5,凡给SS赋值时,系统会自动禁止中断,等下 条指令执行完后才会恢复E、例:一批数的传送

13<2>PUSH进栈与POP出栈指令

A、堆栈 堆栈是以“后进先出”方式工作的一个存贮区。它存 在于堆栈段中.堆栈在计算机工作中起着重要作用, 它在子程序结构的程序以及中断程序中是不可少 的。堆栈指针寄存器SP用来指示堆栈在那里。它始 终指向当前堆栈的栈顶。

注:在8086中堆栈的存取是以字为单位进行的

B、PUSH/POP指令格式与操作格式:PUSHSRC操作:1,SP-1SP2,高字节(SP)3,SP-1SP4,低字节(SP)格式:POPDST操作:1,低字节弹出2,SP+1SP3,高字节弹出4,SP+1SP<2>PUSH进栈与POP出栈指令14C、注:PUSH/POP指令可使用除立即数以外的所有寻址 方式。指令也可以指定段寄为操作数,但POP指 令不允许用CS寄存器。所有标志不受影响。D、例1:两寄存器内容交换分析下面程序段:设SP=2000H,SS=1000H

ST:PUSHBXPUSHCX POPBX POPCX

15例2:设BX=2A0CH,CX=A530H,SS=2000H 程序执行后,BX=AX=CX=SP= ST:MOVSP,1000H PUSHBX PUSHCX MOVAX,62CEH ADDAX,SP POPBX HLT例3:分析下面程序: ST:MOVCX,5 POPCX L1:PUSHCX DECCX MOVCX,10JNZL1L2:DECCXHLT JNZL2

例2:设BX=2A0CH,CX=A530H,SS=16

<3>XCHG指令(交换)

A、XCHG指令格式与操作XCHGOPR1,OPR2 OPR1←→OPR2B、XCHG指令可以在寄存器之间或寄存器与存贮器之 间交换信息。C、例

注:不允许使用段寄。 该指令不影响标志位。

17

2、累加器专用传送指令

<1>IN/OUT输入输出指令A、指令的格式与操作长格式:INAL,PORTAL←(PORT) INAX,PORTAX←(PORT+1,PORT)OUTPORT,AL(PORT)←ALOUTPORT,AX(PORT+1,PORT)←AX短格式:INAL,DXAL←(DX)INAX,DXAX←(DX+1,DX)OUTDX,AL(DX)←ALOUTDX,AX(DX+1,DX)←AX注:I/O指令中只能用AX/AL与DX和8位的端口地址。

18

B、用长格式时可以在指令中直接指定端口号,但只限

于外设的前256个端口,当端口号≥256时,只能使

用短格式,(间接),必须注意端口号即为外设地

址,它与段寄无关。I/O指令不影响标志位。C、例1:

D、例2:

OUTDX,ALB、用长格式时可以在指令中直接指定端口号,但只限

19

<2>XLAT换码指令A、指令格式与操作XLATOPR或XLAT AL←[BX+AL]B、注:使用XLAT指令,应先建立一个表格。

表格首址存入BX中,需转换的代码应是相对于 表格首址的位移量(即项号)也提前放入AL 中。 表格的内容(即项值)则是所要换取的代码 它将存入AL中。指令格式中的OPR为表格首址(符号地址)。

所有标志不受影响。所有标志不受影响。hijiyi.co20C、例设:BX=0040H,AL=02H,DS=F000H项号 项值表格:0(F0040H)=11H(0040H为表格首址) 1(F0041H)=22H2(F0042H)=33H 3(F0043H)=44H 4(F0044H)=55H 5(F0045H)=66H

则:执行XLAT后,AL=21

3、地址传送指令

A、指令格式与操作

偏移地址送寄存器LEAREGREGSRC 把源操作数的偏移地址送寄存器。

指针送寄存器和DSLDSREG,SRCREG(SRC)DS(SRC+2) 把源操作数提供的32位数送寄存器与段寄DS

指针送寄存器和ESLESREG,SRCREG(SRC) ES(SRC+2)把源操作数提供的32位数送寄存器与段寄ES注:所有标志不受影响REG必须为16位通用寄存器SRC为内存单元地址。

22B、例

LEABX,[BX+SI]

执行前:BX=0400HSI=003CH 执行后:BX=

LDSSI,[10H]

执行前:DS=C000H,(C0010H)=0180H (0012H)=2000H 执行后:SI=DS=

LESDI,[BX]

执行前:DS=B000H,BX=080AH (B080AH)=05AEH,(B080CH)=4000H 执行后:DI=ES=234、标志寄存器传送指令 标志送AH:LAHFAH←PSW的低字节 AH送标寄:SAHFPSW的低字节←AH 标志进栈:PUSHFSP←SP-2; (SP+1,SP)←PSW标志出栈:POPFPSW←(SP+1,SP) SP←SP+2PSW15870

AH////OFDFIFTFSFZF/AF/PF/CF///////OFDFIFTFSFZF/AF/PF/24

三、算术运算指令1、加法指令

加:ADDDST,SRC DST←SRC+DSTreg,reg;reg,mem;mem,regreg,data;mem,data;ac,data

带进位加:ADCDST,SRC (DST)←(SRC)+(DST)+CFreg,reg;reg,mem;mem,regreg,data;mem,data;ac,data 加1:INCOPR (OPR)←─(OPR)+1(reg;mem) 注:INC指令不影响CF标志三、算术运算指令252、减法指令

减:SUBDST,SRC DST←DST-SRC 带借位减:SBBDST,SRC OST←DST-SRC-CF

减1:DECOPR OPR←OPR-1 求补:NEGOPROPR←0-DPR

比较:CMPOPR1,OPR2 OPR1-OPR2

注:CMP指令执行减操作,但它不保存结果,只是 根据操作结果设置条件标志位。CMP指令后 往往跟着一条条件快移指令,实现程序分支。DEC指令不影响CF标志。263、乘法指令格式:无符号数乘 MULSRC (reg/mem)

带符号数乘IMVLSRC操作:字节操作AL*(SRC)AX字操作AX*(SRC)DX,AX

注:执行前,必须将被乘数送入AX/AL中。 MUL:当积的高位为0,则CF=0,OF=0否则均为1。IMVL:当积的高一半是低一半的符号扩展则 CF=OF=0,否则为1。

例:设AL=04HBH=02HAH=E5H则执行MULBH后AX=

27

4、除法指令格式:无符号数除DIVSRC (reg/mem)

带符号数除IDIVSRC操作:字节操作:AX÷(SRC)→商AL,余AH字操作:DX,AX÷(SRC)→商AX,余DX

注:IDIV、DIV执行前,必须将被除数送入指定寄存器 AX,DX中。用除法指令时,必须注意它要求商为8位(字节)/ 16位(字),如果被除数的高8位(字节)或16位 (字)大于除数的绝对值,商就会产生溢出,此时 会作除数为0的情况来处理。例:设AX=0009HBH=02H则执行DIVBH后AL=AH=

4、除法指令28

D、字节转换为字指令: 格式:CBW操作:AL的内容符号扩展到AH。

字转换为双字指令: 格式:CWD操作:AX的内容符号扩展到DX。

注:CBW,CWD指令不影响条件码。

例:设有两个16位数存于AX,BX中,求Z=AX/BX

5、十进制调整指令A、压缩的BCD码:用4位2进制表示一个十进制数位。 如502D─→0101,0000,0010B

非压缩的BCD码:以8位为一组表示一个十进制数 位,其中低4位为BCD码,高4位没 有意义如:502D─→00110101,00110000,0011,0010B。 注:ASCII码是一种非压缩的BCD码。D、字节转换为字指令: 格式:C29

B、压缩的BCD码调正指令 DAA: 条件:用ADD或ADC将两个压缩BCD码 相加,和存于AL中。操作:将和AL调正到压缩的BCD格式存入AL中。

DAS: 条件:用SUB或SBB将两个压缩BCD码 相减,差存于AL中。操作:将AL中的差调正到压缩的BCD格 式存入AL中。

注:DAA/DAS对OF标志无定义对其他标志有影响。

30

例1:设:AL=28H,BL=68H执行:ADDAL,BLDAA 指令后:AL=CF=AF=

例2:设:AL=86H,BL=07H执行:SUBAL,BLDAS 指令后:AL=CF=AF=

31C、非压缩的BCD码调整指令AAA:加法的ASCII调正指令 条件:用ADD/ADC将2个非压缩BCD码相加, 和存于AL中。 操作:将AL中和调正到非压缩的BCD格式。将 调正产生的进位值加到AH中。

AAS:减法的ASCII调正指令 条件:用SUB/SBB将2个非压缩BCD码相减, 差存于AL中。 操作:将AL中差调正到非压缩BCD格式,其调 正产生的借位从AH中减去。

32

AAM:乘法的ASCII调正指令。(对结果调正) 条件:用MUL将2个非压缩BCD码相乘(要求高4 位为0),结果存于AL中。 操作:将AL内容除以OAH,其商存于AH中,余 数存于AL中。

AAD:除法的ASCII调整指令(对被除数必须进行调整) 操作:AH*10+AL→AL;0→AH 将AX中的被除数(非压缩BCD码,高4位为0)调 整成二进制数例:a、设:AX=0505H,BL=09H执行:ADDAL,BLAAA后:AX=b、设:AL=07H,BL=09H执行:MULAL,BLAAM后:AH=AL=c、设:AX=0604H执行:AAD后:AX=AAM:乘法的ASCII调正指令。(对结果调正)h33

6、举例A、试编一程序计算一批数中,0的个数。

34B、设有100个无符号字节数存于以TAB为首址的单元中,试将其最大值存于AL中.最小值存于BL中。

B、设有100个无符号字节数存于以TAB为首址的单元35

C、试分析下面程序功能:

ST:LEASI,DATA1

LEADI,DATA2 MOVCX,5

CLC

L1:MOVAL,[SI]

MOVBL,[DI]

ADCAL,BL

DAA

MOV[SI],AL

INCSI

INCDI

LOOPL1

MOVAL,0

ADCAL,0

MOV[SI],AL

HLT

C、试分析下面程序功能:

ST:LEA36

四、逻辑运算和移位指令1、逻辑运算指令(按位操作)逻辑与:ANDDST,SRCDST←DST∧SRC reg,regreg,memmem,reg reg,datamem,data

逻辑或:ORDST,SRCDST←DST∨URC

逻辑非:NOTOPR OPR←OPR

异或:XORDST,SRCDST←DSTVSRC

测试:TESTOPR1,OPR2OPR1∧OPR2注:NOT不影响标志位,其余4条将使CF=OF=0,AF无 定义, 对SF,ZF,PF有影响。逻辑运算指令对处理操作数的某些位很有用。它可 屏蔽某些位,可使某些位置“1”,可测试某些位等.四、逻辑运算和移位指令37

2、移位指令逻辑左移:SHLOPR,CNT

逻辑右移:SHROPR,CNT

算术左移:SALOPR,CNT算术右移:SAROPR,CNT

2、移位指令38

循环左移:ROLOPR,CNT循环右移:ROROPR,CNT带进位循环左移:RCLOPR,CNT带进位循环右移:RCROPR,CNT其中:OPR:reg;memCNT:1或CL循环左移:39

注:移位指令:OF位当CNT=1有效,在移位后D7值发 生变化时1→OF,否则为o。它影响SF,ZF,PF,对AF无定义。循环指令:不影响除OF,CF以外的其它条件标志。 OF影响同移位指令

例:a、设:SI=1450H则:执行MOVCL,2SHLSI,CL后,SI=CF=b、计算BX*6

c、计算AX/256,结果存于AL中

注:移位指令:OF位当CNT=1有效,在移位后D7值发40

五、串处理指令串处理指令是指用一条指令实现对一串字符或数据 的操作。8086的串处理指令有如下几个特点:a、通过加重复前缀(REPREPNZ等)实现串操作。b、可以对字节/字串进行操作c、用SI对源操作数进行间接寻址(在DS段中),用DI对 目的操作数进行间接寻址(在ES段中)。d、串操作时,地址的修改与方向标志DF有关,当DF=1 时,SI/DI作自动减量修改,当DF=0时,SI/DI作 自动增量修改。e、在执行串操作指令过程中,IP保持指向重复前缀 (前缀本身也是一条指令)的偏移地址。

41

1、字符串传送指令与重复前缀指令

A、REPCX←CX-1,当CX=0退出重复,否则 执行其后的串指令。

B、MOVSB (DI)←─(SI)

MOVSW SI←SI±1或2 DI←DI±1或2。 (DF=0为"+";DF=1为"-")

注:MOVSB(字节)/MOVSW(字)指令前通常加REP,

该指令不影响F标志。42

C、例:一批数的传送

a、43

b、

c、b、44

2、取字符串指令

LODSB AC←(SI)

LODSWSI←SI±1减2 (DF=0为"+";DF=1为"-")注:此指令前,通常不加REP,它不影响F标志。

例:数0的个数存于CH中

2、取字符串指令例:数0的个数存于CH中hij45

3、存字符串指令 STOSB (DI)←AC

STOSWDI←DI±1或2. DF=0为"+";DF=1为"-"注:该指令前加REP后,可以使一批内存单元,填满 相同的数。该指令不影响F标志。

例:使0400H开始的256个单元清0

3、存字符串指令例:使0400H开始的2546

4、字符串比较指令与相等/不相等,为0/不为0,重复前缀指令

A、REPE CX←CX-1,当CX=0或ZF=0

REPZ退出重复,否则执行其后的串指令

B、REPNE CX←CX-1,当CX=0或ZF=1

REPNZ退出重复,否则执行其后的串指令

C、CMPSB (SI)-(DI)

CMPSWSI←SI±1或2; DI←DI±1或2。DF=0为“+”;DF=1为“-”47D、例:判一批数是否与要求的数相同

48

5、字符串检索指令按累加器中给出的字节/字对ES:DI所指的字节/字串进行检索,建立相应标志。

A、SCASBAC-(DI)

SCASWDI←DI±1或±2

B、例:100个字符存于以TAB为首址单元中,试检索A字符的位置,位置值存于DX中,若无A字使A=-1

5、字符串检索指令49

六、控制转移指令

1、转移指令

<1>段内与段间:段内转移:在同一段内进行的转移 段间转移:段与段之间进行的转移

<2>转移指令的寻址方式A、段内直接寻址它是一种相对寻址,其转移的有效地址为IP的当 前值与位移量8位/16位(带符号数)之和,其中条 件转移指令只能采用这种寻址方式,位移量为8位.B、段内间接寻址:(只适用于无条件转移指令)段内间接寻址的转移有效地址为寄存器的内容或 存贮单元的内容。它可以用数据寻址方式中除立即 数以外的任一种寻址方式取得。

六、控制转移指令50

C、段间直接寻址:(只适用无条件转移指令)段间直接寻址的转移地址的段值和偏移量直接由指 令给出。产生转移时,其段值送CS,偏移量送IP。

D、段间间接寻址:(只适用无条件转移指令)段间间接寻址用存贮器中2个相继字的内容取代IP 与CS内容,以达到段间转移之目的。其中相继字的 存贮单元地址将由指令指定的除立即数/寄存器方 式以外的任一种数据寻址方式取得。

两个相继字中,前一个为偏移量,后一个为段值。

<3>无条件转移指令JMPSHORTPTROPRIP←IP+8位位移量段内直接短转移

JMPNEARPTROPRIP←IP+16位位移量段内直接近转移

JMPWORDPTROPRIP←─(EA)段内间接转移C、段间直接寻址:(只适用无条件转移指令)51

JMPFARPTROPRIP←OPR(偏移地址)段间直接转移 CS←OPR(段地)

JMPDWORDPTROPR IP←(EA)段间间接转移 CS←EA+2

<4>条件转移指令A、JZ(JE)OPR条件ZF=1结果为零(相等转)

JNZ(JNE)OPRZF=0结果不为零(不等转)

JSOPRSF=1为负转

JNSOPRSF=0为正转

JOOPROF=1有溢出转

JNOOPROF=0无溢出转

JPOPRPF=1偶转

JNPOPRPF=0奇转JMPFARPTROPR52

B、无符号数条件转移 JB(JNAE,JC)OPR条件:CF=1小于转

JNP(JAE,JNC)OPRCF=0大于等于转

JBE(JNA)OPRCFVZF=1小于等于转

JNBE(JA)OPRCFVZF=0大于转

C、带符号数条件转移 JL(JNGE)OPR条件:SF≯OF=1小于转

JNL(JGE)OPRSF≯OF=0大于等于转

JLE(JNG)OPR(SF≯OF)∨ZF=1小于等于转

JNLE(JG)OPR(SF≯OF)∨ZF=0大于转

D、JCXZOPRCX=0CX=0转

B、无符号数条件转移53

<5>例:

A、设:DS=2600H,BX=1256H,SI=528FTAB(位移量)=20A1HPC当=2000H [232F7H]=3280H,[264E5H]=2450H执行JMP1000H后IP= JMPBX后IP=JMP[BX+TAB]后IP=JMP[BX+SI]后IP=JMP2000H:1000H后IP=CS=54B、试分析下面程序ST:MOVAL,XSHLAL,1JCL2CMPAL,YJNZL1MOVZ,0HLTL1:JBL3L2:MOVZ,1HLTL3:MOVZ,-1HLTB、试分析下面程序55

2、子程序调用和返回指令

A、调用指令:把下一条指令的地址(CS/IP即断点) 压栈,并实现转移(DST送IP/CS)

CALLDST

段内直接SP←SP-2调用[SP+1,SP]←IP/IP←IP+D16

段内间接SP←SP-2 调用 [SP+1,SP]←IP/IP←EA

段间直接SP←SP-2[SP+1,SP]←CS调用SP←SP-2[SP+1,SP]←IPIP←偏移地址CS←段地址

2、子程序调用和返回指令56

段间间接SP←SP-2,[SP+1,SP]←CS调用SP←SP-2,[SP+1,SP]←IPIP←(EA)CS←(EA+2)

B、返回指令RET

段内返回

IP←[SP+1,SP] SP←SP+2

RETEXP

段内带立即数返回

IP←[SP+1,SP] SP←SP+2 SP←SP+D16(出栈后修改SP)

段间间接SP←SP-2,[SP+1,SP]57

RET IP←[SP+1,SP]

段间返回 SP←SP+2 CS←[SP+1,SP] SP←SP+2

RETEXPIP←[SP+1,SP]

段间带立即数返回 SP←SP+2 CS←[SP+1,SP] SP←SP+D16

注:EXP是一个表达式,其值为D16(位移量)。它用来在 返回地址出栈后修改堆栈指针。这便于调用程序在 用CAIL之前把子程序所需参数入栈,以便子程序使 用。当子程序返回后,这些参数已不再有用,就可 以修改栈指针使其指向参数入栈以前的值。58

C例:CALL1000HCALLAXCALL2500H:3600H

CALLDWORDPTR[DI]

RET6

593、循环控制指令LOOPOPR CX←CX-1,当CX≠0时:则:IP←IP+D8实现循环 否则:IP值不变,退出循环

LOOPZ(LOOPE)OPR CX←CX-1,当CX≠0,ZF=1时:则:IP←IP+D8实现循环 否则:IP值不变,退出循环

LOOPNZ(LOOPNE)OPR CX←CX-1,当CX≠0,ZF=0时: 则:IP←IP+D8实现循环 否则:IP值不变,退出循环注:循环控制指令不影响条件码。LOOPZ/LOOPNZ提供了提前结束循环的可能性。60

例:试分析下面程序ST:MOVCX,MMOVAX,0MOVSI,AXL1:ADDAX,[ARRAY+SI]ADDSI,2LOOPL1MOV[TOTAL],AX HLT

614、中断指令和中断返回指令

A、INT SP←SP-2;[SP+1,SP]←PSW

INTTYPESP←SP-2;[SP+1,SP]←CSSP←SP-2;[SP+1,SP]←IP IP←(TYPE*4) CS←(TYPE*4+2)

注:TYPE为类型号,其值为0~255。(TYPE不能为0) INT是一个字节的中断指令,它隐含的类型号为3。 (断点中断) INT指令在执行完上述操作后,将0→IF→TF。62

B、INTO若OF=1则:SP←SP-2;[SP+1,SP]←PSW,SP←SP-2;[SP+1,SP]←CS SP←SP-2;[SP+1,SP]←IP IP←[00010H,00011H] CS←[00012H,00013H]注:INTO为若溢出则中断的指令。(类型号为4)C、IRETIP←[SP+1,SP],SP←SP+2CS←[SP+1,SP],SP←SP+2 PSW←[SP+1,SP],SP←SP+2注:中断指令:保存现场:PSW、CS、IP 实现转移:[TYPE*4]→IP [TYPE*4+2]→CS

635、处理器控制指令

A、CLC0→CF进位位置"0"

CMCCF→CF进位求反

STC1→CF进位置"1"

CLD0→DF方向标志置"0"

STD1→DF方向标志置"1"

CLI0→IF中断标志置"0"STI1→IF中断标志置"1"

B、NOP 无(空)操作

HLT 停机

WAIT等待64

C、ESCmem交权(调用协处理器工作) ESC指令把mem存贮单元的内容送到 数据总线。这条指令在使用协处理器 执行某些操作时,可以从存贮器取得 指令或操作数。

D、LOCK 封锁 该指令是一种前缀,它可以与其它指 令联合,用来维持总线的锁存信号直 到与其联合的指令执行完为止。 当CPU与其他处理机协同工作时,该 指令可避免破坏有用信息。

65

小结

一、CPU结构

1、通用寄存器:AX,BX,CX,DX/AH,AL,BH,BL,CH,CL,DH,DL专用寄存器:SP,BP,SI,DI。标志寄存器:F,(AF,CF,OF,SF,PF,ZF//DF,IF,TF,)段地址寄存器:CS,DS,ES,SS指针寄存器:IP

2、一个20位的物理地址可表示成段地址:偏移地址, 其计算方法如下:

物理地址=(段地址X10H)+偏移地址

66

二、寻址方式

1、立即寻址:操作数由指令给出MOVDX,100H

2、寄存器寻址:操作数在寄存器中ADDAX,BX

3、直接寻址:操作数有效地址由指令给出MOVAX,[100]MOVAX,VAR

4、寄存器间接寻址:操作数的地址在寄存器中,这些寄存器可以为BX,BP;SI,DI.其操作数地址为:A、┌BX┐(数据段基址寻址)│SI│+位移量+[DS]*16(变址寻址)└DI┘(变址寻址)[BP]+位移量+[SS]*16(堆栈段基址寻址)

二、寻址方式67B、┌SI┐││+[BX]+位移量+[DS]*16(基址加变址)└DI┘┌SI┐││+[BP]+位移量+[SS]*16(基址加变址)└DI┘

注:只要用上BP,那就默认段寄为SS,其他情况为DS5、编写指令时应注意的几个问题A、注意区别立即寻址方式和直接寻址方式如:MOVAX,126与MOVAX,[126]B、使用寄存器间址时,应注意和寄存器寻址方式的区别如:MOVAX,BX与MOVAX,[BX]B、┌SI┐68

C、在双操作数指令中,源操作数和目的操作数的地

址不能同时为存贮器地址。如:M1和M2为两个存贮器变量, 则:ADD[M1],[M2]是错误指令。D、代码段寄存器CS不能用作指令的目的寄存器。

三、指令1、数据传送指令A、MOVDST,SRC(DST:目的操作数,SRC源操作数) 指令的7种格式与注意事项。PUSHSRC指令的操作过程,SP的变化情况

69

POPDST指令的操作过程,SP的变化情况XCHGOPR1,OPR2(交换)

B、INAC,PORT只能用AX/AL,DX//64K空间OUTPORT,ACXLAT(换码)AL←[BX+AL]BX为表格首址,AL为项号C、LEAREG,SRC有效地址送寄存器REG为通用寄存器LDSREG,SRC指针送寄存器和DSLESREG,SRC指针送寄存器和ES

70

D、LAHF标志送AHSAHFAH送标寄

2、算术运算指令A、ADDDST,SRCADCDST,SRCINCOPRINC指令不影响CF

B、SUBDST,SRCSBBDST,SRCDECOPRDEC指令不影响CFNEGOPRCMPOPR1,OPR1建立标志/后跟条转D、LAHF标志送AH71

C、MULSRC字节:AL*(SRC)→AX字:AX*(SRC)→DX,AXIMULSRC(带符号)DIVSRC字节:AX÷(SRC)→AL(余在AH)字:DX,AX÷(SRC)→AX(余在DX)IDIVSRC(带符号)

D、CBW(字节转换为字)/(AL扩展到AH)CWD(字转换为双字)/(AX扩展到DX)E、DAA(BCD码加调正/压缩码)DAS(BCD码减调正/压缩码)AAA(非压缩BCD码加调正)AAS(非压缩BCD码减调正)C、MULSRC字节:AL*(SRC)→72

AAM非压缩BCD码乘调正将AL积除OA,商存AH;除数存AL中。AAD非压缩BCD码除调正将被除数AX调正为2进制数;H*10+AL→AL3、逻辑运算和移位指令A、ANDDST,SRCORDST,SRCNOTOPRXORDST,SRCTESTOPR1,OPR2(OPR1∧OPR2)

73

B、SHLOPR,CNT(CNT为1或CL)SALOPR,CNT算术左移SHROPR,CNT逻辑右移SAROPR,CNT算术右移ROLOPR,CNT循环左移ROROPR,CNT循环右移RCLOPR,CNT带进位循环左移RCROPR,CNT带进位循环右移4、串处理指令(使用串指令的条件)A、REP重复前缀CX≠0重复MOVSB字符串传送(DI)←(SI)MOVSW指针自动修改条件:SI,DI,CX及DF赋值后才可用MOVSB/W)

74

B、LODSB取字符串AC←(SI)LODSWC、STOSB存字符串(DI)←ACSTOSWD、REPE/REPZ重复前缀CX≠0,ZF=1时重复REPNE/REPNZ重复前缀CX≠0,ZF=0时重复CMPSB字符串比较(SI)-(DI)CMPSW自动修改指针E、SCASB字符串捡索/AC-(DI)SCASW关键字要事先存入AL,AX中

755、控制转移指令A、JMPSHORTPTROPR段内直接短转移JMPNEARPTROPR段内直接近转移JMPWORDPTROPR段内间接转移JMPFARPTROPR段间直接转移JMPDWORDPRTOPR段间间接转移B、JZ/JEOPRZF=1JNE/JNEOPRZF=0JSOPRSF=1JNSOPRSF=076

JOOPROF=1JNOOPROF=0JPOPRPF=1JNPOPRPF=0JB/JNAE/JCOPRCF=1无符号数小于转JNB/JAE/JNCOPRCF=0无符号数大于等于转JBE/JNAOPRCF∨ZF=1无符号数小于等于转JNBE/JAOPRCF∨ZF=0无符号数大于转JL(JNGE)OPRSF≯OF=1带符号数小于转JOOPROF=177

JNL(JGE)OPRSF≯OF=0带符号数大于等于转JLE/JNGOPR(SF≯OF)∨ZF=1带符号数小于等于转JNLE/JGOPR(SF≯OF)∨ZF=0带符号数大于转JCXZOPR(CX)=0CX=0转

C、CALLDST指令的操作过程RET(EXP)指令的操作过程/EXP的含义

78

D、LOOPOPR循环控制,CX≠0转移LOOPZ/LOOPEOPR循环控制,CX≠0;ZF=1则转移LOOPNZ/LOOPNEOPR循环控制,CX≠0;ZF=0则转移E、INT指令操作过程INTTYPEINTOIRET

F、CLC进位位(CF)置"0"CMC进位位(CF)求反STC进位位(CF)置"1"CLD方向标志置"0"D、LOOPOPR循环控制,79

STD方向标志置"1"CLI中断标志置"0"STI中断标志置"1"NOPHLTWAIT等待ESCmem交权LOCK封锁/前缀

6、使用指令时,应注意的几个问题

A、指令对地址还是对地址中的内容进行操作,要严加区分。如:LEABX,MESSMESS的偏移地址→BX

STD方向标80

B、使用指令时,要清楚指令隐含的操作寄存器如:乘法隐含的目的操作数:AX/AL除法隐含的目的操作数:DX,AX/AL串指令隐含的操作数为:SI,DI与AL等。重复前缀:CX十进制调正指令隐含地使用了AL换码指令:XLAT[BX+AL]→AL循环指令:CX输入、输出指令:AX/AL,DX

C、对带符号数和无符号数的操作应正确选择相应的条件转移指令。

81

D、用移位指令来倍增或倍减一个值时,要注意对

带符号数和无符号数所使用的指令应是不同的。如:AX=8520H当AX为无符号数时,AX/2可用SHRAX,1结果为4290H;当AX为带符号数时,AX/2应用SARAX,1结果为C290H。

E、标号是程序中指令的符号地址,要注意和变量(数据符号)的区别。如:定义VAR为一变量,LAB为一标号JMPLAB指令的转移地址为LABJMPVAR为一非法指令。

D、用移位指令来倍增或倍减一个值时,要注意对

82

四、举例

1、指出下列指令的错误A、MOVAH,BXB、MOV[BX],[SI]C、MOVAX,[SI][DI]D、MOV[BX][SI],ES:AXE、MOVBYTEPTR[BX],1000H

F、MOVCS,AXG、MOVDS,BPH、INC[AX]83

2、求双字长数DX:AX的补码数

3、将DX:AX中双字长数乘以2/除以2

84

4、两字节数相加,设两字节数存于BL、DL中,和存于AX中。A、无符号数

B、带符号数

4、两字节数相加,设两字节数存于BL、DL中,hi855、比较AX,BX,CX中带符号数大小,将最大数存于AX中。

6、已知内存中有一以ARRAY为首址的100个字的数组,试将数组中每个数加1

5、比较AX,BX,CX中带符号数大小,hijiyi.c86

7、试将ELEMS中的100个字节数据的位置颠倒过来

87

1X>08、设Y=0X=0已知一个8位带符号数存于X单-1X<0元中试求Y值存于AL中。

889、有3个数存于TAB为首址单元中,试将中值存于A中设数为带符号数

9、有3个数存于TAB为首

温馨提示

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

评论

0/150

提交评论