当前位置: 首页 > article >正文

mov指令的高低位处理规则

核心主旨与关键规则文档的核心在于阐明一个基本规则大多数mov指令只更新其操作数大小指定的字节唯一的例外是当movl32位移动以寄存器为目的时它会将该寄存器的高32位清零**。**这个规则源于x86-64的编程惯例任何产生32位结果的指令都会自动将该结果零扩展到64位。这简化了在64位环境中运行遗留32位代码并避免了依赖寄存器中残留的旧高位数据。第一部分MOV指令的基本形式与行为文档首先定义了MOV指令的基本格式和操作数匹配原则。操作数大小匹配指令后缀b,w,l,q必须与寄存器部分指定的大小相匹配。例如使用%eax就必须配合movl。常规行为MOV通常只更新目的操作数指定大小的字节。movb更新最低1字节。movw更新低2字节。movq更新全部8字节。特殊规则movl的零扩展行为当movl的目的操作数是寄存器时它不仅将32位值写入该寄存器的低32位还会将该寄存器的高32位比特63-32设置为0。原因这是x86-64的硬性规定旨在确保32位操作的结果在64位寄存器中是一个完整、干净的值即高32位为0便于后续的64位使用也避免了隐蔽的错误。示例分析文档中的示例movabsq $0x0011223344556677, %rax # %rax 0x0011223344556677 movb $0xFF, %al # 只改低8位 - %rax 0x00112233445566FF movw $0xFFFF, %ax # 只改低16位 - %rax 0x001122334455FFFF movl $0xFFFFFFFF, %eax # 改低32位并清零高32位 - %rax 0x00000000FFFFFFFF movq $0xFFFFFFFF, %rax # 改全部64位注意立即数符号扩展 - %rax 0xFFFFFFFFFFFFFFFF第二部分扩展移动指令MOVZ和MOVS当需要将较小的数据复制到较大的寄存器时有两种策略零扩展和符号扩展。MOVZ系列零扩展移动行为将源操作数较小复制到目的寄存器的低位并将目的寄存器中剩余的高位用0填充。命名规则指令名如movzbw其中z表示零扩展b表示源大小为字节w表示目的大小为字。适用场景处理无符号数的扩展。例如将一个unsigned char提升为int。MOVS系列符号扩展移动行为将源操作数较小复制到目的寄存器的低位并将目的寄存器中剩余的高位用源操作数的最高位符号位的副本填充。命名规则指令名如movsbq其中s表示符号扩展b表示源大小为字节q表示目的大小为四字。适用场景处理有符号数的扩展。例如将一个signed char提升为long long。特殊指令cltq这是movslq %eax, %rax的专用紧凑编码用于将%eax符号扩展到%rax。关键对比示例文档中的旁注movabsq $0x0011223344556677, %rax # %rax 0x0011223344556677 movb $0xAA, %dl # %dl 0xAA (二进制10101010最高位1负数) movb %dl, %al # 仅复制字节 - %rax 0x00112233445566AA (高位不变) movsbq %dl, %rax # 符号扩展字节到四字 - %rax 0xFFFFFFFFFFFFFFAA (高位全补1) movzbq %dl, %rax # 零扩展字节到四字 - %rax 0x00000000000000AA (高位全补0)movb不改变高位高位保持原值0x00112233445566。movsbq符号扩展因为源字节0xAA最高位是1负数所以高位全部填充1。movzbq零扩展无论源值是什么高位全部填充0。第三部分数据传送指令的应用与练习文档通过示例和练习题展示了这些指令在实际编程尤其是涉及类型转换和指针操作时中的应用。exchange函数示例long exchange(long *xp, long y) { long x *xp; *xp y; return x; }汇编实现清晰地展示了如何用movq从内存读 (*xp) 到寄存器以及从寄存器写回内存 (*xp y)。关键点C语言的“指针”在机器级就是地址。*xp这样的操作对应着使用寄存器中的地址进行内存访问 ((%rdi))。局部变量如x通常保存在寄存器如%rax中而不是内存以提升速度。练习题 3.4类型转换与指令选择该练习要求根据源类型 (src_t) 和目的类型 (dest_t) 选择正确的数据移动指令。核心原则当类型转换涉及大小变化和有/无符号性变化时先改变大小。根据源类型是有符号还是无符号决定使用MOVS符号扩展还是MOVZ零扩展。示例char-intmovsbl(有符号char符号扩展到int)unsigned char-longmovzbq(无符号char零扩展到long但注意movl也能实现因为以寄存器为目的的movl会清零高32位等效于零扩展到64位)练习题 3.5decode1函数逆向给出一段汇编代码要求还原出等价的C代码。这锻炼了理解数据流和控制流的能力。解题关键跟踪三个指针参数 (xp,yp,zp) 所指向内存位置的值如何通过临时寄存器 (%r8,%rcx,%rax) 进行交换。第四部分栈操作指令 (PUSH和POP)文档最后简要介绍了用于程序栈操作的指令。栈的生长方向在x86-64中栈是向下增长的向低地址方向。栈顶由栈指针寄存器%rsp指向。pushq S指令等效操作%rsp %rsp - 8; *(%rsp) S;作用先将栈指针减8为新的8字节数据腾出空间然后将源操作数S写入新的栈顶位置。popq D指令等效操作D *(%rsp); %rsp %rsp 8;作用先从当前栈顶读取8字节数据到目的操作数D然后将栈指针加8释放该空间。栈的本质栈是内存中的一个区域程序可以用普通的内存寻址方式访问栈内的任何位置例如movq 8(%rsp), %rdx读取栈中第二个四字。总结与要点归纳movl清零高位这是x86-64的硬性规定是理解32位与64位操作交互的基础。扩展移动MOVZ用于无符号数扩展高位补0MOVS用于有符号数扩展高位补符号位。cltq是%eax符号扩展到%rax的快捷指令。立即数限制标准movq指令的立即数实际上是32位然后符号扩展为64位。要传送任意64位立即数需使用movabsq。指针即地址C语言中的指针解引用 (*p) 在汇编中对应于以寄存器中地址为基址的内存访问 ((%reg))。栈操作push/pop是调整栈指针并伴随内存读写的复合指令是函数调用实现的基础。指令选择在C语言类型转换的上下文中选择正确的数据移动指令 (mov,movs,movz) 至关重要它直接决定了高位填充的规则影响程序正确性。

