汇编的指令

news/2025/2/21 7:36:39/

减法类指令:

不带借位的减法:

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=0002mov ax,1024
mov bx,2
mul bx ;此时ax=2048,dx=0000mov 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=0105mov 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。


http://www.ppmy.cn/news/1163827.html

相关文章

golang validator基于map规则验证集合和结构体

validator基于map规则验证集合和结构体 validator可以基于map规则进行集合的校验以及结构体的校验&#xff0c;同时支持嵌套校验 主要函数 validate.ValidateMap(map, rules) 验证集合 validate.RegisterStructValidationMapRules(structType, Data{}) 验证结构体 集合验证…

IntelliJ IDEA Maven加载超时问题

IDEA创建Maven项目遇到如下错误&#xff1a; Could not transfer artifact org.apache.maven.plugins:maven-compiler-plugin:pom:3.10.1 from/to central (Central Repository:): Connect to repo.maven.apache.org:443 [repo.maven.apache.org/146.75.112.215] failed: conn…

PostgreSQL与MySQL数据库对比:适用场景和选择指南

数据库是现代应用程序的基石之一&#xff0c;而在选择合适的数据库管理系统&#xff08;DBMS&#xff09;时&#xff0c;开发者常常会面临着许多选择。在这方面&#xff0c;PostgreSQL和MySQL是两个备受瞩目的选项。本文将深入研究这两者之间的异同&#xff0c;并为您提供适用场…

Linux生产者消费者模型

生产者消费者模型 生产者消费者模型生产者消费者模型的概念生产者消费者模型的特点生产者消费者模型优点 基于BlockingQueue的生产者消费者模型基于阻塞队列的生产者消费者模型模拟实现基于阻塞队列的生产消费模型 生产者消费者模型 生产者消费者模型的概念 生产者消费者模式就…

单链表算法经典OJ题

目录 1、移除链表元素 2、翻转链表 3、合并两个有序链表 4、获取链表的中间结点 5、环形链表解决约瑟夫问题 6、分割链表 1、移除链表元素 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; typedef struct ListNode LSNode; struct ListNode* remove…

日常中msvcp71.dll丢失怎样修复?分享5个修复方法

在 Windows 系统中&#xff0c;msvcp71.dll 是一个非常重要的动态链接库文件&#xff0c;它承载了许多应用程序和游戏的运行。如果您的系统中丢失了这个文件&#xff0c;那么您可能会遇到无法打开程序、程序崩溃或出现错误提示等问题。本文将介绍 5 个快速修复 msvcp71.dll 丢失…

XPS测试原理及样品要求-科学指南针

XPS测试原理 XPS, 全称为X-ray Photoelectron Spectroscopy(X射线光电子能谱)&#xff0c;是一种使用电子谱仪测量X-射线光子辐照时样品表面所发射出的光电子和俄歇电子能量分布的方法。通过收集在入射X光作用下&#xff0c;从材料表面激发的电子能量、角度、强度等信息对材料表…