第3章计算机硬件_第1页
第3章计算机硬件_第2页
第3章计算机硬件_第3页
第3章计算机硬件_第4页
第3章计算机硬件_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

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

文档简介

第三章80486微处理器指令系统

㈠教学目标

介绍80486的寻址方式及指令系统。

㈡学习要求

通过本章的学习,要求熟悉各种寻址方式的使用

场合以及常用指令的使用方法。

㈢讲授内容

第三章80486微处理器指令系统

第一节80486微处理器寻址方式

第二节80486微处理器指令系统

E

指令

指令是规定计算机进行某种操作的二进制代码形式的命令。

指令中应包含三方面的信息:

执行什么操作

操作数的位置

结果存放的位置

指令的一般格式

操作码操作数地址1,操作数地址2

寻找操作数所在地址的方法即为寻址方式(AddressingMode)o

第一节80486微处理器的寻址方式

80X86的寻址方式可分为两类:操作数的寻址方式和

转移地址的寻址方式。

一、操作数寻址方式

由于操作数作为指令的操作对象,可以存储在存储器

中(称为存储器操作数)、存储在寄存器中(称为寄存器

操作数)或直接包含在指令中(称为立即数),因此,与

之对应有多种寻址方式。80X86可粗略地划分为3类10种寻

址方式,其中,访问存储器操作数有8种寻址方式。

(1)立即数寻址

操作数作为立即数直接存在指令中。

例:MOVAX,1234H

MOVBL,78H

MOVECX,12345678H

(2)寄存器寻址

操作数存放在CPU某个8位、16位或32位寄存器中。

例:MOVEAX,EDX

ADDCL,2

MOVDX,AX

该寻址方式指令码短,且无需从存储器取操作数,

故执行速度快。

(3)直接寻址

存储器

在这种方式下,指令中

的操作数部分直接给出了操h

操作

作数的有效地址EA。H码

00锻

例:MOVAX,DS:[1000H]OH

AX

;将DS段中1000H和1001H

八八20000H

单元的内容送到AX中。

21000H34H

注意:指令中的DS不能省略。

(4)寄存器间接寻址

操作数所在存储单元的EA由规定的寄存器给出。

MOVSI,1000H

MOVAX,[SI]

EA可以由SI,DI,BP或BX提供。(其中BX、BP为基址寄

存器,SI、DI为变址寄存器)

若以SI,DI,BX间接寻址,则默认操作数在DS段中。若

以BP间接寻址,则默认操作数在SS段中。

如果操作数不在上述规定的默认段,而在其他的段中,

则必须在相应的操作数前加上段超越前缀。例如:

MOVAX,ES:[SI]

MOVAX,DS:[BP]

(5)寄存器相对寻址方式

MOVEAX,[BX+10H]

MOVEAX,10H[BX]

(6)基址变址寻址方式

MOVDX,[BX+SI]

MOVDX,[BP+DI]

(7)相对基址变址寻址方式

MOVDX,[BX+SI+15H]

32位寻址时,除ESP外的32位通用寄存器均可作间接寻址

寄存器。除EBP默认段寄存器为SS外,其余6个通用寄存器均

默认段寄存器为DS。

以下寻址方式只适合于32位寻址。

(8)比例变址寻址方式

MOVDX,[变址寄存器*比例因子+位移量]

比例因子可以是1、2、4、8中的任一个数。

(9)基址比例变址寻址方式

MOVDX,[基址寄存器+变址寄存器*比例因子]

(10)相对基址比例变址寻址方式

MOVDX,[基址寄存器+变址寄存器*比例因子+位移量]

例:判断下列指令是否正确,若正确说出源操作数的寻址方式。

MOVEAX,1234H;立即数寻址

MOVBX,DX;寄存器寻址

MOVEAX,[SI];寄存器间接寻址

MOVAX,[CX];xCX不能用作间接寻址

MOVDL,[BX];寄存器间接寻址

MOVCX,[BP+SI];基址变址,默认SS段

MOVDI,[BX+BP];x不能两个寄存器都为基址

