汇编常用命令.docx

上传人:b****5 文档编号:5327856 上传时间:2022-12-15 格式:DOCX 页数:29 大小:27.38KB
下载 相关 举报
汇编常用命令.docx_第1页
第1页 / 共29页
汇编常用命令.docx_第2页
第2页 / 共29页
汇编常用命令.docx_第3页
第3页 / 共29页
汇编常用命令.docx_第4页
第4页 / 共29页
汇编常用命令.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

汇编常用命令.docx

《汇编常用命令.docx》由会员分享,可在线阅读,更多相关《汇编常用命令.docx(29页珍藏版)》请在冰豆网上搜索。

汇编常用命令.docx

汇编常用命令

常用命令

数据传送指令

一通用数据传送指令

指令

英文全拼

翻译

MOV

Move

传送

PUSH

Pushontothestack

进栈

POP

Popfromthestack

出栈

XCHG

Exchange

交换

MOV指令为双操作数指令,两个操作数中不能全为内存操作数

格式:

MOVDST,SRC

执行操作:

dst=src

注:

1.目的数可以是通用寄存器,存储单元和段寄存器(但不允许用CS段寄存器).

2.立即数不能直接送段寄存器

3.不允许在两个存储单元直接传送数据

4.不允许在两个段寄存器间直接传送信息

PUSH入栈指令及POP出栈指令:

堆栈操作是以“后进先出”的方式进行数据操作。

格式:

PUSHSRC//Word

执行操作:

(SP)<-(SP)-2

((SP)+1,(SP))<-(SRC)

注:

1.入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器。

2.入栈时高位字节先入栈,低位字节后入栈。

格式:

POPDST//Word

执行操作:

(DST)<-((SP+1),(SP))

(SP)<-(SP)+2

注:

1.出栈操作数除不允许用立即数和CS段寄存器外,可以为通用寄存器,段寄存器和存储器。

2.执行POPSS指令后,堆栈区在存储区的位置要改变。

3.执行POPSP指令后,栈顶的位置要改变。

XCHG(eXCHanG)交换指令:

将两操作数值交换。

格式:

XCHGOPR1,OPR2//Byte/Word

执行的操作:

(OPR1)<-->(OPR2)

注:

1.必须有一个操作数是在寄存器中

2.不能与段寄存器交换数据

存储器与存储器之间不能交换数据。

二累加器专用传送指令

指令

英文全拼

翻译

IN

Input

输入

OUT

Output

输出

XLAT

Translate

换码

IN输入指令

长格式为:

INAL,PORT(字节)

INAX,PORT(字)

执行的操作:

(AL)<-(PORT)(字节)

(AX)<-(PORT+1,PORT)(字)

短格式为:

INAL,DX(字节)

INAX,DX(字)

OUT输出指令

长格式为:

OUTPORT,AL(字节)

OUTPORT,AX(字)

执行的操作:

(PORT)<-(AL)(字节)

(PORT+1,PORT)<-(AX)(字)

短格式为:

OUTDX,AL(字节)

OUTDX,AX(字)

执行的操作:

((DX))<-(AL)(字节)

((DX)+1,(DX))<-AX(字)

XLAT(TRANSLATE)换码指令:

把一种代码转换为另一种代码。

格式:

XLAT(OPR可选)//Byte

执行操作:

(AL)<-((BX)+(AL))

注:

指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码。

三有效地址送寄存器指令

指令

英文全拼

翻译

LEA

Loadeffectiveaddress

有效地址送寄存器

LDS

LoadDSwithPointer

指针送寄存器和DS

LES

LoadESwithPointer

指针送寄存器和ES

LEA(LoadEffectiveAddress):

有效地址传送寄存器指令

格式:

LEAREG,SRC//指令把源操作数SRC的有效地址送到指定的寄存器中。

执行操作:

(REG)<-SRC

注:

1.SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器

2.MOVBX,OFFSETOPER_ONE等价于LEABX,OPER_ONE

3.MOVSP,[BX]//将BX间接寻址的相继的二个存储单元的内容送入SP中

