IL汇编赋值

162 篇文章 18 订阅
.assembly extern mscorlib {}
 
 .assembly Test
 {
     .ver 1:0:1:0
 }
 .module test.exe
  
 .method static void main() cil managed
 {
     .maxstack 5
     .entrypoint
     
    .locals init (int32, string)
    ldc.i4 34
    stloc.0
    ldstr "Some Text for Local Variable"
    stloc.1
    ldloc.0
    call void [mscorlib]System.Console::WriteLine(int32)
    ldloc.1
    call void [mscorlib]System.Console::WriteLine(string)
   
     ret
 }

运行如下;

首先是定义了2个局部变量,一个是int32类型,一个是string类型;

指令的含义,

    ldstr string—把一个字符串常量装入堆栈;

    ldc.i4.n—把一个 32 位的常量( n 从 0 到 8)装入堆栈;
    stloc.n— 把一个从堆栈中返回的值存入第 n( n 从 0 到 8)个局部变量;

执行了,

    ldc.i4 34
    stloc.0

    这两句以后,把34赋给定义的第一个整型变量;

执行了,

    ldstr "Some Text for Local Variable"
    stloc.1

    这两句以后,把"Some Text for Local Variable"赋值给定义的第二个string类型变量;

然后就是输出了;

再复习一下;
ldloc是入栈,
stloc是出栈;

ldloc,用来做压栈操作,将变量的值压入堆栈中;
stloc,用来做出栈操作,将堆栈的值传入变量中;

先定义了2个局部变量,一个是整型,一个是字符串;
然后把34放入评估堆栈,
然后把34放入第一个局部变量;
然后把字符串放入堆栈;
把字符串放入第二个局部变量;
把第一个局部变量入栈;
输出第一个局部变量的值;
把第二个局部变量入栈;
输出第二个局部变量的值;

ldc是把常量入栈,ldloc是把局部变量入栈;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值