【16位汇编】neg+sbb算术运算代替逻辑跳转

汇编语言:adc指令 和 sbb指令 adc (add carry)是带向假想的更高位进位加法指令,它利用了标志寄存器上 CF 标志位记录的进位值。CPU 提供 adc 指令的目的是用 adc 指令和 add 指令相配合,从而可以对更大的数据进行加法运算。sbb(subborrow)是带向假想的更高位借位减法指令,它利用了标志寄存器上 CF 标志位记录的进位值。CPU 提供 sbb指令的目的是用 sbb指令和 sub指令相配合,从而可以对更大的数据进行减法运算。 阅读详情

举例代码如下

 这句代码的关键点是neg 和sbb

相关知识点

neg(求补指令)

NEG指令除了对操作数作符号取反外 会根据操作数来修改标志位CF

当操作数为0是CF修改为0  否则CF修改为1


sbb( 带借位减法指令)
SBB reg,imm/reg/mem ;reg←(reg-(imm/reg/mem)-CF)

SBB mem,imm/reg ;mem←mem-imm/reg-CF

mov ax,1    ;
sub ax,1
neg ax
sbb ax,ax
mov bx,4
lea bx,[bx-4*ax]

mov ax,1      ;ax = 1
sub ax,1      ;ax = 0
neg ax        ;ax = 0 CF = 0
sbb ax,ax     ;CF = 0 ax = 0
mov bx,4      ;bx = 4
lea bx,[bx-4*ax] ;bx = 4
最后bx = 4

mov ax,2      ;ax = 2
sub ax,1      ;ax = 2
neg ax        ;ax = 1 CF = 1
sbb ax,ax     ;CF = 1 ax = -1
mov bx,4      ;bx = 4
lea bx,[bx-4*ax] ;bx = 8
最后bx = 8

并且发现最后结果只有两种可能4或8
"模板"   一下伪代码
int  nFlag
mov ax,nFlag 
sub ax,1   
neg ax      
sbb ax,ax 
mov bx,4   
lea bx,[bx-4*ax]
这句相当于就是
if(nFlag = 1)
 bx = 4
else
 bx = 8
这样使用算术运算代替了逻辑运算 大大减少

了CPU运算周期


达到程序优化效果

 

汇编期末 汇编 记忆部分 进制转换 逻辑地址转换物理地址 1234h:0058h = 12340h+0058h = 12398h 数据存放为小端原则 低字节在前,比如 12h 34h 56h 78h 短跳,近跳 jmp short target 机器码:EBXX jmp near ptr target 机器码:E9XXXX 近跳的相对长度只能有1个字节长 近跳占3个字节,也就是近跳... 阅读详情

相关推荐

VSCode玩转Arduino:手把手解决‘未定义Serial’和头文件找不到的坑

本文详细介绍了在VSCode中配置Arduino开发环境时遇到的‘未定义Serial’和头文件找不到问题的解决方案。通过修改c_cpp_properties.json文件、调整IntelliSense引擎设置以及添加正确的库路径,开发者可以高效解决这些常见错误,提升开发体验。文章还提供了针对不同开发板和平台的高级配置技巧,确保配置的长期有效性。

weixin_42620202的博客 355

汇编中的借位减法指令SBB

SBB的含义 sbb是带借位减法指令,它利用了CF位上记录的借位值。 指令格式:sbb 操作对象1,操作对象2 功能:操作对象1=操作对象1-操作对象2-CF SBB与SUB的区别 SUB AX,BX 的结果是 AX-BX SBB AX,BX 的结果是 AX-BX-CF(进/借位标志) 例子 将DX:AX中存放的32位无符号数减去BX内的16位无符号数 SUB AX,BX ;结果的低1

abe的博客 2万+

Wio-LR1121多频段LoRa模块技术解析与应用实践

LoRa技术作为低功耗广域物联网(LPWAN)的核心通信方案,通过独特的扩频调制技术实现远距离传输与强抗干扰能力。其工作原理基于CSS(Chirp Spread Spectrum)调制,支持动态调整扩频因子(SF)和带宽(BW)来平衡传输距离与数据速率。Wio-LR1121模块作为Semtech LR1121芯片的载体,创新性地整合了sub-GHz、S-Band和2.4GHz多频段支持,配合仅1.35μA的睡眠电流,为跨境物联网部署提供了硬件基础。在智慧农业、工业监测等场景中,开发者可通过SPI接口快速集成

