ldc指令是把值送到栈上,
说明如下,
ldc.i4 将所提供的int32类型的值作为int32推送到计算堆栈上;
ldc.i4.0 将数值0作为int32推送到计算堆栈上;
...
ldc.i4.8 将数值8作为int32推送到计算堆栈上;
ldc.i4.m1 将数值-1作为int32推送到计算堆栈上;
ldc.i4.s 将提供的int8值作为int32推送到计算堆栈上(短格式);
ldc.i4 99,这样是把数值99送到栈上;
ldc.i4.s,也是把值送到栈上,但是需要提供的是一个字节长的整型;
i4是数据类型助记符,是指4字节的整型;s则是指 Single Byte ;
ldc.i4.s 11,这样是把数值11送到栈上;
ldc.i4.0 到 ldc.i4.8,是直接送最后的这个数值,0-8,到栈上;
示例;
cpp
.assembly extern mscorlib {}
.assembly Test
{
.ver 1:0:1:0
}
.module test.exe
.method static void main() cil managed
{
.maxstack 12
.entrypoint
ldc.i4 202
call void [mscorlib]System.Console::Write (int32)
ldc.i4 303
call void [mscorlib]System.Console::Write (int32)
ldc.i4.6
call void [mscorlib]System.Console::Write (int32)
ldc.i4.5
call void [mscorlib]System.Console::Write (int32)
ldc.i4.m1
call void [mscorlib]System.Console::Write (int32)
ldc.i4.s 3000
call void [mscorlib]System.Console::Write (int32)
ret
}
先把202送到栈上,然后输出;再把303送到栈上,然后输出;
然后把数值6送到栈上,然后输出;再把数值5送到栈上,然后输出;
再把数值-1送到栈上,然后输出;
然后看一下,ldc.i4.s 3000,会输出什么;带了.s之后需要提供一个字节长的整型,单字节整型的最大值是255;
运行如下;
没有输出回车换行,数字都是连在一起的,最后一次输出-72,倒数第二次输出-1;
有时间继续;