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

【跟小嘉学 Rust 编程】二十四、内联汇编(inline assembly)

系列文章目录

【跟小嘉学 Rust 编程】一、Rust 编程基础
【跟小嘉学 Rust 编程】二、Rust 包管理工具使用
【跟小嘉学 Rust 编程】三、Rust 的基本程序概念
【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念
【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据
【跟小嘉学 Rust 编程】六、枚举和模式匹配
【跟小嘉学 Rust 编程】七、使用包(Packages)、单元包(Crates)和模块(Module)来管理项目
【跟小嘉学 Rust 编程】八、常见的集合
【跟小嘉学 Rust 编程】九、错误处理(Error Handling)
【跟小嘉学 Rust 编程】十一、编写自动化测试
【跟小嘉学 Rust 编程】十二、构建一个命令行程序
【跟小嘉学 Rust 编程】十三、函数式语言特性:迭代器和闭包
【跟小嘉学 Rust 编程】十四、关于 Cargo 和 Crates.io
【跟小嘉学 Rust 编程】十五、智能指针(Smart Point)
【跟小嘉学 Rust 编程】十六、无畏并发(Fearless Concurrency)
【跟小嘉学 Rust 编程】十七、面向对象语言特性
【跟小嘉学 Rust 编程】十八、模式匹配(Patterns and Matching)
【跟小嘉学 Rust 编程】十九、高级特性
【跟小嘉学 Rust 编程】二十、进阶扩展
【跟小嘉学 Rust 编程】二十一、网络编程
【跟小嘉学 Rust 编程】二十三、Cargo 使用指南
【跟小嘉学 Rust 编程】二十四、内联汇编(inline assembly)

文章目录

  • 系列文章目录
    • @[TOC](文章目录)
  • 前言
  • 一、 内联汇编(Inline Assembly)
    • 1.1、asm!
    • 1.2、asm 宏的参数
  • 总结

前言

Rust 在 1.59 版本之中,引入了内联汇编支持,该特性对于需要底层控制的应用非常有用,例如想要控制底层执行、访问特定的机器指令等。

主要教材参考 《The Rust Programming Language》
主要教材参考 《Rust For Rustaceans》
主要教材参考 《The Rustonomicon》
主要教材参考 《Rust 高级编程》
主要教材参考 《Cargo 指南》


一、 内联汇编(Inline Assembly)

1.1、asm!

使用 asm!global_asm! 宏, 内联汇编使用的汇编语言和指令取决于相应的机器平台,目前为止 Rust 支持以下平台的内联汇编

  • x86 和 x86-64
  • ARM
  • AArch64
  • RISC-V
  • LoongArch

如果不支持,asm! 宏将会触发一个 error。

use std::arch::asm;// Multiply x by 6 using shifts and adds
let mut x: u64 = 4;
unsafe {asm!("mov {tmp}, {x}","shl {tmp}, 1","shl {x}, 2","add {x}, {tmp}",x = inout(reg) x,tmp = out(reg) _,);
}
assert_eq!(x, 4 * 6);

1.2、asm 宏的参数

这些参数为了让编译器帮助分配寄存器

  • in:表示将变量值传给寄存器
  • out :表示将寄存器的值写到变量
  • inout: 即时输入也是输出,这种方式可以保证同一个寄存器来完成任务
  • lateout:任何只在所有输入被消费后才被写入的输出
  • inlateout:输出值在所有寄存器被读取后,才被修改;
  • sym: asm可以将符号重定位集合起来从线程本地数据中读取

具体内容,我们会放到 Rust 嵌入式讲解 这部分,目前不是我们系列的重点内容

总结

以上内容就是讲解了 Rust 的 内联汇编

http://www.lryc.cn/news/153695.html

相关文章:

  • 综合实训-------成绩管理系统 V1.1
  • 13.108.Spark 优化、Spark优化与hive的区别、SparkSQL启动参数调优、四川任务优化实践:执行效率提升50%以上
  • 大模型综述论文笔记6-15
  • 树的介绍(C语言版)
  • Android studio实现圆形进度条
  • 基于Halcon的喷码识别方法
  • 【Sword系列】Vulnhub靶机HACKADEMIC: RTB1 writeup
  • idea使用maven时的java.lang.IllegalArgumentException: Malformed \uxxxx encoding问题解决
  • linux深入理解多进程间通信
  • 使用自定义注解+aop实现公共字段的填充
  • Unity 安卓(Android)端AVProVideo插件播放不了视频,屏幕一闪一闪的
  • 无涯教程-JavaScript - DMIN函数
  • GaussDB数据库SQL系列-层次递归查询
  • pycharm 下jupyter noteobook显示黑白图片不正常
  • Java异常(Error与Exception)与常见异常处理——第八讲
  • 【JAVA】多态
  • android 12 第三方apk系统签名
  • 【论文阅读】自动驾驶中车道检测系统的物理后门攻击
  • ArrayList、LinkedList、Collections.singletonList、Arrays.asList与ImmutableList.of
  • 恒运资本:沪指涨逾1%,金融、地产等板块走强,北向资金净买入超60亿元
  • 解决WebSocket通信:前端拿不到最后一条数据的问题
  • 【java】[maven]每次创建一个maven模块时java compiler版本就是1.6与实际版本不一致(解决本质问题)
  • GPT-5继续秘密训练中!ChatGPT开学大礼包
  • 3.2.0 终极预告!云原生支持新增 Spark on k8S 支持
  • Flutter状态管理 — 探索Flutter中的状态
  • Python中重要的条件语句教程
  • 记录一下自己对linux分区挂载的理解
  • 【机器学习】人工智能概述(文末送书)
  • 电子学会 2023年3月 青少年软件编程Python编程等级考试三级真题解析(选择题+判断题+编程题)
  • C++算法 —— 动态规划(1)斐波那契数列模型