Tôi đang học ngôn ngữ lắp ráp trong thời gian rảnh rỗi. Bất cứ ai có thể giải thích lý do tại sao .maxstack dường như là tùy chọn trong chương trình này. Tôi đã cố gắng tìm ra câu trả lời trực tuyến và trong cuốn sách của tôi không có may mắn như vậy tức là chương trình sẽ biên dịch và chạy với .Maxstack nhận xét ra:Tại sao Chỉ thị .MaxStack Tùy chọn trong Mã MSIL?
//Add.il
//Add Two Numbers
.assembly extern mscorlib {}
.assembly Add
{
.ver 1:0:1:0
}
.module add.exe
.method static void main() cil managed
{
//.maxstack 2
.entrypoint
ldstr "The sum of 50 and 30 is = "
call void [mscorlib]System.Console::Write (string)
ldc.i4.s 50
ldc.i4 30
add
call void [mscorlib]System.Console::Write (int32)
ret
}
Tôi đang biên soạn chương trình tại cửa sổ dòng lệnh bằng công cụ ILASM và sau đó chạy tệp thực thi được tạo.
đây là những gì tôi nghĩ đầu tiên, nhưng chương trình vẫn chạy nếu tôi đặt .maxstack trong chương trình trên thành 1. Nó phải là 2 hoặc cao hơn cho chương trình từ những gì tôi có thể nhìn thấy. – w0051977
Chỉ cần đoán ở đây, nhưng có lẽ ILASM là đủ thông minh để nhận ra rằng 1 sẽ không đủ và ghi đè các thiết lập. –
@ 500-InternalServerError, không phải vậy. Theo ILDASM, mã được phát ra thực sự chứa '.maxstack 1'. Và theo đặc điểm kỹ thuật, mã như vậy phải là không hợp lệ và không thể xác minh. Và PEVerify thực sự không xác minh của hội đồng. Nhưng nó vẫn chạy tốt. – svick