推广 热搜: 缓解疲劳脚垫,  环保防静电桌垫,  63*125气缸  2022  收购ACF  回收ACF  挡煤帘子  济宁推杆  麻将  AH0.6/12矿用按钮箱 

汇编指令大全 、汇编指令大全下载

   日期:2023-04-14     浏览:25    评论:0    
核心提示:汇编语言有符号乘法指令汇编语言有符号乘法指令大全MOV(MOVE)传送指令P28PUSH入栈指令P32POP出栈指令P33XCHG(eXCHanG)交换指令P34XLAT(TRANSLATE)换码指令

汇编语言有符号乘法指令

汇编语言有符号乘法指令大全

MOV(MOVE)

传送指令P28

PUSH

入栈指令P32

POP

出栈指令P33

XCHG(eXCHanG)

交换指令P34

XLAT(TRANSLATE)

换码指令P34

LEA

(Load

Effective

Address)

有效地址送寄存器指令P35

LDS(Load

DS

with

pointer)

指针送寄存器和DS指令P35

LES(Load

ES

with

pointer)

指针送寄存器和ES指令P35

LAHF(Load

AH

with

Flags)

标志位送AH指令P36

SAHF(Store

AH

into

Flgs)

AH送标志寄存器指令P36

PUSHF(PUSH

the

Flags)

标志进栈指令P36

POPF(POP

the

Flags)

标志出栈指令P37

ADD

加法指令P38

ADC

带进位加法指令P39

INC

加1指令P39

SUB(SUBtract)

不带借位的减法指令P40

SBB(SuVtrach

with

borrow)

带借位的减法指令P40

DEC(DECrement)

减1指领P41

NEG(NEGate)

求补指令P41

CMP(CoMPare)

比较指令P42

MUL(unsinged

MULtiple)

无符号数乘法指令P46

IMUL(sIgned

MUL

tiple)

有符号数乘法指令P46

DIV(unsigned

DIVide)

无符号数除法指令P48

IDIV(sIgned

DIVide)

有符号数除法指令P48

CBW(Count

Byte

to

Word)

字节转换为字指令P50

CWD(Count

Word

to

Doble

word)

字转换为双字指令P50

DAA

压缩的BCD码加法十进制调整指令P53

DAS

压缩的BCD码减法十进制调整指令P53

AAA

非压缩的BCD码加法十进制调整指令P54

AAS

非压缩的BCD码加法十进制调整指令P54

AND

逻辑与指令P54

OR

逻辑或指令P55

XOR

逻辑异或指令P56

NOT

逻辑非指令P56

TEST

测试指令P57

SHL(SHift

logical

Letf)

逻辑左移指令P57

SHR(SHift

logical

Right)

逻辑右移指令P57

汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。

求汇编指令大全~

8086/8088指令系统

一、数据传送指令

1.通用数据传送指令

MOV(Move)传送

PUSH(Push onto the stack)进栈

POP(Pop from the stack)出栈

XCHG(Exchange)交换

.MOV 指令

格式为: MOV DST,SRC

执行的操作:(DST)-(SRC)

.PUSH 进栈指令

格式为:PUSH SRC

执行的操作:(SP)-(SP)-2

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

.POP 出栈指令

格式为:POP DST

执行的操作:(DST)-((SP+1),(SP))

(SP)-(SP)+2

.XCHG 交换指令

格式为:XCHG OPR1,OPR2

执行的操作:(OPR1)--(OPR2)

2.累加器专用传送指令

IN(Input) 输入

OUT(Output) 输出

XLAT(Translate) 换码

这组指令只限于使用累加器AX 或AL 传送信息.

.IN 输入指令

长格式为: IN AL,PORT(字节)

IN AX,PORT(字)

执行的操作: (AL)-(PORT)(字节)

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

短格式为: IN AL,DX(字节)

IN AX,DX(字)

执行的操作: AL-((DX))(字节)

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

.OUT 输出指令

长格式为: OUT PORT,AL(字节)

OUT PORT,AX(字)

执行的操作: (PORT)-(AL)(字节)

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

短格式为: OUT DX,AL(字节)

OUT DX,AX(字)

执行的操作: ((DX))-(AL)(字节)

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

在IBM-PC 机里,外部设备最多可有65536个I/O 端口,端口(即外设的端口地址)为

0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此

时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定

端口号,但只限于前256个端口.当端口号=256时,只能使用短格式,此时,必须先把端口号放到

DX 寄存器中(端口号可以从0000到0FFFFH),然后再用IN 或OUT 指令来传送信息.

.XLAT 换码指令

格式为: XLAT OPR

或: XLAT

执行的操作:(AL)-((BX)+(AL))

3.有效地址送寄存器指令

LEA(Load effective address)有效地址送寄存器

LDS(Load DS with Pointer)指针送寄存器和DS

LES(Load ES with Pointer)指针送寄存器和ES

.LEA 有效地址送寄存器