相关文章:

mov指令的高低位处理规则

核心主旨与关键规则文档的核心在于阐明一个基本规则:大多数 mov 指令只更新其操作数大小指定的字节,唯一的例外是当 movl(32位移动)以寄存器为目的时,它会将该寄存器的高32位清零**。**这个规则源于 x86-64的编程惯例&…...

从抓包分析看BLE ATT协议:手把手教你用nRF Sniffer解读空中交互的PDU

从抓包分析看BLE ATT协议:手把手教你用nRF Sniffer解读空中交互的PDU 蓝牙低功耗(BLE)技术已成为物联网设备通信的核心支柱,而属性协议(ATT)作为其数据交互的基础层,直接决定了设备间如何高效可…...

3步解锁音乐自由:qmc-decoder帮你将QQ音乐专有格式转换为MP3/FLAC

3步解锁音乐自由:qmc-decoder帮你将QQ音乐专有格式转换为MP3/FLAC 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否遇到过这样的困扰:从QQ音乐…...

3个技巧轻松搞定代码复杂度分析:Lizard助你写出高质量代码

3个技巧轻松搞定代码复杂度分析:Lizard助你写出高质量代码 【免费下载链接】lizard A simple code complexity analyser without caring about the C/C header files or Java imports, supports most of the popular languages. 项目地址: https://gitcode.com/gh…...

JetBrains IDE试用期重置终极指南:简单三步无限续杯

JetBrains IDE试用期重置终极指南:简单三步无限续杯 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 还在为JetBrains IDE试用期到期而烦恼吗?IDE Eval Resetter是解决这个问题的完美工具&a…...

LangChain之大模型介绍

一、认识模型模型是一个从数据中学习规律的“数学函数”或“程序”。旨在处理和生成信息的算法,通常模仿人 类的认知功能。通过从大型数据集中学习模式和洞察,这些模型可以进行预测、生成文本、图像或其 他输出,从而增强各个行业的各种应用。…...

SAP AVC实战:从MTO订单到交付的可配置物料全链路解析

1. 可配置物料的前世今生:从LO-VC到AVC的进化之路 第一次接触可配置物料是在2015年,当时客户需要定制一批液压系统,每个订单的参数都不同。传统做法是给每个变体创建独立物料号,结果一个月下来物料主数据暴涨300%,MRP跑…...

