常见汇编命令英文缩写
寄存器类(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  相对位移数                               (跳转指令)