格式为: LEA REG,SRC

执行的操作:(REG)-SRC

指令把源操作数的有效地址送到指定的寄存器中.

.LDS 指针送寄存器和DS 指令

格式为: LDS REG,SRC

执行的操作:(REG)-(SRC)

(DS)-(SRC+2)

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

SI 寄存器.

.LES 指针送寄存器和ES 指令

格式为: LES REG,SRC

执行的操作: (REG)-(SRC)

(ES)-(SRC+2)

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

DI 寄存器.

4.标志寄存器传送指令

LAHF(Load AH with flags)标志送AH

SAHF(store AH into flags)AH 送标志寄存器

PUSHF(push the flags) 标志进栈

POPF(pop the flags) 标志出栈

.LAHF 标志送AH

格式为: LAHF

执行的操作:(AH)-(PWS 的低字节)

.SAHF AH 送标志寄存器

格式为: SAHF

执行的操作:(PWS 的低字节)-(AH)

.PUSHF 标志进栈

格式为: PUSHF

执行的操作:(SP)-(SP)-2

((SP)+1,(SP))-(PSW)

.POPF 标志出栈

格式为: POPF

执行的操作:(PWS)-((SP)+1,(SP))

(SP)-(SP+2)

二、算术指令

1.加法指令

ADD(add)加法

ADC(add with carry)带进位加法

INC(increment)加1

.ADD 加法指令

格式: ADD DST,SRC

执行的操作:(DST)-(SRC)+(DST)

.ADC 带进位加法指令

格式: ADC DST,SRC

执行的操作:(DST)-(SRC)+(DST)+CF

.ADD 加1指令

格式: INC OPR

执行的操作:(OPR)-(OPR)+1

2.减法指令

SUB(subtract)减法

SBB(subtract with borrow)带借位减法

DEC(Decrement)减1

NEG(Negate)求补

CMP(Compare)比较

.SUB 减法指令

格式: SUB DST,SRC

执行的操作:(DST)-(DST)-(SRC)

.SBB 带借位减法指令

格式: SBB DST,SRC

执行的操作:(DST)-(DST)-(SRC)-CF

.DEC 减1指令

格式: DEC OPR

执行的操作:(OPR)-(OPR)-1

.NEG 求补指令

格式: NEG OPR

执行的操作:(OPR)- -(OPR)

.CMP 比较指令

格式: CMP OPR1,OPR2

执行的操作:(OPR1)-(OPR2)

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

球.

3.乘法指令

MUL(Unsigned Multiple)无符号数乘法

IMUL(Signed Multiple)带符号数乘法

.MUL 无符号数乘法指令

格式: MUL SRC

执行的操作:

字节操作数:(AX)-(AL)*(SRC)

字操作数:(DX,AX)-(AX)*(SRC)

.IMUL 带符号数乘法指令

格式: IMUL SRC

执行的操作:与MUL 相同,但必须是带符号数,而MUL 是无符号数.

4.除法指令

DIV(Unsigned divide)无符号数除法

IDIV(Signed divide)带符号数除法

CBW(Convert byte to word)字节转换为字

CWD(Contert word to double word)字转换为双字

.DIV 无符号数除法指令

格式: DIV SRC

执行的操作:

字节操作:(AL)-(AX)/(SRC)的商

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

字操作: (AX)-(DX,AX)/(SRC)的商

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

.IDIV 带符号数除法指令

格式: DIV SRC

执行的操作:与DIV 相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号

与被除数的符号相同.

.CBW 字节转换为字指令

格式: CBW

执行的操作:AL 的内容符号扩展到AH.即如果(AL)的***有效位为0,则(AH)=00;如(AL)的最

高有效位为1,则(AH)=0FFH

.CWD 字转换为双字指令

格式: CWD

执行的操作:AX 的内容符号扩展到DX.即如(AX) 的***有效位为0, 则(DX)=0;否则

(DX)=0FFFFH.

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

三、逻辑指令

1.逻辑运算指令

AND(and) 逻辑与

OR(or) 逻辑或

NOT(not) 逻辑非

XOR(exclusive or)异或

TEST(test) 测试

.AND 逻辑与指令

格式: AND DST,SRC

执行的操作:(DST)-(DST)^(SRC)

.OR 逻辑或指令

格式: OR DST,SRC

执行的操作:(DST)-(DST)V(SRC)

.NOT 逻辑非指令

格式: NOT OPR

执行的操作:(OPR)-(OPR)

.XOR 异或指令

格式: XOR DST,SRC

执行的操作:(DST)-(DST)V(SRC)

.TEST 测试指令

格式: TEST OPR1,OPR2

执行的操作:(DST)^(SRC)

两个操作数相与的结果不保存,只根据其特征置条件码

2.移位指令

SHL(shift logical left) 逻辑左移

SAL(shift arithmetic left) 算术左移

SHR(shift logical right) 逻辑右移

SAR(shift arithmetic right) 算术右移