4.LEASP,[BX]//将BX的内容作为存储器有效地址送入SP中

LDS(LoadDSwithpointer):

指针送寄存器和DS指令

格式:

LDSREG,SRC//常指定SI寄存器。

执行的操作:

(REG)<-(SRC)

(DS)<-(SRC+2)

注:

把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中。

该指令常指定SI寄存器。

LES(LoadESwithpointer)指针送寄存器和ES指令

格式:

LESREG,SRC//常指定DI寄存器

执行的操作:

(REG)<-(SRC)

(ES)<-(SRC+2)//与LDS大致相同,不同之处是将ES代替DS而已。

注:

把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中。

该指令常指定DI寄存器。

四标志寄存器传送指令

指令

英文全拼

翻译

LAHF

LoadAHwithflags

标志送AH

SAHF

storeAHintoflags

AH送标志寄存器

PUSHF

pushtheflags

标志进栈

POPF

poptheflags

标志出栈

LAHF(LoadAHwithFlags)

标志位送AH指令

格式:

LAHF......

执行操作:

(AH)<-(PWS的低字节)

注:

将PSW寄存器中的低8位的状态标志(条件码)送入AH的相应位,SF送D7位,ZF送D6位

SAHF(StoreAHintoFlags)

AH送标志寄存器指令

格式:

SAHF

执行操作:

(PWS的低字节)<-(AH)

注:

将AH寄存器的相应位送到PSW寄存器的低8位的相应位,AH的D7位送SF,D6位送ZF。

PUSHF(PUSHtheFlags)

标志进栈指令

格式:

PUSHF

执行操作:

(SP)<-(SP)-2

SP=SP-1,(SP)=PSW的高8位,SP=SP-1,(SP)=PSW的低8位

注:

将标志寄存器的值压入堆栈顶部,同时栈指针SP值减2

POPF(POPtheFlags)

标志出栈指令

格式:

POPF

执行操作:

(PWS)<-((SP)+1,(SP))

(SP)<-(SP+2)

PSW低8位=(SP),SP=SP+1,PSW高8位=(SP),SP=SP+1

注:

与PUSHF相反,从堆栈的顶部弹出两个字节送到PSW寄存器中,同时堆栈指针值加2

算术指令

一加法指令

指令

英文全拼

翻译

ADD

add

加法

ADC

addwithcarry

带进位加法

INC

increment

加1

ADD(ADD)加法指令

格式:

ADDDST,SRC//Byte/Word

执行操作:

(DST)<-(SRC)+(DST)

注:

1.两个存储器操作数不能通过ADD指令直接相加,即DST和SRC必须有一个是通用寄存器操作数。

2.段寄存器不能作为SRC和DST.

3.影响标志位AuxiliaryCrrayFlag,CarryFlag,OverflowFlag,ParityFlag,SignFlag和ZeroFlag,如下所示:

CF根据最高有效位是否有进(借)位设置的:

有进(借)位时CF=1,无进(借)位时CF=0.

OF根据操作数的符号及其变化来设置的:

若两个操作数的符号相同,而结果的符号与之相反时OF=1,否则为0.

ZF根据结果来设置:

不等于0时ZF=0,等于0时ZF=1

SF根据结果的最高位来设置:

最高位为0,则SF=0.

AF根据相加时D3是否向D4进(借)位来设置:

有进(借)位时AF=1,无进(借)位时AF=0

PF根据结果的1的个数时否为奇数来设置:

1的个数为奇数时PF=0,为偶数时PF=1

ADC(ADdwithCarry)带进位加法指令

格式:

ADCDST,SRC//Byte/Word

执行操作:

(DST)<-(SRC)+(DST)+CF

注:

与ADD不同之处是还要加上进位标志位的值。

INC(INCrement)加1指令

格式:

INCOPR//Byte/Word

执行操作:

(OPR)<-(OPR)+1

注:

1.OPR可以是寄存器和存储器操作数,但不能是立即数和段寄存器

2.影响标志位OF,SF,ZF,PF和AF,不影响CF.