MOVBH,[SI+12345H];x相对量太大

MOVCH,ES:[12H];直接寻址

MOVAX,[34H];X必须说明段前缀

MOVDH,[EAX*3];X比例因子只能是1、2、4、M

二、转移地址寻址方式

在指令系统中,有一组指令为程序转移指令。程序转

移指令的寻址方式涉及如何确定转移的目标地址。目标地

址可以在段内,也可以在段外。

I位移量I-1寄存器

11P寄存器I-----------1

存储单元

(a)段内直接(b)段内间接

存储器中的两个相继字

(c)段间直接(d)段间间接

⑴段内直接寻址

转移的目标地址是当前IP寄存器的内容和一个8位或16

位相对量之和。指令的汇编语言格式表示为:

JMPSHORTOUTSET

JMPNEARPTRPROG

cT命令提示符-tdhu.nX

=FileEditUiewRunBreakpointsDataOptionsUindowHelp

rz=[]=CPUP?ntiunPro---ng

cs:000aB88717Eax0000c=0

cs:00038ED8nouds,axbx0000Z=0

c.00058E1E0000ROUds.[00001ex0000s=0

cs:0009EBI?jnp0022dx00000=0

cs:000B90nopsi0000p=0

cs:000c66BB00000100nouebx,00010000di0000a=0

cs:0012678B040Bmouax,lebx*ecx]bp0000i=l

cs:00168C1E0200nou[0002],dssp0000d=0

cs:001AB8CDABmouax>ABCDds17??

cs:001DBB6705noubx,0567es17??

cs:00202BC3subax,bxss1787

cs:0022B44Cnouah,4ccs1788

cs:0024CD21int21_____________________Jip0000

cs:002616pushss

cs:0027833E9C2700cmpwordptr[279C1,0000

ds:0000CD20FB9F009AF0FE=>JfU=lss:00025678

ds:0008IDF0320B40140F07后2那瞬•ss:0000X234

ds:001095115601810778116帆・x<ss:FFFE0000

ds:0018010101000204FFFF@@@8lyyss:FFFC0000

ds:0020FFFFFFFFFFFFFFFFyyyyyyyyss:FFFA0000

Fl-HelpF2-BkptF3-ModF4-HereF5-ZoonF6-NextF?-TraceF8-StepF9-RunF10-Menu

⑵段内间接寻址

目标地址存放在寄存器或存储单元中。寄存器或存储单

元的内容可以用数据寻址方式中除立即数以外的任何一种寻

址方式取得,所得到的内容将用来取代IP寄存器的值。指令

的汇编格式可以表示为:

JMPAX

JMPTORDPTR[BX+10H]

IDHUQING!

crCOB*andProipt-回

)

=FileEditUieuRurBreakpointsDataOptionsUindowHeIprM.叫1

n=(]=CPUP?ntiumPro=—s

cs:0000kB8D10BmouaxBBDl_______j|ax■伽c=W

zW

cs:H003OEDBmouds,axbx伽Hz=H

cs:00B5BECHmoue*,axexssM

cs:0007B80000mouax,8晒dx0000o=0

FFE0jmpaxsiH伽p=0

cs:00eCFF6710jmpdi伽Ha=M

cs:B08FR44cmovah,4chp0000i=l

cs:HRltCD21int21sp伽Hd=0

cs:00t3B574HAaddax,加?4dsHBC1

cs:B01683F906cmpcx,e/6Ies0BC1

cs:001974M5je0020IssHBD1

cs:001B83F901cmpcx^001csHBD3

cs:001E751BjneM030IipH伽

cs:H02HFF7618pushwordptrlhp*18]

cs:0023E895glcall01UB]

JJ繇想热溺撅然镣海翎宏激小缴既您解溜摭狼源联足㈱然阴幽撅限㈱

ds:0000CD20PB9F加9AF0FE=JfU=lss6E?2

ds:0008IDFB320B88080F0?-2盘6,ss:0000>6F4D

ds:HH10DB05560140H4BE05ss:FFFE0伽

ds:的IB010101000204FFFFG0Q©♦,/ss:FFFCHB88

