www.jmpoep.com
第二课.汇编语言-8086指令、典型函数调用约定
代课:BambooQJ论坛:WwW.JmpOep.CoM 一.8086 指令1.数据传送指令MOV功能: 把源操作数送给目的操作数语法: MOV 目的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,data XCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH操作数POP 操作数格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA功能:堆栈指令群格式: PUSHF POPF PUSHA POPA LEA,LDS,LES功能: 取地址至寄存器语法: LEA r,m LDS r,m LES r,mLea eax,[esp] = mov eax,[esp]Lea eax,[esp+4] != mov eax,[esp+4] XLAT(XLATB)功能:查表指令语法: XLAT XLAT mMOV BX,2000H ;BX←表首地址MOV AL,0BH ;AL←序号XLAT ;查表转换2.算数运算指令
ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,O SUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data影响标志: C,P,A,Z,S,O INC,DEC功能: 把OP的值加一或减一语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,O MUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) DⅣ,IDⅣ功能:除法指令语法: DⅣ OP IDⅣ OP格式: DⅣ r/m IDⅣ r/m 3.逻辑运算指令NEG功能: 将OP的符号反相(取二进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,O CBW,CWD功能:有符号数扩展指令语法: CBW CWD AAA,AAS,AAM,AAD功能: 非压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS功能:压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S 4.位运算集AND,OR,XOR,NOT,TEST功能: 执行BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位 SHR,SHL,SAR,SAL功能:移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL影响标志: C,P,Z,S,O ROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL影响标志: C,P,Z,S,O 5.程序流程控制集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: C CLD,STD功能: 设定方向标志语法: CLD STD标志位: D CLI,STI功能: 设定中断标志语法: CLI STI标志位: I CMP功能: 比较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,O为第一个操作减去第二个操作数,但不影响第两个操作数的值它影响flag的CF,ZF,OF,AF,PF我们怎么判断大小呢?若执行指令后ZF=1 这个简单,则说明两个数相等,因为zero为1说明结果为0若SF=1,OF=1则说明了此时的值为负数,有溢出,可以看出oprd1>oprd2 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: PARITY EVEN,P=1时成立PO: PARITY ODD,P=0时成立S: SIGN,S=1时成立Z: ZERO,Z=1时成立 LOOP功能: 循环指令集语法: LOOP 地址 LOOPE(Z)地址 LOOPNE(Z) 地址标志位: 无 CALL,RET功能:子程序调用,返回指令语法: CALL 地址 RET RET n标志位: 无 INT,IRET功能: 中断调用及返回指令语法: INT n IRET标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器串操作集 MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: 无 CMPSB,CMPSW,CMPSD功能: 字符串比较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,O SCASB,SCASW功能: 字符串搜索指令语法:SCASBSCASW标志位: C,P,Z,S,O LODSB,LODSW,STOSB,STOSW功能: 字符串载入或存贮指令语法:LODSBLODSWSTOSBSTOSW标志位: 无 REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S而定二.常见函数调用约定
常见三种调用约定 Fastcall Cdecl StdCall代表: GCC C/C++/java Win系统APIXxx (1,2,3)Push 3Push 2Push 1Call xxx