二减法指令

指令

英文全拼

翻译

SUB

subtract

减法

SBB

subtractwithborrow

带借位减法

DEC

Decrement

减1

NEG

Negate

求补

CMP

Compare

比较

SUB(SUBtract)不带借位的减法指令

格式:

SUBDST,SRC//Byte/Word

执行操作:

(DST)<-(DST)-(SRC)

注:

1.DST和SRC寻址方式及规定与ADD相同。

2.影响全部标志位。

(判断标志位参见ADD)

SBB(SuBtractwithBorrow)带借位减法指令

格式:

SBBDST,SRC//Byte/Word

执行操作:

(DST)<-(DST)-(SRC)-CF

DEC(DECrement)减1指令

格式:

DECOPR//Byte/Word

执行操作:

(OPR)<-(OPR)-1//除CF标志位,其余标志位都受影响。

NEG(NEGate)求补指令

格式:

NEGOPR

执行操作:

(OPR)<--(OPR)//将操作数按位求反后末位加1.

CMP(CoMPare)比较指令

格式:

CMPOPR1,OPR2

执行操作:

(OPR1)-(OPR2)//与SUB指令一样执行运算,但不保存结果。

注:

该指令与SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志。

比较情况

无符号数

有符号数

A=B

ZF=1

ZF=1

A>B

CF=0&&ZF=0

SF^OF=0&&ZF=0

A

CF=1&&ZF=0

SF^OF=1&&ZF=0

A>=B

CF=0||ZF=1

SF^OF=0||ZF=1

A<=B

CF=1||ZF=1

SF^OF=1||ZF=1

三乘法指令

指令

英文全拼

翻译

MUL

UnsignedMultiple

无符号数乘法

IMUL

SignedMultiple

带符号数乘法

MUL(unsignedMULtiple)无符号数乘法指令

格式:

MULSRC//Byte/Word.

执行操作:

字操作:

(AX)<-(AL)*(SRC)//字节运算时目的操作数用AL,乘积放在AX中

字节操作:

(DX,AX)<-(AX)*(SRC)//字运算时目的操作数用AX,DX存放乘积的高位字,AX放乘积的低位字

注:

1.目的数必须是累加器AX或AL,指令中不需写出

源操作数SRC可以是通用寄存器和各种寻址方式的存储器操作数,而绝对不允许是立即数或段寄存器。

IMUL(sIgnedMULtiple)有符号数乘法指令

格式:

IMULSRC//与MUL指令相同,但必须是带符号数

四除法指令

指令

英文全拼

翻译

DIV

Unsigneddivide

无符号数除法

IDIV

Signeddivide

带符号数除法

CBW

Convertbytetoword

字节转换为字

CWD

Contertwordtodoubleword

字转换为双字

DIV(unsignedDIVide)无符号数除法指令

格式:

DIVSRC//Byte/Word其中:

SRC的规定同乘法指令MUL

执行操作:

字节操作:

(AL)<-(AX)/(SRC)的商

(AH)<-(AX)/(SRC)的余数

字操作:

(AX)<-(DX,AX)/(SRC)的商

(DX)<-(DX,AX)/(SRC)的余数

注:

存储器操作数必须指明数据类型:

BYTEPTRsrc或WORDPTRsrc

IDIV(sIgnedDIVied)有符号数除法指令

格式:

IDIVSRC

执行的操作:

与DIV相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同。

CBW(ConvertBytetoWord)字节转换为字指令

格式:

CBW

执行操作:

AL中的符号位(D7)扩展到8位AH中,若AL中的D7=0,则AH=00H,若AL中的D7=1,则AH=FFH.

CWD(ConvertWordtoDoubleword)字转换为双字指令

格式:

CWD

执行操作:

AX中的符号位(D15)扩展到16位DX中,若AX中的D15=0,则DX=0000H,若AX中的D15=1,则DX=FFFFH

注:

这两条指令都不影响条件码。

逻辑指令

一逻辑运算指令

指令

英文全拼

翻译

AND

and

逻辑与

OR

or

逻辑或

