在这里尝试了IL汇编字符串连接;
IL汇编字符串连接_bcbobo21cn的博客-CSDN博客
下面来看一下IL汇编整数相加;
大概的看一下一些资料,下面语句,
ldc.i4 20
ldc.i4 30
add
看上去像是,装载整数20到一个类似于堆栈的区域,然后再装载30,然后执行add,这样实现了2个整数相加;
先用记事本编辑代码如下,
.assembly extern mscorlib {}
.assembly Test
{
.ver 1:0:1:0
}
.module test.exe
.method static void main() cil managed
{
.maxstack 1
.entrypoint
ldc.i4 20
ldc.i4 30
add
call void [mscorlib]System.Console::Write (int32)
ret
}
保存为testadd.il,然后ilasm构建;
第一次写错了,ldc.i4 20,不是ldc.i4.20;
改好之后构建了exe,但是运行testadd.exe出错;
那会不会是头部这一段影响,
.assembly extern mscorlib {}
.assembly Test
{
. ver 1:0:1:0
}
.module test.exe
把文件名改为test.il,再构建出test.exe,运行test.exe,也是出错;
那先单独看一下这2句,
ldc.i4 30
call void [mscorlib]System.Console::Write (int32)
前一句有没有装载一个整数,后一句有没有输出该整数;
编辑test2.il,
.assembly extern mscorlib {}
.assembly Test
{
.ver 1:0:1:0
}
.module test.exe
.method static void main() cil managed
{
.maxstack 1
.entrypoint
ldc.i4 307
call void [mscorlib]System.Console::Write (int32)
ret
}
构建并运行如下;可以装载整数,输出整数;下回继续;
还不熟悉,其实上面的代码也没有太大问题;主要问题是,
.maxstack 1
栈的长度只有1,应该是字节,不能放下2个数;
.maxstack 8
指定栈长度8就可以了;