ROL(Rotate left) 循环左移

ROR(Rotate right) 循环右移

RCL(Rotate left through carry) 带进位循环左移

RCR(Rotate right through carry) 带进位循环右移

格式: SHL OPR,CNT(其余的类似)

其中OPR 可以是除立即数以外的任何寻址方式.移位次数由CNT 决定,CNT 可以是1或CL.

循环移位指令可以改变操作数中所有位的位置;移位指令则常常用来做乘以2除以2操作.

其中算术移位指令适用于带符号数运算,SAL 用来乘2,SAR 用来除以2;而逻辑移位指令则用

来无符号数运算,SHL 用来乘2,SHR 用来除以2.

四、串处理指令

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

.REP 重复串操作直到(CX)=0为上

格式: REP string primitive

其中String Primitive 可为MOVS,LODS 或STOS 指令

执行的操作:

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

2)(CX)-(CX)-1

3)执行其中的串操作

4)重复1)~3)

.MOVS 串传送指令

格式:可有三种

MOVS DST,SRC

MOVSB(字节)

MOVSW(字)

其中第二、三种格式明确地注明是传送字节或字,***种格式则应在操作数中表明是字还是

字节操作,例如:

MOVS ES:BYTE PTR[DI],DS:[SI]

执行的操作:

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

2)字节操作:

(SI)-(SI)+(或-)1,(DI)-(DI)+(或-)1

当方向标志DF=0时用+,当方向标志DF=1时用-

3)字操作:

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

当方向标志DF=0时用+,当方向标志DF=1时用-

该指令不影响条件码.

.CLD(Clear direction flag)该指令使DF=0,在执行串操作指令时可使地址自动增量;

.STD(Set direction flag)该指令使DF=1,在执行串操作指令时可使地址自动减量.

.STOS 存入串指令

格式: STOS DST

STOSB(字节)

STOSW(字)

执行的操作:

字节操作:((DI))-(AL),(DI)-(DI)+-1

字操作: ((DI))-(AX),(DI)-(DI)+-2

该指令把AL 或AX 的内容存入由(DI)指定的附加段的某单元中,并根据DF 的值及数据类型

修改DI 的内容,当它与REP 联用时,可把AL 或AX 的内容存入一个长度为(CX)的缓冲区中.

.LODS 从串取指令

格式: LODS SRC

LODSB

LODSW

执行的操作:

字节操作:(AL)-((SI)),(SI)-(SI)+-1

字操作: (AX)-((SI)),(SI)-(SI)+-2

该指令把由(SI)指定的数据段中某单元的内容送到AL 或AX 中,并根据方向标志及数据类型

修改SI 的内容.指令允许使用段跨越前缀来指定非数据段的存储区.该指令也不影响条件码.

一般说来,该指令不和REP 联用.有时缓冲区中的一串字符需要逐次取出来测试时,可使

用本指令.

2.与REPE/REPZ 和REPNZ/REPNE 联合工作的CMPS 和SCAS 指令

.REPE/REPZ 当相等/为零时重复串操作

格式: REPE(或REPZ) String Primitive

其中String Primitive 可为CMPS 或SCAS 指令.

执行的操作:

1)如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行

2)(CX)-(CX)-1

3)执行其后的串指令

4)重复1)~3)

.REPNE/REPNZ 当不相等/不为零时重复串操作

格式: REPNE(或REPNZ) String Primitive

其中String Primitive 可为CMPS 或SCAS 指令

执行的操作:

除退出条件(CX=0)或ZF=1外,其他操作与REPE 完全相同.

.CMPS 串比较指令

格式: CMP SRC,DST

CMPSB

CMPSW

执行的操作:

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

2)字节操作:(SI)-(SI)+-1,(DI)-(DI)+-1

字操作: (SI)-(SI)+-2,(DI)-(DI)+-2

指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)

相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS 指令的规定相同.

.SCAS 串扫描指令

格式: SCAS DST

SCASB

SCASW

执行的操作:

字节操作:(AL)-((DI)),(DI)-(DI)+-1

字操作: (AL)-((DI)),(DI)-(DI)+-2

该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存

结果,只根据结果置条件码.指令的其他特性和MOVS 的规定相同.

五、控制转移指令

1.无条件转移指令

.JMP(jmp) 跳转指令

1)段内直接短转移

格式:JMP SHORT OPR

执行的操作:(IP)-(IP)+8位位移量

2)段内直接近转移

格式:JMP NEAR PTR OPR

执行的操作:(IP)-(IP)+16位位移量

3)段内间接转移

格式:JMP WORD PTR OPR

执行的操作:(IP)-(EA)

4)段间直接(远)转移

格式:JMP FAR PTR OPR

执行的操作:(IP)-OPR 的段内偏移地址

(CS)-OPR 所在段的段地址

5)段间间接转移

格式:JMP DWORD PTR OPR

执行的操作:(IP)-(EA)

(CS)-(EA+2)