NOT

not

逻辑非

XOR

exclusiveor

异或

TEST

test

测试

AND,OR,XOR和TEST都是双字节操作指令,操作数的寻址方式的规定与算术运算指令相同。

NOT是单字节操作指令,不允许使用立即数。

逻辑运算均是按位进行操作,真值表如下:

AND(位与&)

OR(位或|)

XOR(位异或^)

1&1=1

1|1=1

1^1=0

1&0=0

1|0=1

1^0=1

0&1=0

0|1=1

0^1=1

0&0=0

0|0=0

0^0=0

AND(and)逻辑与指令

格式:

ANDDST,SRC//Byte/Word

执行操作:

(DST)<-(DST)^(SRC)

注:

1.AND指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位。

2.AND指令典型用法A:

用于屏蔽某些位,即使某些位为0.

例子:

屏蔽AL的高4位:

即将高4位和0000B相与,低4位和1111B相与

MOVAL,39H//AL=00111001B[39H]

ADDAL,0FH//AL=00001001B[09H]即00111001B[39H]&00001111B[0FH]=00001001B[09H]

AND指令典型用法B:

取出某一位的值(见TEST)

OR(or)逻辑或指令

格式:

ORDST,SRC//Byte/Word

执行操作:

(DST)<-(DST)|(SRC)

注:

1.OR指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位。

2.常用于将某些位置1.

例子:

将AL的第5位置1:

MOVAL,4AH//AL=01001010B[4AH]

ORAL,10H//AL=01011010B[5AH]即01001010B[4AH]|00010000B[10H]=01011010B[5AH]

XOR(eXclusiveOR)逻辑异或指令

格式:

XORDST,SRC//Byte/Word

执行操作:

(DST)<-(DST)^(SRC)

注:

1.XOR指令常用于使某个操作数清零,同时使CF=0,清除进位标志。

2.XOR指令使某些位维持不变则与'0'相异或,若要使某些位取反则与'1'相异或。

例子:

将AL的高4位维持不变,低4位取反:

MOVAL,B8H//AL=10111000B[B8H]

XORAL,0FH//AL=10110111B[B7H]即10111000B[B8H]^00001111[0FH]=10110111B[B7H]

例子:

测试某一个操作数是否与另一确定操作数相等:

XORAX,042EH

JZ....//如果AX==042EH,则ZF=TRUE

(1),执行JZ...

NOT(not)逻辑非指令

格式:

NOTOPR//Byte/Word

执行操作:

(OPR)<~(OPR)//~01100101[65H]=10011010[9AH]

1.操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数。

2.NOT指令不影响任何标志位。

例子:

将AL各位取反:

MOVAL,65H//AL=01100101B[65H]

NOTAL//AL=10011010B[9AH]即~01100101B[65H]=10011010B[9AH]

TEST(test)指令

格式:

TESTOPR1,OPR2//Byte/Word

执行操作:

opr1&opr2

注:

1.两个操作数相与的结果不保存,结果影响标志位PF,SF和ZF,使CF=0,OF=0,而AF位无定义。

2.TEST指令常用于在不改变原有的操作数的情况下,检测某一位或某几位的条件是否满足。

只要令用来测试的操作数对应检测位为1,其余位为0,相与后判断零标志ZF值的真假。

例:

检测某位是否为1:

令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则JNZ...

TESTAL,000000001B//测试AL最低位是否为1:

:

令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令

JNZTHER //最低位若为1,则ZF=FALSE(0),执行JNZTHER,否则执行下一条指令。

或者:

先对操作数求反,令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则JZ...

MOVDL,AL//将AL传送到DL,主要是不要影响AL的值。

以下测试AL的b2位是否为1

NOTDL//先对操作数求反

TEST00000100B//令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令

JZTHER//若AL的b2位为1,则ZF=TRUE

(1),执行JZTHER

B:

移位指令[所有的移位指令都影响标志位CF、OF、PF、SF和ZF、AF无定义。

]

非循环逻辑移位:

把操作数看成无符数来进行移位。

移位指令

