通用中間語言/堆疊
外觀
< 通用中間語言
- ldarg <uint16>
- 載入給定位置處的引數並將其推送到堆疊上。
.method int32 Add(int32, int32)
{
ldarg 0 // 2
ldarg 1 // 4
add
ret
}
ldc.i4 2
ldc.i4 4
call int32 Add(int32, int32)
- ldarg.s <uint8>
- 載入給定位置處的引數並將其推送到堆疊上。與
ldarg相比,這在位元組碼中佔用更少的空間。
.method int32 Add(int32, int32)
{
ldarg.s 0 // 2
ldarg.s 1 // 4
add
ret
}
ldc.i4 2
ldc.i4 4
call int32 Add(int32, int32)
- ldarg.0 - ldarg.3
- 載入給定位置處的引數並將其推送到堆疊上。
.method int32 Add(int32, int32)
{
ldarg.s.0 // 2
ldarg.s.1 // 4
add
ret
}
ldc.i4 2
ldc.i4 4
call int32 Add(int32, int32)
- ldarga <uint16>
- 載入給定位置處的引數的地址並將其推送到堆疊上。
.method int32 Add(int32, int32)
{
ldarga 0
ldarga 1
add
ret
}
ldc.i4 2
ldc.i4 4
call int32 Add(int32, int32)
- ldarga.s <uint8>
- 載入給定位置處的引數的地址並將其推送到堆疊上。與
ldarga相比,這在位元組碼中佔用更少的空間。
.method int32 Add(int32, int32)
{
ldarga.s 0
ldarga.s 1
add
ret
}
ldc.i4 2
ldc.i4 4
call int32 Add(int32, int32)
- ldc.i4 <int32>
- 載入 32 位(4 位元組)整數並將其推送到堆疊上。
.method int32 Add(int32, int32)
{
ldarg 0
ldarg 1
add
ret
}
ldc.i4 2
ldc.i4 4
call int32 Add(int32, int32)
- ldc.i4.s <int8>
- 載入 8 位(1 位元組)整數並將其作為 32 位推送到堆疊上。與
ldc.i4相比,這在位元組碼中佔用更少的空間。
.method int32 Add(int32, int32)
{
ldarg 0
ldarg 1
add
ret
}
ldc.i4.s 2
ldc.i4.s 4
call int32 Add(int32, int32)
- ldc.i4.0 - ldc.i4.8
- 載入 32 位(4 位元組)整數並將其推送到堆疊上。
.method int32 Add(int32, int32)
{
ldarg 0
ldarg 1
add
ret
}
ldc.i4.2
ldc.i4.4
call int32 Add(int32, int32)
- ldc.i4.m1 / ldc.i4.M1
- 載入 -1 並將其作為 32 位推送到堆疊上。
.method int32 Add(int32, int32)
{
ldarg 0
ldarg 1
add
ret
}
ldc.i4.m1
ldc.i4.M1
call int32 Add(int32, int32)
- ldc.i8 <int64>
- 載入 64 位(8 位元組)整數並將其推送到堆疊上。
.method int64 Add(int64, int64)
{
ldarg 0
ldarg 1
add
ret
}
ldc.i8 2
ldc.i8 4
call int64 Add(int64, int64)
- ldc.r4 <float32>
- 載入 32 位(4 位元組)浮點數並將其推送到堆疊上。
.method float32 Add(float32, float32)
{
ldarg 0
ldarg 1
add
ret
}
ldc.r4 2.5
ldc.r4 4.5
call float32 Add(float32, float32)
- ldc.r8 <float64>
- 載入 64 位(8 位元組)浮點數並將其推送到堆疊上。
.method float64 Add(float64, float64)
{
ldarg 0
ldarg 1
add
ret
}
ldc.r8 2.5
ldc.r8 4.5
call float64 Add(float64, float64)
- ldelem <type>
- 載入陣列中的元素並將其推送到堆疊上。
// MyClass.MyArray[5]
ldfld int32[] MyClass::MyArray
ldc.i4 5
ldelem int32
- ldelem <type>
- 載入陣列中的元素並將其推送到堆疊上。
// MyClass.MyArray[5]
ldfld int32[] MyClass::MyArray
ldc.i4 5
ldelem int32
- ldelem.i
- 載入陣列中的元素作為本機 int 並將其推送到堆疊上。
// MyClass.MyArray[5]
ldfld int32[] MyClass::MyArray
ldc.i4 5
ldelem.i
- ldelem.i1
- 載入陣列中的元素作為 int8 並將其作為 int32 推送到堆疊上。
// (int32) MyClass.MyArray[5]
ldfld int8[] MyClass::MyArray
ldc.i4 5
ldelem.i1
- ldelem.i2
- 載入陣列中的元素作為 int16 並將其作為 int32 推送到堆疊上。
// (int32) MyClass.MyArray[5]
ldfld int16[] MyClass::MyArray
ldc.i4 5
ldelem.i2
- ldelem.i4
- 載入陣列中的元素作為 int32 並將其推送到堆疊上。
// MyClass.MyArray[5]
ldfld int32[] MyClass::MyArray
ldc.i4 5
ldelem.i4
- ldelem.i8
- 載入陣列中的元素作為 int64 並將其推送到堆疊上。
// MyClass.MyArray[5]
ldfld int64[] MyClass::MyArray
ldc.i4 5
ldelem.i8
- ldelem.r4
- 載入陣列中的元素作為 float32 並將其推送到堆疊上。
// MyClass.MyArray[5]
ldfld float32[] MyClass::MyArray
ldc.i4 5
ldelem.f4
- ldelem.r8
- 載入陣列中的元素作為 float64 並將其推送到堆疊上。
// MyClass.MyArray[5]
ldfld float64[] MyClass::MyArray
ldc.i4 5
ldelem.f8
- ldelem.ref
- 載入陣列中的元素並將其作為物件推送到堆疊上。
// (object) MyClass.MyArray[5]
ldfld int32[] MyClass::MyArray
ldc.i4 5
ldelem.ref
- ldelem.u1
- 載入陣列中的元素作為 uint8 並將其作為 int32 推送到堆疊上。
// (int32) MyClass.MyArray[5]
ldfld unsigned int8[] MyClass::MyArray
ldc.i4 5
ldelem.u1
- ldelem.u2
- 載入陣列中的元素作為 uint16 並將其作為 int32 推送到堆疊上。
// (int32) MyClass.MyArray[5]
ldfld unsigned int16[] MyClass::MyArray
ldc.i4 5
ldelem.u2
- ldelem.u4
- 載入陣列中的元素作為 uint32 並將其作為 int32 推送到堆疊上。
// (int32) MyClass.MyArray[5]
ldfld unsigned int32[] MyClass::MyArray
ldc.i4 5
ldelem.u4
- ldelem.u8
- 載入陣列中的元素作為 uint64 並將其作為 int64 推送到堆疊上。
// (int64) MyClass.MyArray[5]
ldfld unsigned int64[] MyClass::MyArray
ldc.i4 5
ldelem.u8
- ldelema <type>
- 載入陣列中元素的地址作為 <type> 並將其推送到堆疊上。
// (managed pointer) MyClass.MyArray[5]
ldfld int32[] MyClass::MyArray
ldc.i4 5
ldelema int32
- ldfld <type> <field>
- 載入欄位的值,這是一個 <type>,並將其推送到堆疊上。
ldfld int32 MyClass::MyField
- ldflda <type> <field>
- 載入欄位的地址,這是一個 <type>,並將其推送到堆疊上。
ldflda int32 MyClass::MyField
- ldflda <type> <field>
- 載入欄位的地址,這是一個 <type>,並將其推送到堆疊上。
ldflda int32 MyClass::MyField
- ldftn <type> <method>
- 載入指向方法的指標,該方法返回 <type>,由 <method> 引用,並將其推送到堆疊上。
ldftn int32 MyClass::MyMethod()
- ldind.i
- 載入地址處的本機 int 並將其推送到堆疊上。
ldarga 0
ldind.i
- ldind.i1
- 載入地址處的 int8 並將其作為 int32 推送到堆疊上。
ldarga 0
ldind.i1
- ldind.i2
- 載入地址處的 int16 並將其作為 int32 推送到堆疊上。
ldarga 0
ldind.i2
- ldind.i4
- 載入地址處的 int32 並將其推送到堆疊上。
ldarga 0
ldind.i4
- ldind.i8
- 載入地址處的 int64 並將其推送到堆疊上。
ldarga 0
ldind.i8
- ldind.r4
- 載入地址處的 float32 並將其推送到堆疊上。
ldarga 0
ldind.r4
- ldind.r8
- 載入地址處的 float64 並將其推送到堆疊上。
ldarga 0
ldind.r8
- ldind.u1
- 載入地址處的無符號 int8 並將其作為 int32 推送到堆疊上。
ldarga 0
ldind.u1
- ldind.u2
- 載入地址處的無符號 int16 並將其作為 int32 推送到堆疊上。
ldarga 0
ldind.u2
- ldind.u4
- 載入地址處的無符號 int32 並將其作為 int32 推送到堆疊上。
ldarga 0
ldind.u4
- ldind.u8
- 載入地址處的無符號 int64 並將其作為 int64 推送到堆疊上。
ldarga 0
ldind.u8
- ldind.ref
- 載入地址處的物件並將其推送到堆疊上。
ldarga 0
ldind.ref
- ldlen
- 載入陣列的長度並將其推送到堆疊上。
ldfld int32[] MyClass:MyArray
ldlen
- ldloc <uint16>
- 載入給定位置處的區域性變數的值並將其推送到堆疊上。
.method void Foo()
{
.locals init (
[0] int32 bar
)
ldc.i4.2
stloc.0
ldloc 0 // 2 (bar)
}
- ldloc.s <uint8>
- 載入給定位置處的區域性變數的值並將其推送到堆疊上。與
ldloc相比,在位元組碼中佔用更少的空間。
.method void Foo()
{
.locals init (
[0] int32 bar
)
ldc.i4.2
stloc.0
ldloc.s 0 // 2 (bar)
}
- ldloc.0 - ldloc.3
- 載入給定位置處的區域性變數的值並將其推送到堆疊上。
.method void Foo()
{
.locals init (
[0] int32 bar
)
ldc.i4.2
stloc.0
ldloc.0 // 2 (bar)
}
- ldloca <uint16>
- 載入區域性變數的地址並將其推送到堆疊上。
.method void Foo()
{
.locals init (
[0] int32 bar
)
ldc.i4.2
stloc.0
ldloca 0 // bar
}
- ldloca.s <uint8>
- 載入區域性變數的地址並將其推送到堆疊上。與
ldloca相比,在位元組碼中佔用更少的空間。
.method void Foo()
{
.locals init (
[0] int32 bar
)
ldc.i4.2
stloc.0
ldloca.s 0 // bar
}
- ldnull
- 載入 null 並將其推送到堆疊上。
ldnull
...
brnull MyBranch
- ldobj <type>
- 從堆疊中彈出地址,然後將儲存在該地址中的值推送到堆疊。
ldflda int32 MyClass::MyInteger
...
ldobj int32
- ldsfld <type> <field>
- 載入靜態欄位的值,這是一個 <type>,並將其推送到堆疊上。
ldsfld int32 MyClass::MyStaticField
- ldsflda <type> <field>
- 載入靜態欄位的地址,這是一個 <type>,並將其推送到堆疊上。
ldsflda int32 MyClass::MyStaticField
- ldstr <string>
- 載入字串並將其推送到堆疊上。
ldstr "Hello, World!"
- ldtoken <token>
- 載入元資料令牌並將其執行時表示推送到堆疊上。
ldtoken int32
- ldvirtftn <type> <method>
- 載入虛擬方法的地址,該方法返回 <type>,並將其推送到堆疊上。
ldvirtftn int32 MyClass::MyVirtualMethod()