汇编的指令

减法类指令:

不带借位的减法:

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

相关推荐
188号安全攻城狮1 天前
【PWN】HappyNewYearCTF_2_栈上变量覆写1
linux·运维·汇编·安全·网络安全
草莓熊Lotso1 天前
Linux 进程创建与终止全解析:fork 原理 + 退出机制实战
linux·运维·服务器·开发语言·汇编·c++·人工智能
爱编码的小八嘎1 天前
汇编语言全接触-105.Natas 幽灵王病毒的分析
汇编
老鱼说AI2 天前
深入理解计算机系统1.5:抽象的重要性:操作系统与虚拟机
c语言·开发语言·汇编
猫猫的小茶馆3 天前
【Linux 驱动开发】一. 搭建开发环境
linux·汇编·arm开发·驱动开发·stm32·嵌入式硬件·mcu
猫猫的小茶馆3 天前
【Linux 驱动开发】二. linux内核模块
linux·汇编·arm开发·驱动开发·stm32·嵌入式硬件·架构
切糕师学AI4 天前
ARM 中的 SVC 监管调用(Supervisor Call)
linux·c语言·汇编·arm开发
ベadvance courageouslyミ4 天前
硬件基础中断
汇编·硬件·中断
你爱写程序吗(新H)4 天前
基于单片机的洗衣机控制系统设计 单片机洗衣机控制(设计+文档)
c语言·汇编·单片机·嵌入式硬件·matlab
VekiSon5 天前
ARM架构——用汇编语言点亮 LED
汇编·arm开发·嵌入式硬件