汇编的指令

减法类指令:

不带借位的减法:

复制代码
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=0001 

1、如果被除数为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。

相关推荐
我在人间贩卖青春5 天前
汇编之伪指令
汇编·伪指令
我在人间贩卖青春6 天前
汇编之伪操作
汇编·伪操作
济6176 天前
FreeRTOS基础--堆栈概念与汇编指令实战解析
汇编·嵌入式·freertos
myloveasuka6 天前
汇编TEST指令
汇编
我在人间贩卖青春6 天前
汇编编程驱动LED
汇编·点亮led
我在人间贩卖青春6 天前
汇编和C编程相互调用
汇编·混合编程
myloveasuka6 天前
寻址方式笔记
汇编·笔记·计算机组成原理
请输入蚊子7 天前
《操作系统真象还原》 第六章 完善内核
linux·汇编·操作系统·bochs·操作系统真像还原
myloveasuka7 天前
指令格式举例
汇编·笔记·计算机组成原理
我在人间贩卖青春7 天前
汇编之分支跳转指令
汇编·arm·分支跳转