汇编——算术运算指令
–Inc 自增1–Dec 自减1和 ADD/SUB 区别ADD AX,1会改动 CFINC和DEC不会–Add 加法指令 //直接加不考虑cf标志位的值–Adc 带进位的加法 //不仅将两个数相加还会加上cf标志位的值低位低位用add高位高位用adcadc指令在处理多位数加法时能够正确处理进位问题从而得到正确的结果–Sub 减法指令 //直接减–Sbb 带借位的减法 //不仅将两个数相减还会减去cf标志位的值比如AX01H,BX02HSUB AX,BX //AX0FFFFH产生借位 CF1SBB AX,BX //AX0FFFF-2 -10FFFDH–Neg 进行数据求补规则NEG op //op operand 操作数操作数≠0CF1操作数0CF0例MOV BL,0x80NEG BL //8 位 0x80 → -128–Mul 乘法指令 用于无符号数–Imul 乘法指令 用于有符号数例有两个8位无符号整数A5H和64H它们分别表示无符号整数165和100如果我们使用MUL指令对这两个数进行无符号乘法运算结果将是4074H表示无符号整数16500如果我们使用IMUL指令对这两个数进行有符号乘法运算假设A5H表示-9164H表示100结果将是DC74H表示有符号整数-9100除数不能是立即数,溢出直接触发 CPU 异常//立即数是写死在指令代码里的常数 mov bl,0x80 ; 0x80立即数–Div op 无符号数除法指令16位数除以8位数格式div 除数比如div cl除数由8位的通用寄存器或者内存单元提供被除数放在ax中结果商存放在al中余数存放在ah中32位数除以16位数格式div 除数比如div cx除数由16位的通用寄存器或者内存单元提供被除数低16位放在ax中高16位放在dx中结果商存放在ax中余数存放在dx中位数 被除数 除数 商 余数8 位除 AX r/m8 AL AH16 位除 DX:AX r/m16 AX DX32 位除 EDX:EAX r/m32 EAX EDX//r register(寄存器),m memory内存88 位 (1 字节)r/m8是【8 位寄存器】或【8 位内存单元】–Idiv 有符号数除法指令寄存器分配格式和DIV完全一致仅按补码有符号数运算注意被除数位数是除数两倍比如 16÷8 必须提前把符号扩展进DX