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

32位汇编:实验6位运算类指令使用

实验(1)

逻辑运算知识总结

1.1 基本逻辑运算类型

运算符号含义规则汇编语法标志位影响
AND两个位都为1时结果为11 AND 1 = 1,其他情况为0AND dest, srcCF=0, OF=0, SF/ZF/PF根据结果设置
OR两个位中有一个为1时结果为10 OR 0 = 0,其他情况为1OR dest, srcCF=0, OF=0, SF/ZF/PF根据结果设置
NOT位取反NOT 1 = 0,NOT 0 = 1NOT dest不影响任何标志位
异或XOR两个位不同时结果为11 XOR 0 = 1,0 XOR 1 = 1,其他情况为0XOR dest, srcCF=0, OF=0, SF/ZF/PF根据结果设置

1.2 逻辑运算在计算机中的应用

  1. 位掩码操作
    • 提取特定位:AND value, mask
    • 设置特定位:OR value, mask
    • 清除特定位:AND value, NOT mask
    • 翻转特定位:XOR value, mask
  2. 条件判断和标志位设置
    • 测试特定位:TEST value, mask(相当于AND但不保存结果)
    • 判断奇偶:AND value, 1 或 TEST value, 1
    • 清零寄存器:XOR reg, reg
  3. 数据加密和校验
    • 简单加密:XOR data, key
    • 校验和计算:多数据XOR
    • 哈希算法:位混合操作
  4. 硬件控制
    • 设备寄存器位操作
    • 状态标志读取和设置

1.3 标志位影响

  • AND运算常用于清除特定位(掩码清零)
  • OR运算常用于设置特定位(掩码置1)
  • XOR运算常用于翻转特定位或实现无临时变量的交换
  • NOT运算常用于位反转或求补码
运算CFOFSFZFPFAF
AND清零(0)清零(0)根据结果设置根据结果设置根据结果设置未定义
OR清零(0)清零(0)根据结果设置根据结果设置根据结果设置未定义
XOR清零(0)清零(0)根据结果设置根据结果设置根据结果设置未定义
NOT不影响不影响不影响不影响不影响不影响

实验示例

我们经手算得到varT1 与 varT2 结果一致,说明通过与或非实现了异或运算

varT1 = 11111101_01000100_01100000_10101100

varT2 = 11111101_01000100_01100000_10101100

我们验证以下

varT1 = FD4460AC

varT2 = FD4460AC

经验证与手算结果一致。

实验(2)

移位运算知识点总结

2.1 移位运算分类

运算符号含义规则汇编语法标志位影响
逻辑左移SHL所有位向左移动,低位补0相当于乘以2ⁿSHL dest, countCF=最后移出的位,OF仅在count=1时有意义
逻辑右移SHR所有位向右移动,高位补0无符号数除以2ⁿSHR dest, countCF=最后移出的位,OF仅在count=1时有意义
算术右移SAR所有位向右移动,高位符号位扩展有符号数除以2ⁿSAR dest, countCF=最后移出的位,OF=0
循环左移ROL所有位向左移动,高位循环到低位位循环移动ROL dest, countCF=最后移出的位
循环右移ROR所有位向右移动,低位循环到高位位循环移动ROR dest, countCF=最后移出的位
带进位循环左移RCL包含进位标志的循环左移包含CF标志位RCL dest, countCF=最后移出的位
带进位循环右移RCR包含进位标志的循环右移包含CF标志位RCR dest, countCF=最后移出的位

移位计数说明

  • count可以是立即数(1-31)或CL寄存器内容
  • 对于8086,count=1时可直接用立即数,count>1时必须用CL

2.2 移位运算在计算机中的应用

  1. 快速乘除法优化
    • 乘以2ⁿ:SHL value, n
    • 除以2ⁿ:SHR value, n(无符号)或 SAR value, n(有符号)
    • 乘以常数:如×10 = ×8 + ×2 = (value<<3) + (value<<1)
  2. 数据打包和解包
    • 位字段提取:SHR + AND
    • 位字段设置:先清除再OR
    • 数据压缩:多个小数值打包到更大数据类型
  3. BCD码处理
    • ASCII转BCD:AND 0Fh去除ASCII高位
    • 压缩BCD:两个BCD数字合并到一个字节
  4. 算法实现
    • 循环冗余校验(CRC):移位和XOR组合
    • 加密算法:位置换操作
    • 浮点数处理:阶码调整

2.3 标志位影响

  • 左移(SHL)相当于乘以2的幂次,但可能溢出
  • 右移(SHR/SAR)相当于除以2的幂次,算术右移保持符号位
  • 循环移位(ROL/ROR)不改变数值大小,仅改变位的位置