2.条件转移指令

1)根据单个条件标志的设置情况转移

.JZ(或JE)(Jump if zero,or equal) 结果为零(或相等)则转移

格式:JE(或JZ) OPR

测试条件:ZF=1

.JNZ(或JNE)(Jump if not zero,or not equal) 结果不为零(或不相等)则转移

格式:JNZ(或JNE) OPR

测试条件:ZF=0

.JS(Jump if sign) 结果为负则转移

格式: JS OPR

测试条件:SF=1

.JNS(Jump if not sign) 结果为正则转移

格式:JNS OPR

测试条件:SF=0

.JO(Jump if overflow) 溢出则转移

格式: JO OPR

测试条件:OF=1

.JNO(Jump if not overflow) 不溢出则转移

格式: JNO OPR

测试条件:OF=0

.JP(或JPE)(Jump if parity,or parity even) 奇偶位为1则转移

格式: JP OPR

测试条件:PF=1

.JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0则转移

格式: JNP(或JPO) OPR

测试条件:PF=0

.JB(或JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或进位

位为1则转移

格式:JB(或JNAE,JC) OPR

测试条件:CF=1

.JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于,

或进位位为0则转移

格式:JNB(或JAE,JNC) OPR

测试条件:CF=0

2)比较两个无符号数,并根据比较的结果转移

.JB(或JNAE,JC)

格式:同上

.JNB(或JAE,JNC)

格式:同上