ds:H020FFFFFFFFFFFFFFFFyyyyyyyyss:FFFA舶95

£

|F1-HelpF2-BkptF3-ModF4-HereF5-ZOORF6-NextF?-TraceF8-StepF9-Run

⑶段间直接寻址

段间转移,指令中直接提供目标地址的段基址和偏移

地址,所以,只要用指令中指定的偏移地址取代IP寄存器的

内容,用指令中指定的段基址取代CS寄存器的内容就完成

了从一个段到另一个段的转移操作。指令格式为:

JMPFARPTRNEXT

"CouandProipt-IDHU

FileEditUie」RunBreakpointsDataOptionsUindow

]=CPUP?ntiunPro==

aX册0c=lf

rcs:0000kB8CB0BFIOUax,瞅BAu

IX的0z=lf

cs:00038ED8novds,axDu

cX朋0s=Q

cs:00058E1E0000novds」Q硼】Iu

J册0n

uXo=u

cs:硼9EA00NCF0Bjnp0BCF:朋朋

明0

s«p=Q

cs:000E66BB00000100nou加网肛朋的1u

的0

I1a=

cs:0014678B040Bnovaxjebx+ecx]Id

的0

Ip!=

cs:00188C1E020Bnou【册02],dsD0!

sp的Js

cs:N!CB8CMBnouax.ABCD1BQ

J册

us

cs:001FBB6705novbx,056?IBB

cs:N222BC3subax,bxICsBB

Ss

cs:0024B44Cnovah,4cICBCC

cs:0B26CD21int211sBC0

cs:00283E9Cpushfds:11—p

cs:002A2?daa

cs:N2B007403add【siMLdhJ

(4)段间间接寻址

用存储器中两个相继字的内容来取代IP和CS寄存器中的

原始内容,以达到段间转移的目的。存储单元的地址是由指

令指定除立即数方式和寄存器方式以外的任何一种数据寻址

方式取得。指令格式为:

JMPDWORDPTR[BX]

式窗令提示符-IDHDQIK

三EditQigwRun[reakpointsDataOptionsWindowHei]

Ft1=CPUP?ntiimPro-

c=0

cs:0000bB88D1?novax,178Dax0000z

cs:00038ED8novds,axbx0000s=0

cs:0005BB0000noubx,0000ex0000o=0

