码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【跟小嘉学 Rust 编程】二十四、内联汇编(inline assembly)


    系列文章目录

    【跟小嘉学 Rust 编程】一、Rust 编程基础
    【跟小嘉学 Rust 编程】二、Rust 包管理工具使用
    【跟小嘉学 Rust 编程】三、Rust 的基本程序概念
    【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念
    【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据
    【跟小嘉学 Rust 编程】六、枚举和模式匹配
    【跟小嘉学 Rust 编程】七、使用包(Packages)、单元包(Crates)和模块(Module)来管理项目
    【跟小嘉学 Rust 编程】八、常见的集合
    【跟小嘉学 Rust 编程】九、错误处理(Error Handling)
    【跟小嘉学 Rust 编程】十、泛型(Generic Type)、特征(Trait)和生命周期(Lifetimes)
    【跟小嘉学 Rust 编程】十一、编写自动化测试
    【跟小嘉学 Rust 编程】十二、构建一个命令行程序
    【跟小嘉学 Rust 编程】十三、函数式语言特性:迭代器和闭包
    【跟小嘉学 Rust 编程】十四、关于 Cargo 和 Crates.io
    【跟小嘉学 Rust 编程】十五、智能指针(Smart Point)
    【跟小嘉学 Rust 编程】十六、无畏并发(Fearless Concurrency)
    【跟小嘉学 Rust 编程】十七、面向对象语言特性
    【跟小嘉学 Rust 编程】十八、模式匹配(Patterns and Matching)
    【跟小嘉学 Rust 编程】十九、高级特性
    【跟小嘉学 Rust 编程】二十、进阶扩展
    【跟小嘉学 Rust 编程】二十一、网络编程
    【跟小嘉学 Rust 编程】二十二、常用 API
    【跟小嘉学 Rust 编程】二十三、Cargo 使用指南
    【跟小嘉学 Rust 编程】二十四、内联汇编(inline assembly)
    【跟小嘉学 Rust 编程】二十五、Rust命令行参数解析库(clap)
    【跟小嘉学 Rust 编程】二十六、Rust的序列化解决方案(Serde)
    【跟小嘉学 Rust 编程】二十七、Rust 异步编程(Asynchronous Programming)
    【跟小嘉学 Rust 编程】二十八、Rust中的日期与时间
    【跟小嘉学 Rust 编程】二十九、Rust 中的零拷贝序列化解决方案(rkyv)
    【跟小嘉学 Rust 编程】三十、Rust 使用 Slint UI
    【跟小嘉学 Rust 编程】三十一、Rust的日志与追踪
    【跟小嘉学 Rust 编程】三十二、Rust的设计模式(Design Patterns)
    【跟小嘉学 Rust 编程】三十三、Rust的Web开发框架之一: Actix-Web的基础
    【跟小嘉学 Rust 编程】三十四、Rust的Web开发框架之一: Actix-Web的进阶

    文章目录

    • 系列文章目录
      • @[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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    1.2、asm 宏的参数

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

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

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

    总结

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

  • 相关阅读:
    java社区疫情防控微信小程序源码
    【Vue】Vue3的系统性学习
    FlinkSql详解
    活久见:都 2203 年了,你还在使用 word 调试 API
    MTK Camera自定义Vendor Tag
    深入理解linux shell 中的exec内置命令&ubuntu bash
    订单型批发制造企业经营分析123个指标大全(ODOO15/16)
    GPT-SoVITS教程,接入酒馆AI,SillyTavern-1.11.5,让AI女友声若幽兰
    【LeetCode】55. 跳跃游戏
    mybatis学习(6):IntelliJ IDEA 如何创建一个普通的 Java 项目,及创建 Java 文件并运行
  • 原文地址:https://blog.csdn.net/fj_Author/article/details/132614268
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号