.JBE(或JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移

格式:JBE(或JNA) OPR

测试条件:CFVZF=1

.JNBE(或JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移

格式:JNBE(或JA) OPR

测试条件:CFVZF=0

3)比较两个带符号数,并根据比较的结果转移

.JL(或LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移

格式:JL(或JNGE) OPR

测试条件:SFVOF=1

.JNL(或JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于则转移

格式:JNL(或JGE) OPR

测试条件:SFVOF=0

.JLE(或JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于则转移

格式:JLE(或JNG) OPR

测试条件:(SFVOF)VZF=1

.JNLE(或JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于则转移

格式:JNLE(或JG) OPR

测试条件:(SFVOF)VZF=0

4)测试CX 的值为0则转移指令

.JCXZ(Jump if CX register is zero) CX 寄存器的内容为零则转移

格式:JCXZ OPR

测试条件:(CX)=0

注:条件转移全为8位短跳!

3.循环指令

.LOOP 循环指令

格式: LOOP OPR

测试条件:(CX)0

.LOOPZ/LOOPE 当为零或相等时循环指令

格式: LOOPZ(或LOOPE) OPR

测试条件:(CX)0且ZF=1

.LOOPNZ/LOOPNE 当不为零或不相等时循环指令

格式: LOOPNZ(或LOOPNE) OPR

测试条件:(CX)0且ZF=0

这三条指令的步骤是:

1)(CX)-(CX)-1

2)检查是否满足测试条件,如满足则(IP)-(IP)+D8的符号扩充.

4.子程序

.CALL 调用指令

.RET 返回指令

5.中断

.INT 指令

格式: INT TYPE

或INT

执行的操作:(SP)-(SP)-2

((SP)+1,(SP))-(PSW)

(SP)-(SP)-2

((SP)+1,(SP))-(CS)

(SP)-(SP)-2

((SP)+1,(SP))-(IP)

(IP)-(TYPE*4)

(CS)-(TYPE*4+2)

.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)-(10H)

(CS)-(12H)

.IRET 从中断返回指令

格式: IRET

执行的操作:(IP)-((SP)+1,(SP))

(SP)-(SP)+2

(CS)-((SP)+1,(SP))

(SP)-(SP)+2

(PSW)-((SP)+1,(SP))

(SP)-(SP)+2

六、处理机控制指令

1.标志处理指令

.CLC 进位位置0指令(Clear carry)CF-0

.CMC 进位位求反指令(Complement carry)CF-CF

.STC 进位位置1指令(Set carry)CF-1

.CLD 方向标志置0指令(Clear direction)DF-0

.STD 方向标志置1指令(Set direction)DF-1

.CLI 中断标志置0指令(Clear interrupt)IF-0

.STI 中断标志置1指令(Set interrupt)IF-0

2.其他处理机控制指令

NOP(No Opreation) 无操作

HLT(Halt) 停机

WAIT(Wait) 等待

ESC(Escape) 换码

LOCK(Lock) 封锁

这些指令可以控制处理机状态.这们都不影响条件码.

.NOP 无操作指令

该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定

的存储单元,以便在正式运行时用其他指令取代.

.HLT 停机指令

该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束

后可继续执行下面的程序.

.WAIT 等待指令

该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回

WAIT 指令继续德行.

.ESC 换码指令

格式ESC mem

其中mem 指出一个存储单元,ESC 指令把该存储单元的内容送到数据总线去.当然ESC 指令

不允许使用立即数和寄存器寻址方式.这条指令在使用协处理机(Coprocessor)执行某些操作

时,可从存储器指得指令或操作数.协处理机(如8087)则是为了提高速度而可以选配的硬件.

.LOCK 封锁指令

该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令

执行完为止.当CPU 与其他处理机协同工作时,该指令可避免破坏有用信息.

汇编基础 汇编指令

16位数据操作指令

名字 功能

ADC 带进位加法(ADD with Carry)

ADD 加法

AND 按位与。这里的按位与和C的””功能相同

ASR 算术右移(Arithmetic Shift Right)

BIC 按位清零(把一个数跟另一个无符号数的反码按位与)

CMN 负向比较(把一个数跟另一个数据的二进制补码相比较)

CMP 比较(Compare,比较两个数并且更新标志)

CMP 把一个寄存器的内容和另一个寄存器的内容或立即数进行比较。但不存储结果,只是正确的更改标志。

一般CMP做完判断后会进行跳转,后面通常会跟上B指令!

CPY 把一个寄存器的值拷贝(COPY)到另一个寄存器中

EOR 近位异或

LSL 逻辑左移(Logic Shift Left)

LSR 逻辑右移(Logic Shift Right)

MOV 寄存器加载数据,既能用于寄存器间的传输,也能用于加载立即数

MUL 乘法(Multiplication)

MVN 加载一个数的 NOT值(取到逻辑反的值)

NEG 取二进制补码

ORR 按位或

ROR 循环右移

SBC 带借位的减法

SUB 减法(Subtraction)

TST 测试(Test,执行按位与操作,并且根据结果更新Z)

REV 在一个32位寄存器中反转(Reverse)字节序

REVH 把一个32位寄存器分成两个(Half)16位数,在每个16位数中反转字节序

REVSH 把一个32位寄存器的低16位半字进行字节反转,然后带符号扩展到32位

SXTB 带符号(Signed)扩展一个字节(Byte)到 32位

SXTH 带符号(Signed)扩展一个半字(Half)到 32位

UXTB 无符号(Unsigned)扩展一个字节(Byte)到 32位

UXTH 无符号(Unsigned)扩展一个半字(Half)到 32位

16位转移指令

名字 功能

B 无条件转移(Branch)

Bcond 有条件(Condition)转移

BL 转移并连接(link)。用于呼叫一个子程序,返回地址被存储在LR中

CBZ 比较(Compare),如果结果为零(Zero)就转移(只能跳到后面的指令)

CBNZ 比较,如果结果非零(Non Zero)就转移(只能跳到后面的指令)

IT If-Then

16位存储器数据传送指令

名字 功能

LDR 从存储器中加载(Load)字到一个寄存器(Register)中

LDRH 从存储器中加载半(Half)字到一个寄存器中

LDRB 从存储器中加载字节(Byte)到一个寄存器中

LDRSH 从存储器中加载半字,再经过带符号扩展后存储一个寄存器中

LDRSB 从存储器中加载字节,再经过带符号扩展后存储一个寄存器中

STR 把一个寄存器按字存储(Store)到存储器中

STRH 把一个寄存器存器的低半字存储到存储器中

STRB 把一个寄存器的低字节存储到存储器中

LDMIA 加载多个字,并且在加载后自增基址寄存器

STMIA 存储多个字,并且在存储后自增基址寄存器

PUSH 压入多个寄存器到栈中

POP 从栈中弹出多个值到寄存器中

其它16位指令

名字 功能

SVC 系统服务调用(Service Call)

BKPT 断点(Break Point)指令。如果调试被使能,则进入调试状态(停机)。

NOP 无操作(No Operation)

CPSIE 使能 PRIMASK(CPSIE i)/FAULTMASK(CPSIE f)——清零相应的位

CPSID 除能 PRIMASK(CPSID i)/FAULTMASK(CPSID f)——置位相应的位

32位数据操作指令

名字 功能

ADC 带进位加法

ADD 加法

ADDW 宽加法(可以加 12 位立即数)

AND 按位与(原文是逻辑与,有误——译注)

ASR 算术右移

BIC 位清零(把一个数按位取反后,与另一个数逻辑与)

BFC 位段清零

BFI 位段插入

CMN 负向比较(把一个数和另一个数的二进制补码比较,并更新标志位)

CMP 比较两个数并更新标志位

CLZ 计算前导零的数目

EOR 按位异或

LSL 逻辑左移

LSR 逻辑右移

MLA 乘加

MLS 乘减

MOVW 把 16 位立即数放到寄存器的底16位,高16位清0

MOV 加载16位立即数到寄存器(其实汇编器会产生MOVW——译注)

MOVT 把 16 位立即数放到寄存器的高16位,低 16位不影响

MVN 移动一个数的补码

MUL 乘法

ORR 按位或(原文为逻辑或,有误——译注)

ORN 把源操作数按位取反后,再执行按位或(原文为逻辑或,有误——译注)

RBIT 位反转(把一个 32 位整数先用2 进制表达,再旋转180度——译注)

REV 对一个32 位整数做按字节反转

REVH/REV16 对一个32 位整数的高低半字都执行字节反转

REVSH 对一个32 位整数的低半字执行字节反转,再带符号扩展成32位数

ROR 圆圈右移

RRX 带进位的逻辑右移一格(***位用C 填充,且不影响C的值——译注)

SFBX 从一个32 位整数中提取任意的位段,并且带符号扩展成 32 位整数

SDIV 带符号除法

SMLAL 带符号长乘加(两个带符号的 32 位整数相乘得到 64 位的带符号积,再把积加到另一个带符号 64位整数中)

SMULL 带符号长乘法(两个带符号的 32 位整数相乘得到 64位的带符号积)

SSAT 带符号的饱和运算

SBC 带借位的减法

SUB 减法

SUBW 宽减法,可以减 12 位立即数

SXTB 字节带符号扩展到32位数

TEQ 测试是否相等(对两个数执行异或,更新标志但不存储结果)

TST 测试(对两个数执行按位与,更新Z 标志但不存储结果)

UBFX 无符号位段提取

UDIV 无符号除法

UMLAL 无符号长乘加(两个无符号的 32 位整数相乘得到 64 位的无符号积,再把积加到另一个无符号 64位整数中)

UMULL 无符号长乘法(两个无符号的 32 位整数相乘得到 64位的无符号积)

USAT 无符号饱和操作(但是源操作数是带符号的——译注)

UXTB 字节被无符号扩展到32 位(高24位清0——译注)

UXTH 半字被无符号扩展到32 位(高16位清0——译注)

32位存储器数据传送指令

名字 功能

LDR 加载字到寄存器

LDRB 加载字节到寄存器

LDRH 加载半字到寄存器

LDRSH 加载半字到寄存器,再带符号扩展到 32位

LDM 从一片连续的地址空间中加载多个字到若干寄存器

LDRD 从连续的地址空间加载双字(64 位整数)到2 个寄存器

STR 存储寄存器中的字

STRB 存储寄存器中的低字节

STRH 存储寄存器中的低半字

STM 存储若干寄存器中的字到一片连续的地址空间中

STRD 存储2 个寄存器组成的双字到连续的地址空间中

PUSH 把若干寄存器的值压入堆栈中

POP 从堆栈中弹出若干的寄存器的值

32位转移指令

名字 功能

B 无条件转移

BL 转移并连接(呼叫子程序)

TBB 以字节为单位的查表转移。从一个字节数组中选一个8位前向跳转地址并转移

TBH 以半字为单位的查表转移。从一个半字数组中选一个16 位前向跳转的地址并转移

其它32位指令

LDREX 加载字到寄存器,并且在内核中标明一段地址进入了互斥访问状态

LDREXH 加载半字到寄存器,并且在内核中标明一段地址进入了互斥访问状态

LDREXB 加载字节到寄存器,并且在内核中标明一段地址进入了互斥访问状态

STREX 检查将要写入的地址是否已进入了互斥访问状态,如果是则存储寄存器的字

STREXH 检查将要写入的地址是否已进入了互斥访问状态,如果是则存储寄存器的半字

STREXB 检查将要写入的地址是否已进入了互斥访问状态,如果是则存储寄存器的字节

CLREX 在本地的处理上清除互斥访问状态的标记(先前由 LDREX/LDREXH/LDREXB做的标记)

MRS 加载特殊功能寄存器的值到通用寄存器

MSR 存储通用寄存器的值到特殊功能寄存器

NOP 无操作

SEV 发送事件

WFE 休眠并且在发生事件时被唤醒

WFI 休眠并且在发生中断时被唤醒

ISB 指令同步隔离(与流水线和 MPU等有关——译注)

DSB 数据同步隔离(与流水线、MPU 和cache等有关——译注)

DMB 数据存储隔离(与流水线、MPU 和cache等有关——译注)

x86汇编指令集大全(带注释)

汇编指令集太多,如果不用就会忘记,所以将i处理器官方的指令集大全写到博客上,有需要的人可以参考一下!

---------- 一、数据传输指令 ----------------------------------------------------

它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.

常用的汇编码

汇编语言命令大全

MOV(MOVE) 传送指令P28

PUSH 入栈指令P32

POP 出栈指令P33

XCHG(eXCHanG) 交换指令P34

XLAT(TRANSLATE) 换码指令P34

LEA (Load Effective Address) 有效地址送寄存器指令P35

LDS(Load DS with pointer) 指针送寄存器和DS指令P35

LES(Load ES with pointer) 指针送寄存器和ES指令P35

LAHF(Load AH with Flags) 标志位送AH指令P36

SAHF(Store AH into Flgs) AH送标志寄存器指令P36

PUSHF(PUSH the Flags) 标志进栈指令P36

POPF(POP the Flags) 标志出栈指令P37

ADD 加法指令P38

ADC 带进位加法指令P39

INC 加1指令P39

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

SBB(SuVtrach with borrow) 带借位的减法指令P40

DEC(DECrement) 减1指领P41

NEG(NEGate) 求补指令P41

CMP(CoMPare) 比较指令P42

MUL(unsinged MULtiple) 无符号数乘法指令P46

IMUL(sIgned MUL tiple) 有符号数乘法指令P46

DIV(unsigned DIVide) 无符号数除法指令P48

IDIV(sIgned DIVide) 有符号数除法指令P48

CBW(Count Byte to Word) 字节转换为字指令P50

CWD(Count Word to Doble word) 字转换为双字指令P50

DAA 压缩的BCD码加法十进制调整指令P53

DAS 压缩的BCD码减法十进制调整指令P53

AAA 非压缩的BCD码加法十进制调整指令P54

AAS 非压缩的BCD码加法十进制调整指令P54

AND 逻辑与指令P54

OR 逻辑或指令P55

XOR 逻辑异或指令P56

NOT 逻辑非指令P56

TEST 测试指令P57

SHL(SHift logical Letf) 逻辑左移指令P57

SHR(SHift logical Right) 逻辑右移指令P57

ROL(Rotate Left ) 循环左移指令P58

ROR(Rotate Right) 循环右移指令P58

RCL(Rotate Left through Carry) 带进位循环左移P58

RCR(Rotate Right through Carry) 带进位循环左移P58

MOVS(MOVe String) 串传送指令P58

STOS(STOre into String) 存入串指令P60

LODS(LOad from string) 从串取指令P60

REP(REPeat) 重复操作前缀P61

CLD(CLear Direction flag) 清除方向标志指令P61

STD(SeT Direction flag) 设置方向标志指令P61

CMPS(CoMPare String) 串比较指令P62

SCAS(SCAn String) 串扫描指令P63

REPE/REPZ(REPeat while Equal/Zero)相等/为零时重复操作前缀P63

REPNE/REPNZ(REPeat while Not Equal/Zero)不相等/不为零进重复前缀

IN(INput) 输入指令P65

OUT(OUTput) 输出指令P65

JMP(JuMP) 无条件转移指令P66

JZ,JNZ,JS,JNS,JO,JNO,JP,JNP,JB,JNB,JBE,JNBE,JL,JNL,JLE,JNLE,JCXZ 条件转移指令P67

LOOP 循环指令P70

LOOPZ/LOOPE 为零/相等时循环指令P70

LOOPNZ/LOOPNE 不为零/不相等时循环指令P70

CALL 子程序调用指令P71

RET(RETun) 子程序返回指令P72

CLC(CLear Carry) 进位位置0指令P77

CMC(CoMplement Carry) 进位位求反指令P77

SRC(SeT Carry) 进位位置1指令P77

NOP(No OPeretion) 无操作指令P77

HLT(HaLT) 停机指令P77

OFFSET 返回偏移地址P85

SEG 返回段地址P85

EQU(=) 等值语句P90

PURGE 解除语句P91

DUP 操作数字段用复制操作符P93

SEGMENT,ENDS 段定义指令P95

ASSUME 段地址分配指令P95

ORG 起始偏移地址设置指令P96

$ 地址计数器的当前值P97

PROC,ENDP 过程定义语句P97

NAME,TITLE,END 程序开始结束语句P98

MACRO,ENDM 宏定义指令P99

8086、8088汇编指令大全

一、数据传输指令

它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.

1. 通用数据传送指令.

MOV 传送字或字节.

MOVSX 先符号扩展,再传送.

MOVZX 先零扩展,再传送.

PUSH 把字压入堆栈.

POP 把字弹出堆栈.

PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.

POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.

PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.

POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.

BSWAP 交换32位寄存器里字节的顺序

XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)

CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )

XADD 先交换再累加.( 结果在***个操作数里 )

XLAT 字节查表转换.

—— BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即

0-FFH); 返回 AL 为查表结果. ( [BX+AL]-AL )

2. 输入输出端口传送指令.

IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )

OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )

输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,

其范围是 0-65535.

3. 目的地址传送指令.

LEA 装入有效地址.

例: LEA DX,string ;把偏移地址存到DX.

LDS 传送目标指针,把指针内容装入DS.

例: LDS SI,string ;把段地址:偏移地址存到DS:SI.

LES 传送目标指针,把指针内容装入ES.

例: LES DI,string ;把段地址:偏移地址存到ES:DI.

LFS 传送目标指针,把指针内容装入FS.

例: LFS DI,string ;把段地址:偏移地址存到FS:DI.

LGS 传送目标指针,把指针内容装入GS.

例: LGS DI,string ;把段地址:偏移地址存到GS:DI.

LSS 传送目标指针,把指针内容装入SS.

例: LSS DI,string ;把段地址:偏移地址存到SS:DI.

4. 标志传送指令.

LAHF 标志寄存器传送,把标志装入AH.

SAHF 标志寄存器传送,把AH内容装入标志寄存器.

PUSHF 标志入栈.

POPF 标志出栈.