cs:0008FF2Fjnpfar[bxlIdx0000p=-00

cs:000AB44CDOUah,M1si0000-0

a=

cs:000cCD21int21di0000i=1

cs:000E3486xoraL86|bp0000d=0

cs:00103486xoraL86Isp0000

cs:001234?CxoraL7C1ds177D

cs:00143450xoraL501es17?D

cs:001651pushexss178D

cs:001752pushdx1cs178E

cs:001853pushbx|ip0000

cs:001954pushsp1

cs:001A55push

懒雌K懒疝蒯l时仙前

ds:0000CD20FB9FM9AF0FE=JfU=lss:00020000

ds:0008IDF0320B46140F07后2伸瞩•ss:0000卜0000

ds:00109B115601870?7E11网聊ss:FFFE0000

ds:0018010101000204FFFF@00B♦/ss:FFFC0000

ds:0020FFFFFFFFFFFFFFFFyyyyyyyyss:FFFfi0000

i-HelpF2-BkptF3-ModF4-HereF5-ZoonF6-NextF7-TraceF8-StepF9-RunF10-Menu

•程序框架,486

DATASEGMENT十

;此处定义变量

DATAENDS------

CODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:DATA

START:MOVAX,DATA

MOVDS,AX;设置数据段

MOVES,AX;设置附加段

;此处添加自己的代码

PRO_END:

MOVAH,4CH;设置功能号

INT21H;返回DOS

CODEENDS

ENDSTART

•变量定义

,486

DATASEGMENTMOVBX,Y1

MOVCX,DS:[01H]

VAR_XDB0;字节型

MOVDX,ES:[03H]

Y1DW12H;字型

ZDDOABH;双字型PRO_END:

MOVAH,4CH

WDB?;?不初始化INT21H

ARYDB0,1,5DUP(2);DUP重复定义CODEENDS

ENDSTART

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,ES:DATA

START:MOVAX,DATA

MOVDS,AX

MOVES,AX

■」=CPUPentiumPro=aXoooo

cs:0000kB8c40B_____mov_____ax,0BC4^_________▲bXoooozo

cs:00038ED8movds,ax-

屐UcXoooos-o

cs:00058EC0moves,<3X、、、

xv»dXooooo=o

cs:00078B1E0100movbx,[ooor、<、«、ioooo

»>s-p=o

cs:000B8B0E0100movex,■0001;<«d1ooooa-o

cs:000F268B160300movdx,€ss:[0003]簇ooo-

溶bpoi1

cs:0014B44Cmovah,4C俄ooo=

湖spodo

cs:0016CD21int21常

*dsoBB4

cs:0018F8clc您

>»esoBB4

(二簇

cs:001926390Fempes::bx],X>>>ssoBc4

cs:001C7575jne0093辎csoBc5

cs:001EC7069C270000movworeJptr[279C]ipooo0

cs:00248BD9movbx,(二XD

.\\%V.%V»,.*A\V.%Vb%*A%V.%CV.%DV.%Vt%2V.\V.0%V.%%^F%VB.%V.%V9.%VF.%'WV%0V^SVob%%^%Vt%V.%V.%1A%M.%^S\VliSV.%\%SV.%Vb%V.%Vli%V.\VU%%\%V.%

lDF0320B769AF0FE=VjUE

ds:0008e3o556011c08OF07-三

ds:0010o1o1o10o0204A605|-+V©L4a+SS:0002ABOO

ds:001804FFFF©©©ss:0000k1200

第二节80486微处理器指令系统

80X86的指令系统向上兼容,都是在8086指令的基础上发展形

成的。与80286相比,增加了32位操作和访问存储器的32位寻址方

式。

80486可以工作在实模式、保护模式和虚拟8086模式,为了支

持系统工作模式,指令系统中设计了系统管理指令、保护模式控制

指令以及高级语言支持指令等等。

80486的基本指令按功能可分为7类:数据传送指令、算术运算

指令、逻辑运算指令、字符串操作指令、控制转移指令、处理器控

制指令和按条件设置字节指令。下面分别给予介绍。

一、数据传送指令

1)通用数据传送指令:

完成数据的传送工作,不影响任何标志。

基本传送指令MOV

格式:MOV0P1,OP2

/,

目的操作数源操作数

功能:0P1-0P2

可完成:

寄存器一寄存器寄存器一存储器寄存器

立即数

段寄存器一寄存器段寄存器-存储器存储器

注意:目的操作数不能是CS!

符号扩展传送指令MOVSX

格式:MOVSX0P1,0P2;0P1为16/32位寄存器

0P2为8/16位寄存器或存储器

例如:MOVDH,-16;DH=F0H

MOVSXBX,DH;BX=FFF0H

零扩展传送指令MOVZX

格式:MOVZX0P1,OP2;0P1为16位或32位寄存器

0P2为8位或16位寄存器或存储器

例如:MOVDL,OFOH

MOVZXBX,DL;BX=00F0H

除法运算时,常用MOVSX和MOVZX这两条指令扩展被除数位数。

交换指令XCHG

格式:XCHG0P1,OP2

功能:0P1-——-OP2

可完成:

寄存器<——>寄存器寄存器——>存储器

例:XCHGAX,BX;AX——BX

地址传送指令LEA

格式:LEAREG,OP2

功能:将0P2的有效地址EA送往寄存器。

例:LEABX,VAR、

»等价

MOVBX,OFFSETVARJ

MOVBX,SEGVAR;将(^2的段基址送往寄存器

.486

DATASEGMENT

VAR_XDB

Y1DW12H

ZDDOABH

WDB?

ARYDB0,1,DUP(2)

DATAENDS

LEASI,Y1;SI=0001H

LEADI,Z;DI=0003H

LEABX,ARY;BX=0008H

MOVAL,[SI];AL=12H

MOVCX,[BX+1];CX=0201H

=CPUPentiumPro

c-O

cs:0000B8C40Bmovax,0BC4ax0BC4

z=O

cs:00038ED8movds,axbx0000

s=O

cs:00058EC0moves,axex0000

o-O

cs:0007kBE0100movsi,0001dx0000

p-O

cs:000ABF0300movdi,0003si0000O

a-

cs:000DBB0800movbx,0008di00001

i=

cs:00108A04moval,[si]bp0000dO

-

cs:00128B4F01movex,[bx+01]sp0000

cs:0015BAC40Bmovdx,0BC4ds0BC4

cs:0018B44Cmovah,4Ces0BC4

cs:001ACD21int21ss0BC4

cs:001C7575jne0093cs0BC5

cs:001EC7069C270000movwordptr[279C],叩OUUZ

ds:0000001200AB00000000I%

ds:00080001020202020200

dS:0010B8C4OB8ED88ECOBE]YA=|=A3ss:0002AB00

ds:00180100BF0300BB0800◎[,曲ss:0000kl200

尔尔尔尔尔尔尔尔溶溶尔溶溶尔溶尔溶尔尔尔溶溶溶溶尔尔尔小必〉也游:都...既...好...和.蚣既既蚣爆尔:

海布•;;;・;•;•;・;・;•;•;•;・;・;・;・;•”;•;•;;;•;隅;隅•;•;・;•;・;•;•;•;・;•;•;・;;隅;•;•;・;•;•;•;;;•4衿常冶冶衿衿冶;;;;”;.;;..;;..;.;.;.;一;;冶——;

.486

DATASEGMENT

VAR_XDB0

Y1DW12H

ZDDOABH

wDB9

ARYDB0,1,DUP(2)

DATAENDS

LEASI,Y1;SI=0001H

LEADI,Z;DI=0003H

LEABX,ARY;BX=0008H

MOVAL,[SI];AL=12H

MOVCX,[BX+1];CX=0201H

MOVDX,SEGY1;DX=0BC4H

查表转换指令XLAT

格式:XLAT;将[8乂+人口-----AL

查表:表首偏移地址+索引值x每条记录所占字节数

AL1

使用XLAT指令的条件:•在数据段中建一张表

•表首地址送BX

•待转换数放入AL中

例:用查表方法,计算十进制数。〜9的平方。

SQR_TABDB0,1,4,9,16,25,36,49,64,81

MOVBX,OFFSETSQR.TAB;表首地址-BX

MOVAL,4;取待转换数

XLAT;转换结果-AL

2)堆栈指令

压栈/弹栈指令PUSH/POP

格式:PUSH0P1;OP1可是16位或32位的寄存器、存储器

POP0P1操作数或立即数

全部通用寄存器内容压栈和弹栈指令

格式:PUSHA将所有16位寄存器压栈,顺序为:

AX、CX、DX、BX、SP、BP、SI、DIo

格式:POPA将堆栈中的数据弹给16位寄存器,顺序

与压栈指令相反。

格式:PUSHAD将所有32位寄存器压栈,顺序为:

EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDIo

格式:POPAD将堆栈中的数据弹给32位寄存器,顺序

与压栈指令相反。

如:AX=0011H,SP=0080H

PUSHAX

执行后有:

AX=0011H,SP=007EH

2007EH

20080H

SP=007EH,

POPBX

执行后有:

2007EH

20080H

SP=007EH,

POPBX

执行后有:

BX=0011H,SP=0080H

SP20080H

3)1/0指令IN/OUT

输入格式:INAL,PORT;(PORT)-AL

INAX,PORT

INEAX,PORT

输出格式:OUTPORT,AL/AX/EAX;AL/AX/EAX-(PORT)

•直接寻址的I/0指令

INAL,9FH

OUTSOH,AL

•DX间址的I/O指令

MOVDX,310H

INAL,DX

二、算术运算类指令

1)基本四则运算

加/减法指令ADD/SUB

ADD

0P1,OP2;0P1<——0P1+0P2

SUB

例:ADDAL,BL»&AL=17H,BL=09H,CF=1,则指令执行后

AL=20HBL=09HCF=0SF=0ZF=0

带进/借位加/减法指令ADC/SBB

ADC

,0P1,OP2;0P1<——0P1±0P2±CF

SBB

例:ADCDL,BL»&DL=17H,BL=09H,CF=1,则指令执行后

DL=21HBL=09HCF=0SF=0ZF=0

OPK0P2不能同时为存储器操作数,0P1不能是立即数。

该类指令要影响所有状态标志。

加1/减1指令INC/DEC

格式:INCOPl;0P1-0P1±1

DEC

该类指令不影响CF标志

例:INCCX

执行前:CX=1234H,CF=1;执行后:CX=1235HCF=1

求补指令NEG

格式:NEG0P1;OPl<-0-OPl

交换加法指令XADD

格式:XADDOPl,0P2;0P2—OPl

OPl—OPl+0P2

例:MOVBL,12H程序执行后:

MOVBH,34HBH=46H

XADDBH,BLBL=34H

比较指令CMP

格式:CMP0P1,OP2;0P1-0P2

该指令不保存结果,只影响标志。

比较并交换指令CMPXCHG

格式:CMPXCHG0P1,OP2

功能:0P1-AL(AX/EAX)

若ZF=1,0P1—OP2

若ZF=0,AL(AX/EAX)—0P1

无符号数乘法指令MUL

格式:MUL0P1

妇T果

功能:AL(AX/EAX)xOPl---->AX(DX:AX/EDX:EAX)

如:MULSI;AXxSI---->DX:AX

例:试编制出实现Z=128x8的程序段。

MOVAL,128

MOVBL,8

MULBL

MOVZ,AX

该程序段执行后:Z=0400H

MOVAL,128

MUL

R命令提示符________________________________________________________________________________________________________

MicrosoftWindowsXP[version5

(c)copyright1985-2001MicrosoftCorp.

c:\Documentsandsettings\huqing>CD\

C:\>CDTASM\BIN

C:\TASM\BIN>TASM32HUQING

TurboAssemblerVersion5.0Copyright(c)1988,1996

Assemblingfile:HUQING.ASM

*Warning*HUQING.ASM(15)Argumentneedstypeoverride

**Error**HUQING.ASM(15)illegalimmediate

Errormessages:1

warningmessages:1

Passes:1

带符号数乘法指令IMUL(有三种形式):

•IMUL0P1

经生AX(DX:AX/EDX:EAX)

功能:AL(AX/EAX)xOPl

•IMUL0P1,0P2;OPK0P2可为16位或32位的寄

存器或存储器操作数。

0P2可以是立即数

功能:0P1xOP20P1;注意:当结果超过16位或32

位时,高位自然丢失,此时,

CF=1,OF=1o

•IMUL0P1,0P2,OP3

妇T果

功能:0P2XQP3—»0P1;注意:OPK0P2同上;

OP3必须是立即数。

例:MOVAL,-2

MOVBL,2

IMULBL;AX=FFFCH

MOVCX,6

MOVBX,8

IMULex,BX;ex=0030H

MOVDX,3

IMULBX,DX,3;BX=0009H

MOVDX,OFFFDH

IMULBX,DX,3;BX=FFF7H

除法指令DIV/IDIV

格式:DIV0P1IDIV0P1

商AL(AX;EAX)

功能:AX(DX:AX,EDX:EAX)+OP1A

余数AH(DX;EDX)

若除数为0或商过大(对应累加器中放不下)时,产生0号中断。

符号位扩展指令

格式:CBW;AL-AXCM;AX->DX:AX

CME;AX-EAXCDQ;EAX-EDX:EAX

例:字型变量A除以B,商存入BUF单元,设A,B均为带符号数。

MOVAX,A;取被除数

CW;扩充为32位

IDIVB

MOVBUF,AX;送商

2)十进制调整指令

・组合BCD码

计算机内部使用的是二进制,而人们在现实生活中大多使用十

进制,为了方便用户,人们用二进制编码来表示十进制。

组合BCD码就是用4位二进制来表示1位十进制数。

例:将十进制数123转换成相应的组合BCD码

123d——000100100011b123H

•分离BCD码

分离BCD码就是用8位二进制来表示1位十进制数。

例:将十进制数123转换成相应的分离BCD码

123d——000000010000001000000011b

010203H

①对加/减法进行调整的原理

例:69H92H49H

十29H十85H十78H

92H117HC1H

十06H十60H十66H

98H177H127H

②调整的依据(以组合BCD码为例)

•CF=AF=0且AL中高、低半字节数字码均合法,不修正。

•AF=1或AL低半字节出现非法码(A〜F)时,对AL加/减06H进行修正。

•CF=1或AL的高半字节出现非法码(A~F)时,对AL加/减60H进行修正。

•AF=CF=1,或AF=1且AL的高半字节出现非法码(A〜F)时,或者CF=1

且AL的低半字节出现非法码,力口/减66H进行修正。

③指令格式及功能

DAA、DAS组合BCD码的加、减十进制调整指令,该指令仅对

AL的内容进行调整,结果仍存于AL中。

AAA、AAS分离BCD码的加、减十进制调整指令,将AL中的内容

调整后送AH、ALO

AAM对两个分离BCD码的的乘积进行调整(仅对AL的内容),

结果存入AH、AL中(仅对无符号数有效)。

AAD对AX中的被除数(分离BCD形式)进行调整,

然后再执行DIV指令,所得结果为分离BCD码。

例:MOVAL,08H

ADDAL,09H;AL=11HCF=0AF=1

DAA

结果:AL=17H

例:Z=4*8,要求Z中存放的是分离BCD码。

ZDW0

I

I

I

MOVAL,04H;乘数和被乘数必须都是分离BCD码

MOVBL,08H

MULBL

AAM;将AX中的运算结果调整成分离BCD码

MOVZ,AX;Z=0302H

三、逻辑运算指令和移位指令

1)逻辑运算指令