weixin_33742618的博客 415

neg+sbb指令

neg指令:intel指令手册是这样说明的 IF DEST = 0 THEN CF ELSE CF 就是说,当操作数为0时,cf标志为0,否则cf被置1.(这让我们联想到c语言中很多函数返回0和非0,然后用if来判断0或者非0走不同的分支) neg指令的作用就是对操作数求反,neg eax :用伪代码表示就是 eax = -eax;

tianxiajianling的专栏 5124

OnlyOffice Docker部署实战:解除20连接限制+500M文件上传配置(附中文字体解决方案)

本文详细介绍了OnlyOffice企业级Docker部署的全过程,包括解除20并发连接限制、提升文件上传大小至500MB以及解决中文字体显示问题。通过定制镜像、优化配置和字体安装,帮助技术团队快速搭建高性能的文档协作平台,适用于企业级应用场景。

weixin_26850069的博客 440

11、ThingsBoard集群部署k8s

今天终于有时间去搞这个啦,拖了很久了,一直没时间,因为我本地没有那么多机器资源,开虚拟机不够,如果租用阿里云服务器,需要有充值的时间,因为这个费用是按小时付费,需要有连贯的时间来搞才行,今天恰好有时间,就开始搞了,弄成功搞出来了,特地写博客记录下来。

AldrichEugene 990

汇编语言--sbb指令

sbb是带借位减法指令,它利用了CF位上记录的借位值。 指令格式:sbb 操作对象1, 操作对象2 功能:操作对象1 = 操作对象1 - 操作对象2 - CF

2万+

【DRAM存储器四十七】LPDDR5介绍--LPDDR5的低功耗技术之DVFS

讲述LPDDR5的DVFSC和DVFSQ的工作原理和要求

highman110的博客 897

汇编语言中sbb是什么意思_汇编语言里 sub是 什么功能?

展开全部减法指令,不带借位的减法指令。e69da5e887aa3231313335323631343130323136353331333433626535SUB (subtract) 指令的汇编格式:SUB dst,src 指令的基本功能:(dst)指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。指令对标志位的影...

weixin_39632379的博客 3586

【Kubernetes】怎么根据pod找到关联的deployment呢

在文章中我们删除pod需要删除deployment,那么怎么根据pod找到关联的deployment呢。

九师兄 504

Android AICore的核心组件工作原理解析

AICore通过LoRA实现个性化适配Gemini Nano提供多模态智能Safety Features保障可信运行,构建了端侧AI的完整生态。这种设计不仅让手机等移动设备能处理复杂AI任务(如实时多模态交互),还通过隐私保护机制打破了传统云端AI的数据依赖,为未来“设备即AI基础设施”的愿景奠定了基础。输入触发:用户输入“刚提交了代码,等审核”→ 进入TEE加密处理。Gemini Nano基础生成:通过原始权重W_q生成初始回复候选。LoRA个性化微调:通过A'和B'计算ΔW,更新W_q。

1551

x86汇编语言入门基础(三)汇编指令篇2 算术运算

x86汇编指令介绍第二篇:指令语法格式、算术运算指令:add, sub, inc, dec, neg、文档查阅中的o..szapc字段

JUST FOR FUN, CALM DOWN 971

华为OD机考双机位C卷 - 采购订单 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 采购订单 。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 426

汇编初学ing

下面三个标志位了解即可。

2402_88204050的博客 1035

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【debug】汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等 2017年11月12日 15:01:09zmmycsdn阅读数 19334 转自:http://www.cnblogs.com/del/archive/2010/04/16/1713886.html http://pan.baidu.com/s/1gVTSi 跳转指令分三类: 一、无条...

viviliving的专栏 5623

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

转自:http://www.cnblogs.com/del/archive/2010/04/16/1713886.html http://pan.baidu.com/s/1gVTSi 跳转指令分三类: 一、无条件跳转: JMP ;无条件跳转 二、根据CX、ECX寄存器的值跳转: JCXZ ;CX 为 0 则跳转 JECXZ;ECX 为 0 则跳转

