`

assembly let

 
阅读更多
let:在汇编代码块中定义的变量,在该代码块 外部是无法访问的
1.创建一个新的堆栈槽位
2.为变量保留该槽位
3.当到达代码块结束时自动销毁该槽位

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.6.0 <0.9.0;
import "hardhat/console.sol";

contract Assembly1 {
    constructor(){     
    }

    function fun() public {
        uint256 a = 0;
        assembly {
            a := 2
        }
        console.log("a:",a);
    }

    function fun1(uint256 x,uint256 y) external view returns (uint256){
        uint256 result = 0;
        assembly {
            result := add(x, y)   // x + y
            mstore(0x0, result)       // 在内存中保存结果
            //return(0x0, 32)           // 从内存中返回32字节
        }
        console.log("fun1 result:",result);
        assembly {
            return (0x0,32)
        }
    }

    function fun2() external {
        uint256 x=0;
        uint256 y=0;
        uint256 z=0;
        uint256 n=0;
        string memory s = "a";
        assembly {
            x := 7 
            y := add(x, 3)
            z := add(keccak256(0x0, 0x20), div(64, 32)) 
            z := add(0x0, 0x20)
            let m  // 自动初始化为 m = 0
        }
        //console.log("x:%d,y:%d,z:%d,aaa:%s",x,y,z,s);
        console.logString(s);
        console.log("x:%d,y:%d,s:%s",x,y,s);
    }
}


const { expect } = require("chai");
const { ethers } = require("hardhat");

constractName = "Assembly1";

describe("contract", function () {
  it("test", async function () {
    const TestContract = await ethers.getContractFactory(constractName);
    const testContract = await TestContract.deploy();
    result = await testContract.fun();
    result = await testContract.fun1(1,2);
    console.log("result",result.toString());
    result = await testContract.fun2();
  });
});

  contract
a: 2
fun1 result: 3
result 3
a
x:7,y:10,s:a



分享到:
评论

相关推荐

    gakuon:用于Commodore 64 SID芯片的音乐宏语言(MML)编译器

    学园楽音 用于C64 SID芯片的音乐宏语言(MML)...// Parse string and compile into assembly code let compiler = new gk . Compiler ( ) ; let asm = compiler . compile ( source ) ; // You can get informat

    Inside.Microsoft.NET.IL.Assembler

    Let me explain. With Microsoft .NET technology taking the world by storm, with more and more information professionals getting involved, large numbers of books covering various aspects of this ...

    Paparazzo:具有编辑功能的自定义iOS相机和照片选择器

    AssemblyFactory ()let assembly = factory. mediaPickerAssembly () 使用程序集的module方法创建视图控制器: let data = MediaPickerData ( items : items, autocorrectionFilters : filters, selectedItem : ...

    台风:Objective-C强大的依赖注入:sparkles::sparkles:(https:PILGRIM.PH是台风的纯粹Swift继承者!):sparkles::sparkles:

    Cocoa和CocoaTouch的强大依赖注入。 重量轻,但功能齐全,而且超级易于使用。 是台风的纯粹斯威夫特继任者!! 台风使用Objective-C...let assembly = MyAssembly (). activated () let viewController = assembly.

    Lazy loading - eager loading

    Let's discuss these effects and how to avoid them. Term Paper AND Research Paper In my previous posts I showed how to prepare your system for NHibernate and how to implement a first NHibernate base ...

    C#和Javascript动态执行代码

    Assembly assembly = results.CompiledAssembly; // 执行编译后的代码 } ``` 这段代码会编译并执行一个简单的`Console.WriteLine`语句。 **JavaScript动态执行代码** JavaScript天生支持动态执行代码,这源于它...

    原创asp.net反射超强实现, js反射

    例如,`Type`类代表了.NET框架中的任何类型,`Assembly`类用于加载和操作程序集,`MethodInfo`类提供了对方法信息的访问。在ASP.NET中,反射常用于动态加载用户控件、解析配置文件或者在运行时检查和调用对象的方法...

    Packt.Publishing.Service.Oriented.Java.Business.Integration.Feb.2008

    Let us tame these buzzwords in the context of SOA and Integration. While you do the day to day programming for solving business problems, you will be generating business code as well as ...

    unidac 2.70 (完整源代码)

    in Component-&gt;Assembly Search Paths-&gt;Add... menu 6) To compile UniDAC based application add Devart.Dac and Devart.UniDac to Tools-&gt;Options-&gt;Environment Options-&gt;Delphi Options-&gt;Library-&gt; ...

    Linux Dictionary

    powerful delegations it is able to let you use it for any kind of files, ie it can also digest manual pages, dvi files, texinfo, .... Among the other most noticeable features of a2ps are: − various ...

    获取手机IMEI号、手机型号等

    IMEI号分为两部分:TAC(Type Allocation Code)和FAC(Final Assembly Code),前者是设备类型代码,由制造商分配,用于区分不同型号的设备;后者是生产批次代码,表示设备的具体生产信息。此外,还有一串校验码,...

    计算机专业英语Unit10.pdf

    3. 汇编语言(Assembly Language)是一种低级语言,它将机器指令映射为人类可读的助记符,如"ADD"代表加法操作。这使得编程相比机器语言稍微友好一些,但仍比高级语言复杂。 4. 链接器(Linker)的作用是将编译后的...

    Gradle in Action

    Using a flexible Groovy-based DSL, Gradle provides declarative and extendable language elements that let you model your project’s needs the way you want. About the Book Gradle in Action is a ...

    ASP.NET系统关键字及保留字列表整理

    AddHandler Date Integer RaiseEvent AddressOf Declare Let ReadOnly Alias Dir Lib RemoveHandler And Do Like Redim AndAlso Double Long Resume Ansi Elseif Loop Return As Each Me REM Assembly else Mod ...

    rust-nasm-rs

    2. **创建Rust项目**:使用`cargo new`命令创建一个新的Rust项目,然后在项目目录中添加NASM源文件,例如`src/assembly.asm`。 3. **配置Cargo.toml**:在项目的`Cargo.toml`文件中,添加一个构建脚本`build.rs`,...

    用js生成word_js生成word_

    虽然它在浏览器端可能需要一些额外的工作才能运行(例如通过Web Workers或转换为Web Assembly),但它的强大之处在于能够轻松地构建文档结构,包括文本、段落、图片、表格等。例如,你可以创建一个段落,设置其样式...

    Object-Oriented Analysis and Design 第六章

    Instead of directly instantiating the Editor classes within the Document, you can use the Factory Method to let each Document subclass decide which Editor it needs. Object Oriented Analysis and ...

    final-project:这是我在 GA 的最后一个项目

    在这个名为"final-project"的项目中,我们可以推测这是一位学生或学员在GA(可能是General Assembly,一个知名的全球教育机构)的最后阶段所完成的作品。这个项目的核心编程语言是JavaScript,这意味着我们将探讨的...

    js-chrome

    JavaScript的新特性,如ES6(ECMAScript 2015)及后续版本引入的箭头函数、模板字符串、let和const、解构赋值、async/await等,都对Chrome浏览器的JavaScript开发有着深远影响。这些新特性提高了代码的可读性和可...

    warmups:此仓库供我GA毕业后使用,继续增加代码挑战的上午热身仪式

    "GA毕业后使用"暗示这个仓库是为那些完成了一定编程训练(可能是General Assembly这样的机构)的人设计的,帮助他们在实际工作中保持编程技巧和解决问题的能力。 【描述】与【标题】相同,再次确认了这个仓库的目标...

Global site tag (gtag.js) - Google Analytics