逻辑与、或、异或、测试指令(AND、OR、XOR、TEST)

格式:AND'A

OR0P1,0P2;0P1yV>op2-►0P1

XOR©

TEST0P1,OP2;0P1AOP2

OPKOP2均可为寄存器、存储器操作数,0P2也可是立即数。

该类指令固定使CF为0,并根据运算结果影响其他状态标志。

逻辑非指令NOT

格式:NOT0P1;0P1<-0Pl

例:说明以下指令的功能。

ANDAL,OFEH;AL寄存器的DO位清零

ORAL,01H;AL寄存器的DO位置1

XORAL,SOH;AL寄存器的D7位求反

MOVAL,35H

ANDAL,OFH;AL=05H

MOVCL,09H

ORCL,OFOH;CL=F9H

MOVBL,78H

XORBL,OFOH;BL=88H

2)移位指令

算术左移SAL

①左移指令格式:0P1,OP2

逻辑左移SHL

功能:

OP1可为8位、16位或32位的寄存器、存储器操作数。

0P2为移位次数,可用立即数或CL表示。

②右移指令格式:算术右移SAR

0P1,0P2

逻辑右移SHR

功能:

SARAL,1

SHRAL,1

486

CODESEGMENT

ASSUMECS:CODE

START:MOVAL,OFFH;AL=1111HUB

SALAL,4;算术左移AL=11110000B

MOVAL,80H;AL=10000000B

SARAL,4;算术右移AL=11111000B

MOVAL,OFFH;AL=1111HUB

SHLAL,4;逻辑左移AL=11110000B

MOVAL,SOH;AL=10000000B

SHRAL,4;逻辑右移AL=00001000B

④循环左移指令ROL/RCL

格式:ROL/RCL0P1,0P2

功能:——CF1—D7-----------------DO-

RCLROL

⑤循环右移指令ROR/RCR

格式:ROR/RCR0P1,0P2

RORRCR

0P1可为8位、16位或32位的寄存器、存储器操作数。

温馨提示

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

评论

0/150

提交评论