指令

英文全拼

翻译

SHL

shiftlogicalleft

逻辑左移

SAL

shiftarithmeticleft

算术左移

SHR

shiftlogicalright

逻辑右移

SAR

shiftarithmeticright

算术右移

ROL

Rotateleft

循环左移

ROR

Rotateright

循环右移

RCL

Rotateleftthroughcarry

带进位循环左移

RCR

Rotaterightthroughcarry

带进位循环右移

SHL(SHiftlogicalLeft)逻辑左移指令

格式:

SHLOPR,CNT//Byte/Word

执行操作:

使OPR左移CNT位,并使最低CNT位为全0.

1.OPR操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数。

2.移位次数由CNT决定。

每次将OPR的最高位移出并移到CF,最低位补0.

MOVCL,7//若移位多次,先预置移位次数CL

SHLDX,CL//CNT可取1或CL寄存器操作数

SHR(SHiftlogicalRight)逻辑右移指令

格式:

SHROPR,CNT//Byte/Word

执行操作:

同SHL,每次将OPR的最低位D0移出并移到CF.最高位补0.

非循环算术移位:

将操作数看成有符号数来进行移位。

SAL(ShiftArithmeticLeft)算术左移指令

格式:

SALOPR,CNT//Byte/Word

执行操作:

SAL指令与SHL指令完全相同

SAR(ShiftArithmeticRight)算术右移指令

格式:

SAROPR,CNT//Byte/Word

执行操作:

SAR指令每次移位时,将最高位移入次高位的同时最高位值不变,最低位D0移出并移到CF.

循环移位指令

ROL(ROtateLeft)循环左移指令

格式:

ROLOPR,CNT//Byte/Word

执行操作:

每次移位时,最高位移出并同时移到CF和最低位D0.

ROR(ROtateRight)循环右移指令

格式:

ROROPR,CNT//Byte/Word

执行操作:

每次移位时,最低位D0移出并同时移到CF和最高位。

带进位循环移位指令

RCL(RotateLeftthroughCarry)带进位循环左移指令

格式:

RCLOPR,CNT//Byte/Word

RCR(RotateRightthroughCarry)带进位循环右移指令

格式:

RCROPR,CNT//Byte/Word

串处理指令

一与REP相配合工作的MOVS,STOS和LODS指令

指令

英文全拼

翻译

REP

repeat

重复操作

MOVS

MOVeString

串传送指令

STOS

STOreintoString

存入串指令

LODS

LOaDfromString

从串取指令

CLD

Cleardirectionflag

使地址自动增量

STD

Setdirectionflag

使地址自动减量

REP(REPeat)重复操作前缀

格式:

REPStringPrimitive

执行的操作:

1)如(CX)=0则退出REP,否则往下执行。

2)(CX)<-(CX)-1

3)执行其中的串操作

4)重复1)~3)

注:

其中StringPrimitive可为MOVS,LODS或STOS指令

.MOVS串传送指令

格式:

MOVSES:

BYTEPTR[DI],DS:

[SI]

可有三种

MOVSDST,SRC

MOVSB//字节串传送DF=0,SI=SI+1,DI=DI+1;DF=1,SI=SI-1,DI=DI

MOVSW//字串传送DF=0,SI=SI+2,DI=DI+2;DF=1,SI=SI-2,DI=DI-2

MOVSD//双字串传送DF=0,SI=SI+4,DI=DI+4;DF=1,SI=SI-4,DI=DI-4

MOVSX//符号传送

MOVZX//零传送

执行的操作:

1)如(CX)=0则退出REP,否则往下执行。

2)(CX)<-(CX)-1

3)执行其中的串操作

4)重复1)~3)

.MOVS串传送指令

注:

当方向标志DF=1时用,其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是字节操作,例如:

1)((DI))<-((SI))

2)字节操作:

(SI)<-(SI)+(或-)1,(DI)<-(DI)+(或-)1//当方向标志DF=0时用

3)字操作:

(SI)<-(SI)+(或-)2,(DI)<-(DI)+(或-

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

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1