① 非循环移位运算

运算CFOFSFZFPFAF
SHL最后移出的位仅count=1时有意义*根据结果设置根据结果设置根据结果设置未定义
SHR最后移出的位仅count=1时有意义*根据结果设置根据结果设置根据结果设置未定义
SAR最后移出的位清零(0)根据结果设置根据结果设置根据结果设置未定义
  • OF在count=1时的含义:
  • SHL:若结果的最高位与CF不同,则OF=1(表示符号改变)
  • SHR:设置为操作数原来的最高位

② 循环移位运算

运算CFOFSFZFPFAF
ROL最后移出的位仅count=1时有意义*不影响不影响不影响不影响
ROR最后移出的位仅count=1时有意义*不影响不影响不影响不影响
RCL最后移出的位仅count=1时有意义*不影响不影响不影响不影响
RCR最后移出的位仅count=1时有意义*不影响不影响不影响不影响
  • OF在count=1时的含义:
  • ROL:若结果的最高位与CF不同,则OF=1
  • ROR:若结果的最高位与次高位不同,则OF=1
  • RCL:若结果的最高位与CF不同,则OF=1
  • RCR:若结果的最高位与次高位不同,则OF=1

实验示例

(1)无符号数乘以10的两种方法

经分析发现代码实现功能为:用“左移+加法”完成无符号数乘 10,避免乘法指令,是嵌入式/汇编里常用的“移位代替乘法”技巧。

34000 × 10 = 34000 × (2 + 8) = 34000×2 + 34000×8

我们对比发现

前面移位运算与imul eax,10效果一致

(2)位操作应用

第一部分:多倍精度移位

mov ecx,4; 循环4次
again:
shr dword ptr qvar+4,1; 先移动高32位
rcr dword ptr qvar,1; 后移动低32位(带进位)
loop again

功能: 将64位数 1234567887654321h 逻辑右移4位

移位过程:

  • 使用SHR处理高32位
  • 使用RCR处理低32位(接收来自高位的进位)
  • 循环4次完成右移4位操作

第一次循环结束后再重复步骤,总循环四次后

ecx归0,跳出循环完成移位运算

ASCII转压缩BCD码

字符 '3' = 33h → 取低4位 → 03h
字符 '8' = 38h → 取低4位 → 08h → 左移4位 → 80h
组合:03h OR 80h = 83h (压缩BCD码表示38)

转换结果与期待结果一致。

http://www.dtcms.com/a/521605.html

相关文章:

  • centos系统怎么做网站昌吉州住房和城乡建设局网站
  • seo优化或网站编辑宜春住房和城乡建设部网站
  • C++ 可变参数模板实现递归继承(tuple 实现原理)
  • 商城县搜索引擎优化策略包括
  • nodejs相关基础知识-第二篇
  • 网站建设 经营范围大连市开发区网站建设公司
  • 矩形排版——CAD c#
  • DeepSeek-OCR - 轻量、精准、快速、跨语言的文字识别模型 图片转文字 图片文字识别 支持50系显卡 一键整合包下载
  • z怎么做优惠券网站个人网站建设思路
  • 品牌管理的三大要素百度seo快排软件
  • 迅为RK3568开发板 V2.0嵌入式linux开发资料全面升级
  • 企业网站制作报价单网页设计与网站建设 郑州大学
  • 品牌建设公司网站企业业务系统有哪些
  • UU 跑腿使用通义灵码实现 AI 原生应用架构升级全解析:行动指南
  • 重庆承越网站建设公司网站注销备案查询系统
  • 泰安东平县建设局网站佛山做优化的公司
  • 2025年10月份全球AI医疗资讯
  • 光模块与光纤的“精准对接”:小接口的关键技术解析
  • Linux网络层:IP
  • 个人简历制作网站wordpress页眉描述
  • 【深度学习新浪潮】2025单目深度估计最新研究进展:从技术突破到落地探索
  • 《Git:从入门到精通(八)——企业级git开发相关内容》
  • 如何在360网站上做软文推广找相似图片 识别
  • 个人备案网站营业执照微信小程序怎么做教程
  • Appium+python+unittest搭建UI自动化框架
  • Java实现gRPC双向流通信
  • LLama 3分组查询注意力与KV缓存机制
  • DolphinScheduler依赖机制、Open-Falcon告警推送与监控的优化实践
  • 消息发送接收如何传递TraceId
  • GPU芯片内存泄漏测试方法