汇编指令集Word格式.docx
《汇编指令集Word格式.docx》由会员分享,可在线阅读,更多相关《汇编指令集Word格式.docx(31页珍藏版)》请在冰豆网上搜索。
MUL,IMUL
乘法指令
MULOPIMULOP
MULr/mIMULr/m
C,P,A,Z,S,O(仅IMUL会影响S标志)
DIV,IDIV
除法指令
DIVOPIDIVOP
DIVr/mIDIVr/m
CBW,CWD
有符号数扩展指令
CBWCWD
AAA,AAS,AAM,AAD
非压BCD码运算调整指令
AAAAASAAMAAD
A,C(AAA,AAS)S,Z,P(AAM,AAD)
DAA,DAS
压缩BCD码调整指令
DAADAS
C,P,A,Z,S
位运算指令集
AND,OR,XOR,NOT,TEST
执行BIT与BIT之间的逻辑运算
ANDr/m,r/m/dataORr/m,r/m/dataXORr/m,r/m/dataTESTr/m,r/m/d
ataNOTr/m
C,O,P,Z,S(其中C与O两个标志会被设为0)NOT指令不影响任何标志位
SHR,SHL,SAR,SAL
移位指令
SHRr/m,data/CLSHLr/m,data/CLSARr/m,data/CLSALr/m,data/CL
C,P,Z,S,O
ROR,ROL,RCR,RCL
循环移位指令
RORr/m,data/CLROLr/m,data/CLRCRr/m,data/CLRCLr/m,data/CL
程序流程控制指令集
CLC,STC,CMC
设定进位标志
CLCSTCCMC
标志位:
C
CLD,STD
设定方向标志
CLDSTD
D
CLI,STI
设定中断标志
CLISTI
I
CMP
比较OP1与OP2的值
CMPr/m,r/m/data
C,P,A,Z,O
JMP
跳往指定地址执行
JMP地址
JXX
当特定条件成立则跳往指定地址执行
JXX地址
注:
A:
ABOVE,当C=0,Z=0时成立
B:
BELOW,当C=1时成立
C:
CARRY,当弁时成立CXZ:
CX寄存器的值为0(ZERO)时成立
E:
EQUAL,当Z=1时成立
G:
GREATER(大于),当Z=0且S=0时成立
L:
LESS(小于),当S不为零时成立
N:
NOT(相反条件),需和其它符号配合使用
O:
OVERFLOW,O=1时成立
P:
PARITY,P=1时成立
PE:
PARITYEVEN,P=1时成立
PO:
PARITYODD,P=0时成立
S:
SIGN,S=1时成立
Z:
ZERO,Z=1时成立
LOOP
循环指令集
LOOP地址
LOOPE(Z)
地址LOOPNE(Z)地址
无
CALL,RET
子程序调用,返回指令
CALL地址RETRETn
INT,IRET
中断调用及返回指令
INTnIRET
在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆
栈中的标志值弹回寄存器
字符串操作指令集
MOVSB,MOVSW,MOVSD
字符串传送指令
MOVSBMOVSWMOVSD
CMPSB,CMPSW,CMPSD
字符串比较指令
CMPSBCMPSWCMPSD
SCASB,SCASW
字符串搜索指令
SCASBSCASW
LODSB,LODSW,STOSB,STOSW
字符串载入或存贮指令
LODSBLODSWSTOSBSTOSW
REP,REPE,REPNE
重复前缀指令集
REP指令SREPE指令SREPNE指令S
依指令S而定
EMC汇编语言指令集
符号解说:
1.符号‘R’:
代表一般用途寄存器中的其中一个。
2.符号‘B’:
代表一般用途寄存器中的某一位。
3.符号‘K’:
代表8位或10位的常数或内容。
4.符号‘A’:
代表累加寄存器。
3.2.1.面向寄存器(字节操作)型指令(26条)
助记符号指令动作标志影响指令周期语言描述
ADDA,RA+R->
AZ,C,DC1ADD
ADDR,AA+R->
RZ,C,DC1ADD
ANDA,RA&
R->
AZ1AND
ANDR,AA&
RZ1AND
CLRR0->
RZ1ClearRegister
CLRA0->
AZ1CleartheAregister
COMR/R->
RZ1ComplementR
COMAR/R->
AZ1ComplementR,PlaceinA
DAAA寄存器调整为BCD值C1DecimalAdjust
DECRR-1->
RZ1DecrementR
DECARR-1->
AZ1DecrementR,PlaceinA
DJZRR-1->
R结果为零就跳过下一个指令1DecrementR,Skipif0
DJZARR-1->
A结果为零就跳过下一个指令1DecrementR,PleaseinAregister,Skipif0
INCRR+1->
RZ1IncrementR
INCARR+1->
AZ1IncrementR,PleaseinA
JZRR+1->
R,结果为零就跳过下一个指令1IncrementR,Skipif0
JZARR+1->
A,结果为零就跳过下一个指令1IncrementR,PlaceintheAregiser,Skipif0
MOVR,AA->
R1MoveData
MOVA,RR->
AZ1MoveData
MOVR,RR->
RZ1MoveData
ORA,RAORR->
AZ1InclusiveOR
ORR,AAORR->
RZ1InclusiveOR
SUBA,RR-A->
AZ,C,DC1Subtract
SUBR,AR-A->
RZ,C,DC1Subtract
XORA,RAXORR->
AZ1ExclusiveOR
XORR,AAXORR->
RZ1ExclusiveOR
面向位操作类指令(10条)
BCR,B0->
R(B)1BitClear
BSR,B1->
R(B)1BitSet
JBCR,B如果R(B)=0,则跳过下一个指令1BitTest,SkipifClear
JBSR,B如果R(B)=1,则跳过下一个指令1BitTest,SkipifSet
RLCRR(N)->
R(N+1)R(7)->
CC->
R(0)C1RotateLeftRthroughCarry
RLCARR(N)->
A(N+1)R(7)->
A(0)C1RotateLeftRthroughCarry,PlaceintheA
Register
RRCRR(N)->
R(N-1)R(0)->
R(7)C1RotateRightRthroughCarry
RRCARR(N)->
A(N-1)R(0)->
A(7)C1RotateRightRthroughCarry,Placeinthe
ARegister
SWAPRR(0-3)->
R(4-7)R(4-7)->
R(0-3)1SwapR
SWAPARR(0-3)->
A(4-7)R(4-7)->
A(0-3)1SwapR
常数操作和控制类指令(22条)
ADDA,KA+K->
ANDA,KA&
K->
CALLKPC+1->
[SP](PAGE,K)->
PC1SubroutineCall
CONTRCONT->
A1MoveCONTtotheAregister
CONTWA->
CONT1MoveAtoCONT
DISI禁止中断1DisableInterrupt
ENI使能中断1EnableInterrupt
INTPC+1->
[SP]001H->
PC1Softwareinterrupt
IORRIOCR->
A1MoveIOCRtotheAregister
IOWRA->
IOCR1MoveAtoIOCR
JMPK(PAGE,K)->
PC1UnconditionalBranch
MOVA,KK->
A1MoveData
NOP1NoOperation
ORA,KAORK->
RET[堆栈顶端]->
PC1ReturnfromSubroutine
RETI[堆栈顶端]->
PC,使能中断1ReturnfromInterrupt
RETLKK->
A,[堆栈顶端]->
PCReturnImmediateDatatotheARegister
SLEP0->
WDT,振荡器停止振荡T,P1IntoSleepmode
SUBA,KK-A->
TBLPC+A->
PCZ,C,DC2TableLookUp
WDTC0->
WDTT,P1ClearWatchdogTimer
XORA,KAXORK->
AZ1ExclusiveOR
查看文章
8088汇编速查手册
2007年03月24日星期六上午11:
42
一、数据传输指令
───────────────────────────────────────
它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.
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.输入输出端口传送指令.
INI/O端口输入.(语法:
IN累加器,{端口号│DX})
OUTI/O端口输出.(语法:
OUT{端口号│DX},累加器)
输入输出端口由立即方式指定时,其范围是0-255;
由寄存器DX指定时,
其范围是0-65535.
3.目的地址传送指令.
LEA装入有效地址.
例:
LEADX,string;
把偏移地址存到DX.
LDS传送目标指针,把指针内容装入DS.
LDSSI,string;
把段地址:
偏移地址存到DS:
SI.
LES传送目标指针,把指针内容装入ES.
LESDI,string;
偏移地址存到ES:
DI.
LFS传送目标指针,把指针内容装入FS.
LFSDI,string;
偏移地址存到FS:
LGS传送目标指针,把指针内容装入GS.
LGSDI,string;
偏移地址存到GS:
LSS传送目标指针,把指针内容装入SS.
LSSDI,string;
偏移地址存到SS:
4.标志传送指令.
LAHF标志寄存器传送,把标志装入AH.
SAHF标志寄存器传送,把AH内容装入标志寄存器.
PUSHF标志入栈.
POPF标志出栈.
PUSHD32位标志入栈.
POPD32位标志出栈.
二、算术运算指令
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次.
移位一次时,可直接用操作码.如SHLAX,1.
移位>
1次时,则由寄存器CL给出移位次数.
如MOVCL,04
SHLAX,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/ECX<
>
0时重复.
REPE/REPZ当ZF=1或比较结果相等,且CX/ECX<
REPNE/REPNZ当ZF=0或比较结果不相等,且CX/ECX<
REPC当CF=1且CX/ECX<
REPNC当CF=0且CX/ECX<
五、程序转移指令
1>
无条件转移指令(长转移)
JMP无条件转移指令
CALL过程调用
RET/RETF过程返回.
2>
条件转移指令(短转移,-128到+127的距离内)
(当且仅当(SFXOROF)=1时,OP1<
OP2)
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>
循环控制指令(短转移)
LOOPCX不为零时循环.
LOOPE/LOOPZCX不为零且标志Z=1时循环.
LOOPNE/LOOPNZCX不为零且标志Z=0时循环.
JCXZCX为零时转移.
JECXZECX为零时转移.
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程序结束.
8088汇编跳转
cmpa,b比较a与b
mova,b把b的值送给a
ret返回主程序
nop无作用,英文“nooperation”的简写,意思是“donothing”
call调用子程序
je或jz若相等则跳
jne或jnz若不相等则跳
jmp无条件跳
jb若小于则跳
ja若大于则跳
jg若大于则跳
jge若大于等于则跳
jl若小于则跳
jle若小于等于则跳
pop出栈
push压栈
PUSHrPUSHMPUSHdataPOPrPOPm
PUSHF,