PUSHD 32位标志入栈.

POPD 32位标志出栈.

二、算术运算指令

———————————————————————————————————————

ADD 加法.

ADC 带进位加法.

INC 加 1.

AAA 加法的ASCII码调整.

DAA 加法的十进制调整.

SUB 减法.

SBB 带借位减法.

DEC 减 1.

NEC 求反(以 0 减之).

CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).

AAS 减法的ASCII码调整.

DAS 减法的十进制调整.

MUL 无符号乘法.

IMUL 整数乘法.

以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),

AAM 乘法的ASCII码调整.

DIV 无符号除法.

IDIV 整数除法.

以上两条,结果回送:

商回送AL,余数回送AH, (字节运算);

或 商回送AX,余数回送DX, (字运算).

AAD 除法的ASCII码调整.

CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)

CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)

CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)

CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)

三、逻辑运算指令

———————————————————————————————————————

AND 与运算.

OR 或运算.

XOR 异或运算.

NOT 取反.

TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).

SHL 逻辑左移.

SAL 算术左移.(=SHL)

SHR 逻辑右移.

SAR 算术右移.(=SHR)

ROL 循环左移.

ROR 循环右移.

RCL 通过进位的循环左移.

RCR 通过进位的循环右移.

以上八种移位指令,其移位次数可达255次.

