汇编语言精简版版权归属GuYue.Wang一、入门基础1.汇编基本格式2.内存管理:小端存储。3.寄存器16位CPU通用寄存器共8个:AX,BX,CX,DX,BP,SP,SI,DI,它们都可以作为普通的数据寄存器来使用,也有一些特殊的功能,如下:①数据寄存器AX:BX:存放偏移地址CX:循环次数(loop)DX:②指针寄存器SI:存放偏移地址,指向源操作数或作为变址寄存器,参与基址、变址寻址DI:存放偏移地址,指向目的操作数或作为变址寄存器,参与基址、变址寻址SP:堆栈指针,存放偏移地址,与SS结合使用BP:基址寄存器,存放偏移地址,与DS结合使用IP:指令指针③段寄存器CS:代码段DS:数据段SS:堆栈段ES:4.标志位①ZF(零标志位):结果为0,则ZF=1.②PF(奇偶标志位):结果所有bit位1的个数为偶数,PF=1③SF(符号标志位):有符号数运算,结果为负,SF=1④OF(溢出标志位):有符号数运算,发生溢出,OF=1⑤CF(进位标志位):无符号数运算,记录了最高有效位向更高位的进位或借位5.定义数据二、指令集1.数据传送指令1MOV目的操作数,源操作数①两个操作数位数一致②不能在两个存储单元之中进行数据直接传送③不能在两个段寄存器之间进行数据直接传送④imm不能直接送入段寄存器⑤目的操作数不能是CS,IP2XCHG目的操作数,源操作数:交换两个操作数的内容xchgreg,regxchgreg,memxchgmem,reg3LEAOP2,OP1:将OP1的地址偏移量传送给OP2①源操作数必须是内存操作数②目的操作数必须是16位的通用寄存器4PUSHOP,POPOP:堆栈①SS:栈段寄存器SP:栈顶指针(使用时应当先初始化)②一次压入或弹出一个字,栈顶最大变化范围0~FFFFH③执行PUSH、POP时,SP指针默认移动④栈空:SP指向栈空间最高地址单元的下一个单元⑤OP:段寄存器(除CS),16位通用寄存器,内存的16位字2.算数运算指令1ADDOP1,OP2|SUB目的,源①目的=目的+/-源②两操作数不能同时为mem(注:ADD、SUB影响标志位:CF、ZF、SF、OF、AF、PF)2INCreg/mem:自增1|DECreg/mem:自减1(注:INC、DEC适用于无符号运算,不影响进位标志CF)3NEGreg/mem:求负(求补),按位取反加1①影响标志位:CF、ZF、SF、OF、AF、PF4CMP,:目的操作数—源操作数,不回送结果,只影响标志位①根据相减结果修改OF、SF、ZF、CF、AF、PF②无符号数的比较:③有符号数的比较:5MUL乘数(无符号乘法)|IMUL乘数(有符号乘法)①乘数不能位imm②IMUL指令的执行结果的高半部分不是低半部分的符号扩展,则设置CF、OF6DIV除数(无符号除法)|IDIV除数(有符号除法)①除数不能位imm②IDIV:余数符号与被除数相同3.逻辑运算与移位指令1AND目的,源:按位相与,将结果保存在目的操作数中①总是清除OF和CF,根据结果修改SF、ZF、PF②对特定位清‘0’同时保留其他位③应用:字符大小写转化2OR目的,源:按位相或,将结果保存在目的操作数中①使CF=0、OF=0,根据结果修改SF、ZF、PF②对特定位置‘1’③将数字转化位对应的ASCII码3NOTreg/mem:按位取反,不影响任何标志位4XOR目的,源:按位异或,将结果保存在目的操作数中①对某些为取反,且不影响其它位,与‘0’异或保持不变;与‘1’异或取反②对寄存器清0,或判断两个值是否相等③交换两个数,不使用中间变量④CF=0,OF=0,PF、SF、ZF变5TESTOP,imm:按位相与,不回送结果①清除OF、CF;修改SF、ZF、PF②测试某些位是‘0’或‘1’6SHL、SHR①格式:SHLmem/reg,1SHLmem/reg,CL(移动次数1放入CL)②③相当于乘除法4.程序控制指令1JMP:无条件转移指令2LOOP:循环指令,循环次数存于cx中,执行loop时首先CX=CX-1,然后判断CX=0?,是则跳转3条件跳转指令①基于特定的标志值②根据操作数之间是否相等,或根据(E)CX的值与CMPleft,right指令结合使用③基于无符号整数比较结果的跳转指令④基于有符号整数比较结果的跳转指令5.输入输出指令(接口与CPU之间的操作)1INAL|AX,接口地址:从接口到CPU的输入操作2OUT接口地址,AL|AX:从CPU到接口的输出操作①CPU只能用AL或AX接收或发送数据②直接寻址(接口地址用一个字节表示00~FFH)INAL,35HOUT44H,AX③寄存器间接寻址(接口地址由DX内容决定0000~FFFFH)MOVDX,03F8HINAL,DX三、补充1.CLC:使CF=02.ADCop1,op2:op1=op1+op2+CF