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,到棧上;
示例;
.assembly extern mscorlib {}.assembly Test{.ver 1:0:1:0}.module test.exe.method static void main() cil managed{.maxstack 12.entrypointldc.i4 202call void [mscorlib]System.Console::Write (int32)ldc.i4 303call void [mscorlib]System.Console::Write (int32)ldc.i4.6call void [mscorlib]System.Console::Write (int32)ldc.i4.5call void [mscorlib]System.Console::Write (int32)ldc.i4.m1call void [mscorlib]System.Console::Write (int32)ldc.i4.s 3000call void [mscorlib]System.Console::Write (int32)ret}
先把202送到棧上,然后輸出;再把303送到棧上,然后輸出;
然后把數值6送到棧上,然后輸出;再把數值5送到棧上,然后輸出;
再把數值-1送到棧上,然后輸出;
然后看一下,ldc.i4.s 3000,會輸出什么;帶了.s之后需要提供一個字節長的整型,單字節整型的最大值是255;
運行如下;
沒有輸出回車換行,數字都是連在一起的,最后一次輸出-72,倒數第二次輸出-1;
有時間繼續;