汇编的指令
- 电脑硬件
- 2025-08-16 02:33:05

减法类指令: 不带借位的减法: sub dest,src;dest=(dest)-(src)
注意: 1、源操作数和目的操作数不能同时为段寄存器或存储单元
2、对标志位有影响,主要影响CF、ZF、OF、SF。
带借位的减法: sbb dest,src;dest=(dest)-(src)-(CF)注意: 1、源操作数和目的操作数不能同时为存储单元。
2、段寄存器不能进行算数运算。
减一指令: dec reg/mem;reg表示寄存器,mem表示存储单元注意:操作数不能为立即数。
取补指令: neg reg/mem;reg/mem=0-(reg)/(mem)取补指令是对该数逐位取反(包括符号位)后加一。
注意:操作数不能为立即数。
NEG对标志位的影响
CF:当OPFRG=0时 CF=0 否则CF=1
OF;当OPFRG为负的最小值时OF=1否则OF=0
比较指令: cmp dest,srg;比较dest和srg的大小用dest减去srg并根据结果改变标志位,但不记录相减结果。
若执行指令后:ZF=1,则说明两个数相等,因为zero为1说明结果为0.
当无符号时:
若CF=1,则说明了有进位或借位,cmp是进行的减操作,故可以看出为借位,所以,此时oprd1<oprd2;
CF=0,则说明了无借位,但此时要注意ZF是否为0,若为0,则说明结果不为0,故此时oprd1>oprd2.
当有符号时:
若SF=0,OF=0 则说明了此时的值为正数,没有溢出,可以直观的看出,oprd1>oprd2;
若SF=1,OF=0 则说明了此时的值为负数,没有溢出,则为oprd1<oprd2;
若SF=0,OF=1 则说明了此时的值为正数,有溢出,可以看出oprd1<oprd2;
若SF=1,OF=1则说明了此时的值为负数,有溢出,可以看出oprd1>oprd2;(来自CSDN)
进位和溢出的区别:某种意义上来说of是表示有符号数的溢出,cf是表示无符号数的溢出。
(来自CSDN)
乘法: 无符号的乘法: mul mem/reg;操作数不能为立即数功能:完成两个不带符号的八位或十六位数字相乘,乘积存放在ah、al或dx、ax中。例:被乘数是bl默认乘数为al,乘积存放在ah、al中;被乘数为bx乘数默认为ax,乘积存放在dx,ax中。如果乘积的高半部分不为零,则 MUL 会把进位标志位和溢出标志位置改为1。目的操作数只能是通用寄存器。
;以下均为16进制 mov ax,1001 mov bx,2 mul bl ;此时ax=0002 mov ax,1024 mov bx,2 mul bx ;此时ax=2048,dx=0000 mov ax,1024 mov bx,100 mul bx ;此时ax=4800,dx=0020 有符号数的乘法: imul ax,bx;ax=(ax)*(bx)功能:完成两个不带符号的八位或十六位数字相乘,乘积存放在ah、al或dx、ax中。例:被乘数是bl默认乘数为al,乘积存放在ah、al中;被乘数为bx乘数默认为ax,乘积存放在dx,ax中。如果乘积的高半部分不为零,则 MUL 会把进位标志位和溢出标志位置改为1。目的操作数只能是通用寄存器。
除法指令 无符号数的除法: mov ax,10 mov bx,3 div bl;ax=0105 mov ax,10 mov bx,3 div bx;ax=0005 bx=00011、如果被除数为16位除数为8位,则被除数默认存储在ax中,如果被除数为32位除数为16位,默认被除数高位存储在dx中低位存储在ax中。
2、如果除数为8位那么商默认存储在al中,余数存储在ah中。
3、如果除数为16位那么商默认存储在ax中,余数存储在dx中
有符号数的除法: idiv src同上
除法指令的特殊情况:1、除数为零
2、除数溢出,例如:
mov ax,1000 mov bl,2 div bl;此时中断标志更改 BCD调整指令:请看博客园
逻辑运算逻辑与and
逻辑或or
异或xor
逻辑非not:求反码
test:将两个操作数按位与,只保留标识符不保留运算结果。经常用于判断测试位是否为零。
移位和循环移位指令 算数移位指令:SAL为算数左移指令,算数左移一次或cl指定次数。
SAR为算数右移指令,算数右移一次或cl指定次数。
算数移位代表有符号数的乘二除二。
逻辑移位指令SHL为算数左移指令,算数左移一次或cl指定次数。
SAL为算数右移指令,算数右移一次或cl指定次数
逻辑移位和算术移位的区别:
逻辑移位逻辑移位是指逻辑左移和逻辑右移,移出的空位都用0来补。
算术移位算术移位 就需要分有符号型值和无符号型值 对于无符号型值,算术移位等同于逻辑移位。 而对于有符号型值 ,算术左移等同于逻辑左移,算术右移补的是符号位,正数补0,负数补1
(来自CSDN)
OF:当移动次数为1时若操作改变了最高位OF为1,否则为0,其余情况无意义
循环移位带进位:RCL、RCR。
不带进位:ROL、ROR。