移位一次时, 可直接用操作码. 如 SHL AX,1.

移位1次时, 则由寄存器CL给出移位次数.

如 MOV CL,04

SHL AX,CL

四、串指令

———————————————————————————————————————

DS:SI 源串段寄存器 :源串变址.

ES:DI 目标串段寄存器:目标串变址.

CX 重复次数计数器.

AL/AX 扫描值.

D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.

Z标志 用来控制扫描或比较操作的结束.

MOVS 串传送.

( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )

CMPS 串比较.

( CMPSB 比较字符. CMPSW 比较字. )

SCAS 串扫描.

把AL或AX的内容与目标串作比较,比较结果反映在标志位.

LODS 装入串.

把源串中的元素(字或字节)逐一装入AL或AX中.

( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )

STOS 保存串.

是LODS的逆过程.

REP 当CX/ECX0时重复.

REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX0时重复.

REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX0时重复.

REPC 当CF=1且CX/ECX0时重复.

REPNC 当CF=0且CX/ECX0时重复.

五、程序转移指令

———————————————————————————————————————

1无条件转移指令 (长转移)

JMP 无条件转移指令

CALL 过程调用

RET/RETF过程返回.

2条件转移指令 (短转移,-128到+127的距离内)

( 当且仅当(SF XOR OF)=1时,OP1OP2 )

JA/JNBE 不小于或不等于时转移.

JAE/JNB 大于或等于转移.

JB/JNAE 小于转移.

JBE/JNA 小于或等于转移.

以上四条,测试无符号整数运算的结果(标志C和Z).

JG/JNLE 大于转移.

JGE/JNL 大于或等于转移.

JL/JNGE 小于转移.

JLE/JNG 小于或等于转移.

以上四条,测试带符号整数运算的结果(标志S,O和Z).

JE/JZ 等于转移.

JNE/JNZ 不等于时转移.

JC 有进位时转移.

JNC 无进位时转移.

JNO 不溢出时转移.

JNP/JPO 奇偶性为奇数时转移.

JNS 符号位为 "0" 时转移.

JO 溢出转移.

JP/JPE 奇偶性为偶数时转移.

JS 符号位为 "1" 时转移.

3循环控制指令(短转移)

LOOP CX不为零时循环.

LOOPE/LOOPZ CX不为零且标志Z=1时循环.

LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.

JCXZ CX为零时转移.

JECXZ ECX为零时转移.

4中断指令

INT 中断指令

INTO 溢出中断

IRET 中断返回

5处理器控制指令

HLT 处理器暂停, 直到出现中断或复位信号才继续.

WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.

ESC 转换到外处理器.

LOCK 封锁总线.

NOP 空操作.

STC 置进位标志位.

CLC 清进位标志位.

CMC 进位标志取反.

STD 置方向标志位.

CLD 清方向标志位.

STI 置中断允许位.

CLI 清中断允许位.

六、伪指令

———————————————————————————————————————

DW 定义字(2字节).

PROC 定义过程.

ENDP 过程结束.

SEGMENT 定义段.

ASSUME 建立段寄存器寻址.

ENDS 段结束.

END 程序结束.

汇编指令大全的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于汇编指令大全下载、汇编指令大全的信息别忘了在本站进行查找喔。

 
标签: 指令 寄存器 操作
打赏
 
更多>同类资讯
0相关评论

推荐资讯
网站首页  |  VIP套餐介绍  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  SITEMAPS  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报