8086汇编(16位汇编)学习笔记04.乘除和移位指令

8086汇编(16位汇编)学习笔记04.乘除和移位指令-C/C++基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net乘法和除法指令用的不多,因为效率很低

比较指令CMP (compare)

•格式:CMP OPD,OPS

•功能:(OPD) — (OPS),跟减法指令很像,但是不存结果

•说明:目的操作数减去源操作数,然后根据结果设置标志位,但该结果并不存入目的地址。

•影响标志位:AF、CF、OF、PF、SF 、 ZF

• 作用:一般的后面跟一条条件转移指令,根据比较结果转向不同的程序分支,用于处理OPD和OPS大小比较的不同情况。

操作

跟一个比自己大的数比较, 结果看标志位 CF(借位/进位) 和 ZF (是否为0)

image.png

跟一个比自己小的数比较, 结果看标志位 SF(符号) 和 ZF (是否为0)

image.png

69 - 45 不产生借位,结果是正数,不为0.

跟一个与自己相等的数比较, 结果看标志位 ZF (是否为0)

image.png

69-69 结果为0,不为负数,不产生借位

乘法

计算机的乘法指令分为无符号乘法指令和有符号乘法指令。

它们的唯一区别就在于: 数据的最高位是作为“数值”参与运算,还是作为“符号位”参与运算。

功能:指令的功能是把显式操作数和隐含操作数相乘,并把乘积存入相应的寄存器中。

无符号乘法 MUL

格式:MUL Reg/Mem

MUL r8/m8; AX <- AL x r8/m8 ;如果源操作数是字节,则与AL相乘,结果存入AX(如果不满,则会覆写高位为00)

MUL r16/m16; DX.AX <- AX x r16/m16; 如果源操作数是字,则与AX相乘,结果高位放入DX,低位放入AX

功能:显式操作数*隐含操作数(看成无符号数)。

影响标志位:CF和OF。

位数 隐含的被乘数 乘积的存放位置 举例
8位 AL AX MUL BL
16位 AX DX-AX MUL BX
32位 EAX EDX-EAX MUL ECX

DX 存高位 AX 存低位

影响标志位:CF 和 OF ; 利用CF和OF判断成绩的高位是否有效。

两种标志位情况:

**●**要么CF = OF = 1;

○8位:说明结果超过了8位

○16位:说明结果超过了16位

**●**要么CF = OF = 0

○8位:都能存下

○16位:都能存下

8位 * 8位 结果 最多为 16位

16位 * 16位 结果最多为 32 位

代码

image.png

image.png

8位 * 8位 结果超过了8 位 , 所以 标志位 CF 和 标志位 OF 的值都为1 ( OV CY )

image.png

image.png

DX存结果的高位,AX存结果的低位 ,16位 * 16位 结果超过了16 位 , 所以 标志位 CF 和 标志位 OF 的值都为1 ( OV CY )

如果 8位 * 8位 结果不超过8位 , 16位 * 16 位结果不超过16位, 标志位 CF 和 标志位 OF 的值都为0 ( NV NC )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游戏安全实验室_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值