zmmycsdn的博客 12万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

http://www.cnblogs.com/del/archive/2010/04/16/1713886.html 跳转指令分三类: 一、无条件跳转: JMP; 二、根据 CX、ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转)、JECXZ(ECX 为 0 则跳转); 三、根据 EFLAGS 寄存器的标志位跳转, 这个太多了. 根据标志位跳转的指令: JE

wwwwws的专栏 2万+

8086汇编语言-指令参考手册

微处理器硬件基础 微处理器外部结构 微处理器内部结构 微处理器功能结构 指令默认地址 微处理器状态字PSW 附:ASCII码表 数据传送类指令 通用传送指令 MOV DST,SRC 将某寻址方式指定的源操作数传送到某寻址方式指定的目的操作数中去。 注意: 立即数不能送给段SEG; 两个存储单元之间不能直接操作; 两个段REG之间不能互传数据; 双操作数指令类型必须匹配(立即数【由...

NULL的博客 5393

逆向——汇编

逆向——C语言(一)C语言(一) C语言(一)

wk19951125的博客 1305

汇编总结 标志位/指令

转载http://www.figoyao.com/blog/2009/12/09/182 一、标志位操作指令1、进位CF标志操作指令清零标志位CLC:CF置位标志位STC:CF标志位取反CMC:CF2、方向位DF操作指令清零方向位CLD:DF置位方向位STD:DF3、中断允许位IF操作指令清零CLI:IF置位STI:I

Tony 的博客 3307

汇编指令汇总2

指令汇总 简单传送指令 mov 传送 xchg 交换 加减指令 add 简单加法 sub 简单减法 adc 带进位加法 sbb 带进位减法 inc 自增 dec 自减 neg 取反 乘除指令 mul 无符号乘法 imul 有符号乘法 div 无符号除法 idiv 有符号除法 符号扩展指令 cbw 字节扩展为字 cwd 字扩展为双字 cdq 双字扩展为四字 cwde 另一条字转换为双字

keepwalking111的博客 2309

汇编语言常用指令汇总

详细介绍8086汇编语言的常见指令和一些标志位和常见中断的注意事项。适用于刚学汇编语言的小白和对于基础知识想要更深入了解的同学。

flyunicorninsky的博客 5901

汇编学习(7)——指令汇总

文章目录指令汇总简单传送指令mov 传送xchg 交换加减指令add 简单加法sub 简单减法adc 带进位加法sbb 带进位减法inc 自增dec 自减neg 取反乘除指令mul 无符号乘法imul 有符号乘法div 无符号除法idiv 有符号除法符号扩展指令cbw 字节扩展为字cwd 字扩展为双字cdq 双字扩展为四字cwde 另一条字转换为双字指令扩展传送指令movsx 符号扩展传送movz...

lyh_lcz的博客 2375

微机原理——汇编语言

关于汇编语言指令的整理,欢迎各位交流学习

qq_44868018的博客 2072

汇编学习笔记

一个拼图工具的制作思路 - 回复 "AlwaysBug" 的问题 将 4 个 Byte 合成 1 个 Integer 的五种方法 - 回复 "三足乌" 的问题 学 Win32 汇编[31] - 结构与联合 关于 "高位" 与 "低位" - 回复 "Lovemit" 的问题 学 Win32 汇编[30] - 条件及循环伪指令: .IF、.WHILE、.REPEAT 等 如何把类中的方法做参...

优快云1332531529的博客 172

一篇速成 汇编程序语言设计之 8086 汇编核心指令

本文介绍了8086汇编语言的核心指令,分为四大类:数据传送、算术运算、逻辑操作和串处理指令。数据传送指令包括MOV、PUSH/POP、XCHG等,用于数据搬运;算术指令如ADD、SUB、MUL等实现基本运算;逻辑指令如AND、OR、SHL等处理位操作;串处理指令如MOVSB、STOSB等可高效批量操作内存数据。文章通过通俗比喻和代码示例讲解指令用法,帮助初学者快速掌握汇编语言基础。附录提供了完整的参考程序,演示了各类指令的实际应用场景。

2401_87662859的博客 459
上一篇: VC虚拟键列表
下一篇: 汇编的进位与溢出
cmdhack
博客等级 码龄19年 20粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值