echarts 折柱混合图,渐变切图例和x轴滚动可自动切换

echarts 折柱混合图,渐变切图例和x轴滚动可自动切换,并且自定义图例,一般使用在大屏项目上,效果如图getSZCharts(val) {this.mySZFXChart this.$echarts.init(document.getElementById("isSZCharts"));let bardata1 [6, 6, 5, 3, 8];let bardata2 [8, 8, 8, 6, 7]…...

从‘饱和’与‘残存失调’聊起:手把手分析OOS与IOS两种失调消除技术该怎么选

从‘饱和’与‘残存失调’谈OOS与IOS技术选型:工程师的决策指南 在高速高精度比较器设计中,失调消除技术的选择往往成为影响整体性能的关键决策点。当您面对一个增益设计较高的前置放大器时,输出饱和风险与残余失调容忍度之间的矛盾会变得尤为…...

Pearcleaner:为你的Mac来一次彻底的数字大扫除

Pearcleaner:为你的Mac来一次彻底的数字大扫除 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾经疑惑过,为什么删除了一个应…...

如何批量清理文件名数字前缀?3个方法一键批量清理文件名数字前缀

一、为什么文件名要删数字?先聊聊这些数字编号的"坑":比如项目结束后整理资料,"3.最终版PPT"和"5.最终版PPT"混在一起,发邮件时领导可能收到错版本;或者客户突然要旧资料,按…...

文档插件《道斯通图》不震撼首发 免费下载直接使用

最后有下载地址,免费下载,安装后直接使用。(限时7天)后续会在视频平台发布详细的操作视频教程,以下操作流程仅供参考。你是否还在为 Word 文档处理繁琐操作头疼?批量合并、格式转换、排版统一、内容替换、图…...

基于单片机的超声波避障小车(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T1932310M设计简介:本设计是基于单片机的超声波避障小车,主要实现以下功能:通过温度传感器检测温度 通过超声波模块检测…...

办公族必看!5个亲测有效的PPT压缩方法,轻松减小文件大小提升效率

在数字化办公场景中,PPT文件体积过大已成为职场人普遍面临的难题。无论是邮件发送时被系统拦截、在线平台上传超时,还是会议演示时因文件臃肿导致设备卡顿,都会严重影响工作效率。本文基于大量职场用户实测数据,系统拆解五种不同场…...

【实战】工程造价从业者如何快速搭建AI辅助系统(附DMXAPI接入指南)

一、前言 本文面向有一定技术基础、想快速在内部系统接入AI能力的开发者。通过一个真实项目案例,讲解如何借助DMXAPI实现多模型统一调用,同时控制开发成本。二、需求背景 维度 具体需求 业务场景 工程造价智能辅助系统 核心功能 历史清单智能分…...

YOLOv26蜜蜂识别检测系统:8080张图像+PyQt5界面+模型权重+远程部署(含训练曲线/混淆矩阵)

摘要 本文基于YOLO26目标检测算法构建了一套蜜蜂识别检测系统,用于自动识别图像中的蜜蜂目标。数据集共包含8,080张标注图像(训练集5,640张、验证集1,604张、测试集836张),类别仅为bees。实验结果表明,模型在验证集上的…...

Windows开发环境配置

1、安装JDK 1.1、jdk 8 D:\software\Java\jdk1.8.0_2021.2、jdk 17 D:\software\Java\jdk-171.3、jdk 25 D:\software\Java\jdk-251.4、配置环境变量 JAVA8_HOMED:\software\Java\jdk1.8.0_202 JAVA25_HOMED:\software\Java\jdk-25 JAVA_HOME%JAVA8_HOME%1.5、配置Path2、安装M…...

用魔法打败魔法:AI代码提示词验证流程

三步走:第一步:让AI根据我的要求给我写提示词和精简提示词;第二步:把AI提供的提示词写到AI中,让AI生成代码;第三步:把AI写的代码问AI是否可以编译和运行通过。循环三步,得到较好的提…...

城通网盘加速终极指南:3步免费突破下载限制,速度提升10倍!

城通网盘加速终极指南:3步免费突破下载限制,速度提升10倍! 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘的龟速下载而烦恼吗?ctfileGet是…...

别再手动抄坐标了!用Python一键提取UG模型边界点(附完整代码)

用Python自动化提取UG模型边界坐标的工程实践 在逆向工程、3D打印预处理和CAE分析中,工程师经常需要从三维模型中提取大量边界点坐标。传统手动记录或界面导出方式不仅耗时耗力,还容易引入人为错误。本文将分享一套基于Python的自动化解决方案&#xff0…...

告别屏幕撕裂和亮度不均:手把手教你用ILI9341的B组命令优化显示效果

告别屏幕撕裂和亮度不均:手把手教你用ILI9341的B组命令优化显示效果 在嵌入式显示项目中,ILI9341驱动芯片凭借其出色的色彩表现和灵活的接口配置,成为中小尺寸TFT-LCD的首选方案。但许多开发者在完成基础驱动后,常会遇到屏幕撕裂、…...

从停机到秒级自愈:Docker 27健康探测+设备数字孪生联动实践——某汽车焊装线72小时零非计划停机实录

第一章:从停机到秒级自愈:Docker 27健康探测设备数字孪生联动实践——某汽车焊装线72小时零非计划停机实录在某主机厂焊装车间,传统PLC控制的机器人焊接工位曾因通信抖动、IO模块异常或冷却液压力突降导致平均每月3.2次非计划停机。项目团队将…...

别再乱接线了!STM32F407ZGT6连接ST-LINK与USB转TTL的保姆级图文指南(附舵机驱动)

STM32F407ZGT6开发板极简接线手册:从ST-LINK调试到舵机控制的避坑指南 刚拿到STM32开发板的新手们,往往会被密密麻麻的引脚和五花八门的连接线搞得晕头转向。我见过太多人因为接错一根线而浪费数小时排查——电源接反烧坏芯片、调试接口混乱导致无法下载…...

长芯微LMD9633完全P2P替代AD9633,四通道12位采样80/105/125MSPS 模数转换器ADC

描述长芯微LMD9633是一款四通道、12位、80/105/125MSPS 模数转换器(ADC),具有片内采样保持电路,旨在实现低成本、低功耗、小尺寸和易用性。该产品以高达 125 MSPS 的转换速率运行,并针对要求小封装尺寸至关重要的应用进…...

半导体标签

解决方案是面向半导体、PCB制造、电子组装、医疗器械、精密元器件生产等静电敏感行业的全流程静电防护合规标识一体化方案,核心解决生产、流转、追溯全环节的静电损伤、合规不符、标识失效痛点,完全契合ANSI/ESD S20.20、SEMI、IPC等国际行业标准。一、方…...

用.editorconfig统一团队C++代码风格:从VS配置导出到Git提交前检查

用.editorconfig统一团队C代码风格:从VS配置导出到Git提交前检查 当团队规模扩大到5人以上时,代码风格差异带来的隐性成本开始显现。根据2023年开发者调查报告,67%的技术负责人将代码风格不一致列为协作效率的首要障碍。一个典型的C项目可能同…...

FlicFlac音频转换工具深度解析:从轻量级设计到企业级音频处理解决方案

FlicFlac音频转换工具深度解析:从轻量级设计到企业级音频处理解决方案 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 在当今数字化音频处理…...

Swagger接口文档除了在线看,还能怎么用?我整理了3种本地化导出方案(含Word/Excel)

Swagger接口文档的本地化应用:3种高效导出方案深度解析 在API开发领域,Swagger已经成为事实上的接口文档标准。但很多团队仅仅将其作为在线参考工具,却忽视了这些结构化数据的更大价值。想象一下:当客户要求提供完整的接口规范作为…...

Aspose.Words 24.2 升级踩坑记:从目录页码错乱到表格跨页,我的Java自动化报告修复实战

Aspose.Words 24.2 升级实战:Java自动化报告生成中的目录页码与表格跨页问题深度解析 当项目依赖的文档处理库迎来重大版本更新时,开发团队往往既期待新功能带来的效率提升,又担忧潜在兼容性问题。作为长期使用Aspose.Words进行Java自动化报告…...

如何快速完成小爱音箱AI升级:3步打造智能语音助手

如何快速完成小爱音箱AI升级:3步打造智能语音助手 【免费下载链接】mi-gpt 🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 还在为小爱音箱的"人工智障&q…...