常见汇编命令英文缩写
寄存器类(register):
通用寄存器:
EAX、EBX、ECX、EDX:是ax,bx,cx,dx的延伸,各为32位
AH&AL=AX(accumulator) :累加寄存器
BH&BL=BX(base) :基址寄存器
CH&CL=CX(count) :计数寄存器
DH&DL=DX(data) :数据寄存器
特殊功能寄存器:
ESP、EBP、ESI、EDI、EIP:是sp,bp,si,di,ip的延伸,32位
SP(Stack Pointer) :堆栈指针寄存器
BP(Base Pointer) :基址指针寄存器
SI(Source Index) :源变址寄存器
DI(Destination Index) :目的变址寄存器
IP(Instruction Pointer) :指令指针寄存器
段寄存器:
CS(Code Segment) :代码段寄存器<br /> DS(Data Segment) :数据段寄存器<br /> SS(Stack Segment) :堆栈段寄存器<br /> ES(Extra Segment) :附加段寄存器
标志寄存器
FR--flag register(程序状态字PSW--program status word),PSW常用的标志有: <br /> 标志 值为1时的标记 值为0时的标记 说明<br /> OF(overflow flag) OV(overflow) NV(not overflow) 溢出标志 操作数超出<br /> 机器能表示的范围表示<br /> 溢出.溢出时为1.<br /> ZF(zero flag) ZR(zero) NZ(not zero) 零标志 运算结果等于<br /> 0时为1.否则为0.<br /> PF(parity flag) PE(parity even) PO(parity odd) 奇偶标志 运算结果操<br /> 作数位为1的个数为偶<br /> 数个时为1.否则为0.<br /> CF(carry flag) CY(carried) NC(not carried) 进位标志 最高有效位产<br /> 生进位时为1.否则为0.<br /> DF(direction flag) DN(down) UP(up) 方向标志 用于串处理.<br /> DF=1时.每次操作后使SI<br /> 和DI减小.DF=0时则增大<br /> SF(sign flag) NG(negtive) PL(plus) 符号标志 记录运算结果<br /> 的符号.结果负时为1.<br /> TF(trap flag) 陷阱标志 用于调试单步<br /> 操作.<br /> IF(interrupt flag) 中断标志 IF=1时.允许C<br /> PU响应可屏蔽中断.否则<br /> 关闭中断.<br /> AF(auxiliary flag) 辅助进位标志 运算时.第<br /> 3位向第4位产生进位时为<br /> 1.否则为0.
一、命令类
1.通用数据传送指令.
MOV----> move 传送字或字节<br /> MOVSX---->extended move with sign data 先符号扩展,再传送<br /> MOVZX---->extended move with zero data 先零扩展,再传送<br /> PUSH---->push 把字压入堆栈<br /> POP---->pop 把字弹出堆栈<br /> PUSHA---->push all 把AX,CX,DX,BX,SP,BP,SI,DI<br /> 依次压入堆栈<br /> POPA---->pop all 把DI,SI,BP,SP,BX,DX,CX,AX<br /> 依次弹出堆栈<br /> PUSHAD---->push all data 把EAX,ECX,EDX,EBX,ESP,EBP<br /> ,ESI,EDI依次压入堆栈<br /> POPAD---->pop all data 把EDI,ESI,EBP,ESP,EBX,EDX<br /> ,ECX,EAX依次弹出堆栈<br /> BSWAP---->byte swap 交换32位寄存器里字节的顺序<br /> XCHG---->exchange 交换字或字节.至少有一个操作数<br /> 为寄存器,段寄存器不可作为操作<br /> 数<br /> CMPXCHG---->compare and change 比较并交换操作数.第二个操作数<br /> 为累加器AL/AX/EAX <br /> XADD---->exchange and add 先交换再累加.结果在第一个操作<br /> 数里<br /> XLAT---->translate 字节查表转换
2.输入输出端口传送指令.
IN---->input I/O端口输入.(语法: IN 累加器<br /> ,{ 端口号│DX })<br /> OUT---->output I/O端口输出.(语法: OUT { 端<br /> 口号│DX },累加器)
3.目的地址传送指令.
LEA---->load effective address 装入有效地址<br /> LDS---->load DS 传送目标指针,把指针内容装入DS<br /> LES---->load ES 传送目标指针,把指针内容装入ES<br /> LFS---->load FS 传送目标指针,把指针内容装入FS<br /> LGS---->load GS 传送目标指针,把指针内容装入GS<br /> LSS---->load SS 传送目标指针,把指针内容装入SS
4.标志传送指令.
LAHF---->load AH from flag 标志寄存器传送,把标志装入AH.<br /> SAHF---->save AH to flag 标志寄存器传送,把AH内容装入<br /> 标志寄存器<br /> PUSHF---->push flag 标志入栈<br /> POPF---->pop flag 标志出栈 <br /> PUSHD---->push dflag 32位标志入栈<br /> POPD---->pop dflag 32位标志出栈
二、算术运算指令
ADD——>add 加法
ADC——>add with carry 带进位加法
INC——>increase 1 加1
AAA——>ascii add with adjust 加法的ASCII码调整
DAA——>decimal add with adjust 加法的十进制调整
SUB——>substract 减法
SBB——>substract with borrow 带借位减法
DEC——>decrease 1 减1
NEC——>negative 求反(以 0 减之)
CMP——>compare 比较.两操作数作减法,仅修改标
志位,不回送结果
AAS——>ascii adjust on substract 减法的ASCII码调整.
DAS——>decimal adjust on substract 减法的十进制调整
MUL——>multiplication 无符号乘法,结果回送AH和AL
(字节运算),或DX和AX(字运算)
IMUL——>integer multiplication 整数乘法,结果回送AH和AL(字
节运算),或DX和AX(字运算)
AAM——>ascii adjust on multiplication 乘法的ASCII码调整
DIV——>divide 无符号除法
IDIV——>integer divide 整数除法,商回送AL余数回送AH
,字节运算,商回送AX余数回送
DX,字运算
AAD——>ascii adjust on divide 除法的ASCII码调整
CBW——>change byte to word 字节转换为字.(把AL中字节的符
号扩展到AH中去)
CWD——>change word to double word 字转换为双字.(把AX中的字的符
号扩展到DX中去)
CWDE—->change word to double word with sign to EAX 字转换为双字.(把AX中的字符号
扩展到EAX中去)
CDQ——>change double word to quadrate word 双字扩展.把EAX中的字的符号扩
展到EDX
三、逻辑运算指令
AND——>and 与运算
OR——>or 或运算
XOR——>xor 异或运算
NOT——>not 取反
TEST——>test 测试.(两操作数作与运算,仅修改
标志位,不回送结果)
SHL——>shift left 逻辑左移
SAL——>arithmatic shift left 算术左移.(=SHL)
SHR——>shift right 逻辑右移
SAR——>arithmatic shift right 算术右移.(=SHR)
ROL——>rotate left 循环左移
ROR——>rotate right 循环右移
RCL——>rotate left with carry 通过进位的循环左移
RCR——>rotate right with carry 通过进位的循环右移
四、串指令
MOVS——>move string 串传送,MOVSB传送字符、MOVSW
传送字、MOVSD传送双字
CMPS——>compare string 串比较,CMPSB比较字符、CMPSW
比较字
SCAS——>scan string 串扫描,把AL或AX的内容与目标
串作比较,比较结果反映在标志位
LODS——>load string 装入串,把源串中的元素(字或字
节)逐一装入AL或AX中,LODSB传送
字符、LODSW传送字、LODSD传送双字
STOS——>store string 保存串,是LODS的逆过程
REP——>repeat 当CX/ECX<>0时重复
REPE——>repeat when equal 当比较结果相等,且CX/ECX<>0时重复
REPZ——>repeat when zero flag 当ZF=1,且CX/ECX<>0时重复
REPNE——>repeat when not equal 当比较结果不相等,且CX/ECX<>0时重复
REPNZ——>repeat when zero flag 当ZF=0,且CX/ECX<>0时重复
REPC——>repeat when carry flag 当CF=1且CX/ECX<>0时重复
REPNC——>repeat when not carry flag 当CF=0且CX/ECX<>0时重复
五、程序转移指令
1>无条件转移指令(长转移)
JMP---->jump 无条件转移指令<br /> CALL---->call 过程调用<br /> RET---->return 过程返回<br /> RETF---->return far 过程返回
2>条件转移指令(短转移,-128到+127的距离内) :
当且仅当(SF XOR OF)=1时,OP1
JNB——>jump when not below 不小于时转移
JB——>jump when below 小于时转移
JNAE——>jump when not above or equal 小于时转移
JBE——>jump when below or equal 小于等于时转移
JNA——>jump when not above 小于等于时转移
以上条目,测试无符号整数运算的结果(标志C和Z)
JG——>jump when greater 大于转移
JNLE——>jump when not less or equal 大于转移
JGE——>jump when greater or equal 大于等于转移
JNL——>jump when not less 大于等于转移
JL——>jump when less 小于转移
JNGE——>jump when not greater or equal 小于转移
JLE——>jump when less or equal 小于等于转移
JNG——>jump when not greater 小于等于转移
以上条目,测试带符号整数运算的结果(标志S,O和Z).
JE——>jump when equal 等于转移
JZ——>jump when has zero flag 结果为0转移
JNE——>jump when not equal 不等于转移
JNZ——>jump when not has zero flag 结果不为0转移
JC——>jump when has carry flag 有进位转移
JNC——>jump when not has carry flag 无进位转移
JNO——>jump when not has overflow flag 不溢出时转移
JNP——>jump when not has parity flag 奇偶性为奇数时转移
JPO——>jump when parity flag is odd 奇偶性为奇数时转移
JNS——>jump when not has sign flag 符号位为0时转移
JO——>jump when has overflow flag 溢出时转移
JP——>jump when has parity flag 奇偶性为偶数时转移
JPE——>jump when parity flag is even 奇偶性为偶数时转移
JS——>jump when has sign flag 符号位为0时转移
3>循环控制指令(短转移)
LOOP---->loop CX不为零时循环<br /> LOOPE---->loop equal CX不为零且结果相等时循环(相等时Z=1)<br /> LOOPZ---->loop zero CX不为零且标志Z=1时循环<br /> LOOPNE---->loop not equal CX不为零且结果不相等时循环(相等时Z=0)<br /> LOOPNZ---->loop not zero CX不为零且标志Z=0时循环<br /> JCXZ---->jump when CX is zero CX为零时转移<br /> JECXZ---->jump when ECX is zero ECX为零时转移
4>中断指令
INT---->interrupt ECX为零时转移<br /> INTO---->overflow interrupt 溢出中断<br /> IRET---->interrupt return 中断返回
5>处理器控制指令
HLT---->halt 处理器暂停,直到出现中断或复位信号才继续<br /> WAIT---->wait 当芯片引线TEST为高电平时使CPU进入等待状态<br /> ESC---->escape 转换到外处理器<br /> LOCK---->lock 封锁总线<br /> NOP---->no operation 空操作<br /> STC---->set carry 置进位标识位 <br /> CLC---->clear carry 清进位标识位<br /> CMC---->carry make change 进位标识取反<br /> STD---->set direction 置方向标识位<br /> CLD---->clear direction 清方向标识位<br /> STI---->set interrupt 置中断允许位<br /> CLI---->clear interrupt 清中断允许位
六、伪指令
DW——>definw word 定义字(2字节)
PROC——>procedure 定义过程
ENDP——>end of procedure 过程结束
SEGMENT——>segment 定义段
ASSUME——>assume 建立段寄存器寻址
ENDS——>end segment 段结束
END——>end 程序结束
顺序
AX
CX
DX
BX
OF
如果运算结果超出了指定数据类型的正数或负数的有效范围,则产生溢出,OF=1
1字节溢出:
1字节的数范围:-128到127
1字节有符号数正数范围;0000 0000—0111 1111 0 7F
1字节有符号数负数范围;1000 0000—1111 1111 80 FF
CPU只能识别0和1,并不知道是有符号还是无符号,那它如何置位?
CPU通过 最高是否进位 异或 次高位是否进位
判断 OF
总结:
正+正=负 OF=1
负+负=正 OF=1
正+负 OF=0
8086分段机制
0xC4024
据 C000段 4024偏移 处
通过地址加法器——》即0xC4024
标识符
PTR :默认操作数大小的覆盖操作(通常和DWORD、WORD、BYTE等合用,用来确定要操作的数的位数)
——DWORD PTR:当前操作数大小为四个字节
moffs:Offset 相对段偏移
rel:relative address 相对位移数 (跳转指令)