導航:首頁 > 源碼編譯 > cil語言編譯指令

cil語言編譯指令

發布時間:2022-02-07 12:43:02

『壹』 哪位大神能提供下BF或者CF的全部CLI指令

為什麼CF進不去,進去後出個Client file corruption detected,clossing game cli 按了就出來了。而且重新安裝還是這樣 系統是新裝的win7旗艦版64位 求大神

『貳』 C++/CLI的語法

C++/CLI(CLI:Common Language Infrastructure)是一門用來代替C++託管擴展(下文使用MC++指代)新的語言規范。重新簡化了C++託管擴展的語法,提供了更好的代碼可讀性。和微軟.NET的其他語言一樣,微軟向ECMA提交了C++/CLI的標准。C++/CLI現在可以在Visual C++ 2005上開發。C++/CLI的部分特性已經申請了專利。
1 語法改變
C++/CLI是一門獨立的語言(比如新的關鍵字),而不是像C++託管擴展一樣是C++的超集 (C++託管擴展有一些不標志的關鍵字如__gc和__value)。所以,C++/CLI對於這些語法有較大的改變,尤其是去除了一些意義不明確的關鍵字,增加了一些.NET的特性.
很多不一致的語法,像MC++的不同版本用法的操作符new()被區分開:在C++/CLI,.NET引用類型的創建要使用新的關鍵字gcnew。並且C++/CLI增加了新的泛型概念(與C++ templates相似,但還是有很大的區別)。
句柄(Handle)
回到MC++,有兩類指針: 用__nogc標識的指針是傳統意義上的C++指針,而用__gc標識的指針為.NET中的引用。但在C++/CLI里,唯一的指針就是傳統意義上的C++指針,而.NET引用類型使用一個「句柄」來獲取,使用新的語法「類名^」代替了MC++的「類名*」。新的句法使得託管和非託管代碼混合開發更加方便;它指明了對象將會被垃圾回收器自動銷毀還是手動銷毀。
範例代碼:
// C++託管擴展
#using <mscorlib.dll>
using namespace System::Collections;
__gc class referencetype
{
protected:
String* stringVar;
int intArr __gc[];
ArrayList* doubleList;
public:
referencetype(String* str,int* pointer,int number) // 哪個是託管的?
{
doubleList = new ArrayList();
System::Console::WriteLine(str->Trim() + number.ToString());
}
};
// C++/CLI
#using <mscorlib.dll>
using namespace System::Collections::Generic;
ref class referencetype
{
protected:
String^ stringVar;
array<int> intArr;
List<double>^ doubleList;
public:
referencetype(String^ str,int* pointer,int number) // 不會再分不清了吧?
{
doubleList = gcnew List<double>();
System::Console::WriteLine(str->Trim() + number);
}
};
⒈2 跟蹤引用(Tracking reference)
C++/CLI里的一個「跟蹤引用」也是一個句柄,但它是傳地址而不是傳值。等同於在C#中加了「ref」關鍵字,或Visual Basic .NET的「ByRef」。C++/CLI使用「^%」語法來定義一個跟蹤引用。與傳統C++中的「*&;」語法相似。
下面的示例了「跟蹤引用」的使用。如果把「^%」改成「^」(也就是使用普通的句柄),10個字元串將不會被修改,而只會生成那些字元串的副本,這些都是因為那些引用已經不是傳地址而是傳值。
int main()
{
array<String^>^ arr = gcnew array<String^>;⑽;
int i = 0;
for each(String^% s in arr)
s = gcnew String(i++.ToString());
return 0;
}
上面的代碼示例了用戶如何用C++/CLI做一些其他.NET語言不能做的事情,比如C#就不允許在foreach循環中這樣做。例如foreach(ref string s in arr)在C#中是非法的。
⒈3 析構(Finalizer/Destructor)
C++/CLI的另一個變化就是使用「!類名()」來聲明一個託管類型的「析構方法」(在垃圾回收器回收對象之前的不確定的時間由CLR調用),而原來的「~類名()」是用來定義「傳統的析構函數」(能被用戶自己調用)。另外,下面的例子說明了如何在C++/CLI中託管對象如何自動調用「傳統析構函數」。
在一個典型的.NET程序中(例如直接使用CIL)編程,可以由用戶自己調用的「析構方法」是用實現IDisposable介面,通過編寫Dispose方法來實現顯式釋放資源;而不確定的「析構方法」是通過重載Finalize函數來實現的。
// C++/CLI
ref class MyClass // :IDisposable (編譯器自動實現IDisposable介面)
{
public:
MyClass(); // 構造函數
~MyClass(); // (確定的) 析構函數 (編譯器使用IDisposable.Dispose來實現)
protected:
!MyClass(); // 析構方法 (不確定的) (編譯器通過重載virtual void Finalize來實現)
public:
static void Test()
{
MyClass auto; // 這不是個句柄,它將調用MyClass的默認構造函數
// 使用auto對象
// 函數返回前自動調用auto的析構函數(IDisposable.Dispose,由~MyClass()定義)來釋放資源
// 以上代碼等效於:
MyClass^ user = gcnew MyClass();
try { /* 使用auto對象 */ }
finally { delete user; /* 由編譯器調用auto.Dispose() */ }
}
};
// C#
class MyClass : IDisposable
{
public MyClass() {} // 構造函數
~MyClass() {} // 析構方法 (不確定的) (編譯器通過重載virtual void Finalize來實現),與C++/CLI的!MyClass()等效
public void Dispose() {} // Dispose方法
public static void Test()
{
using(MyClass auto = new MyClass())
{ /* 使用auto對象 */ }
// 因為使用了using句法,編譯器自動調用auto.Dispose()
// 以上代碼等效於:
MyClass user = new MyClass();
try { /* 使用user對象 */ }
finally { user.Dispose(); }
}
}

『叄』 怎樣創建C++/CLI程序

C#和C++是非常相似的兩種語言,然而我們卻常常將其用於兩種不同的地方,C#得益於其簡潔的語法和豐富的類庫,常用來構建業務系統。C++則具有底層API的訪問能力和拔尖的執行效率,往往用於訪問底層模塊和構建有性能要求的演算法

這兩種場景看起來有較大的差異,大多數的時候可以各行其道。但還是有很多時候會出現融合的情況。當我們構建分布式系統的時候,由於RPC機制一般都是語言無關的,我們大可以將其各盡所長,按需劃分在最能發揮其長處的位置。然而,一旦我們需要構建融合兩者需求的集中式系統的時候,就會頭痛無比。

此時,我們可以使用C++/CLI搭建C++和.Net之間的橋梁,C++/CLI是一個比較有意思的兩棲模塊,它具有如下特點

既可以訪問.Net類庫,也可以訪問C++原生類庫
既可以被.Net程序引用,也可以被C++原生程序引用
使用C++/CLI,我們可以使用C++編寫演算法,用C#編寫界面,也可以使用.Net Framework類庫增強C++程序功能,各取所長。關於的優點,園子里有篇文章介紹的比較詳細,值得一讀:從C++到C++/CLI。

下面我們就以一個簡單的例子來演示一下它的用法:

Calculator.h:

#pragma once

namespace CppCliTest
{
public ref class Calculator
{
public:
int Add(int a, int b);
};
}

Calculator.cpp

#include "stdafx.h"
#include "Calculator.h"

namespace CppCliTest
{
int Calculator::Add(int a, int b)
{
return a + b;
}
}

main.cpp

#include "stdafx.h"
#include "Calculator.h"

using namespace System;
using namespace CppCliTest;

int main(array<System::String ^> ^args)
{
Calculator^ calculator = gcnew Calculator();
int result = calculator->Add(3, 2);

Console::WriteLine(L"Result is {0}", result);
return 0;
}

從這個例子中,我們可以簡單的管中窺豹的看看C++/CLI是在C++的基礎上擴充了一套語法,使其具有訪問.Net原始的功能,這里用到的有:

使用ref class聲明CLI引用類型(C#中的class)
使用^(例如如這里的String ^)來定義CLI引用類型
使用gcnew創建CLI的引用類型

『肆』 angular-cli怎麼編譯

package.json文件中scripte底下有命令介紹了編譯命令。
例如:npm build

『伍』 匯編語言指令大全,要詳細的 !!!!

一、數據位傳送指令:

1、MOV C, bit ;bit 可直接定址位 C←(bit)

2、MOV bit,C ;C 進位位 (bit) ← C

二、位變數修改指令:

1、CLR C ; 將C=0

2、CLR bit

3、CPL C ; 將C求反再存入C

4、CPL bit ; 將bit求反再存入bit

5、SETB C ; 將C=1

6、SETB bit ; (bit) ← 1

三、位變數邏輯指令:


ANL C, bit ANL C, bit ORL C, bit ORL C, bit

『陸』 CLI、STI 匯編指令有什麼作用

CLI匯編指令全稱為Clear Interupt,該指令的作用是禁止中斷發生,在CLI起效之後,所有外部中斷都被屏蔽,這樣可以保證當前運行的代碼不被打斷,起到保護代碼運行的作用。

STI匯編指令全稱為Set Interupt,該指令的作用是允許中斷發生,在STI起效之後,所有外部中斷都被恢復,這樣可以打破被保護代碼的運行,允許硬體中斷轉而處理中斷的作用。

(6)cil語言編譯指令擴展閱讀

CLI和STI匯編指令只能在內核模式下執行,不可以在用戶模式下執行;而且在內核模式下執行時,應該盡可能快的恢復中斷,因為CLI會禁用硬體中斷,若長時間禁止中斷會影響其他動作的執行(如移動滑鼠等等),系統就會變得不穩定。

其次,在標志寄存器中中斷標志清零的情況下,可以以「int ××」的形式調用軟中斷。序員可以改變段地址和偏移地址,但是在這個過程中如果需要改變段寄存器SS和SP必須禁止中斷,當改變完成後即可恢復中斷(在cli指令後需要有與其配對的sti指令,否則計算機會崩潰)。

『柒』 C#語言經編譯後得到的是匯編指令機器指令本機指令CIL中間語言指令

C#是解釋型語言,不是編譯型語言。
只要不是"直接編譯成機器指令並直接運行機器指令執行檔"的編譯語言,就屬於解釋語言。
Java,C#、VB.net等的源碼先編譯成位元組碼,再由虛擬機「解釋」執行位元組碼。

因此 C#語言經編譯後得到的是CIL中間語言指令 即位元組碼

呵呵 滿意就選滿意回答啊

『捌』 C++/CLI的語言學習

在設計C++/CLI語言中涉及三個方面問題,這同樣貫徹於所有的其他程序開發語言:一是語言級的語法向底層通用類型系統(簡稱CTS)的映射;二是向程序開發人員提供的CLI的底層細節結構的級別選擇;三是超越CLI的直接支持,提供額外的功能性函數的選擇。
第一條對於所有的CLI語言來說都大致相同,第二條和第三條對於不同的CLI語言來說是不同的,相互區別的。根據你需要解決什麼樣的問題,你將選擇這種或那種語言,也有可能混合使用多種CLI語言。學習C++/CLI涉及到了解它在設計過程中的所有這些涉及方面。 ⒈ Visual C++ 2008 大學教程(第二版)(英文原版:Visual C++ 2008 How to Program,Second Edition)
⒉ Visual C++ 2008入門經典 (英文原版:Beginning Visual C++ 2008)
⒊ C++/CLI in Action
⒋ Foundations of C++/CLI The Visual C++ Language for .NET 3.5
⒌ Pro Visual C++/CLI and the .NET 3.5 Platform
⒍ Expert C++/CLI:.NET for Visual C++ Programmers 使用C++/CLI編程時間了解底層的CTS非常重要。CTS包括以下三種常用類的類型:
1、多態引用類型,這正是對於所有繼承類所要使用的。
2、非多態值類型,這用於實時高效的具體類型,例如數值類型。
3、抽象的介面類型,這用於定義一個操作集,也可以用於實現介面的引用或值類型集合。
這個設計方面的問題,即將CTS映射到語言內建的數據類型集合,通常同樣貫穿於所有的CLI語言,雖然不同的CLI語言語法不同。所以,在C#中你可能這么寫:
abstract class Shape { ... } // C#
來定義了一個Shape基類,從該類將導出幾何對象,然而在C++/CLI你將這么寫:
ref class Shape abstract { ... }; // C++/CLI
上述代碼說明了底層的C++/CLI引用類型。這兩種聲明在內層代表的意思是一樣的。相似地,在C#中你這么寫:
struct Point2D { ... } // C#
來定義一個具體的Point2D 類,然而在C++/CLI中這么寫:
value class Point2D { ... }; // C++/CLI
C++/CLI支持的類型集合代表了CTS與本地設備的綜合,這決定了你的語法選擇,例如:
class native {};
value class V {};
ref class R {};
interface class I {};
CTS也支持與本地列舉類型稍微不同的列舉類類型。當然,對於上述兩者CTS是都支持的。例如:
enum native { fail,pass };
enum class CLIEnum : char { fail,pass};
相似地,CTS支持它本身的數組類型,並且它再一次將其與本地數組在行為上區分開來。同時,微軟再次為這兩種類型提供了支持。
int native[] = { 1,1,2,3,5,8 };
array<int>^ managed = { 1,1,2,3,5,8 };
那種認為一種CLI語言比其他CLI語言在向底層的CTS映射中表現的更出色或更完美都是不確切的,相反,每種不同的CLI語言代表著對CTS底層對象模型的不同理解,在下一節你將更清楚地看到這一點。 設計一個CLI語言時第二個必須要考慮的問題是將CLI的底層執行模式融入到語言的細節級別。這種語言用於解決什麼問題?這種語言是否有必須的工具來解決這些問題?這種語言可能吸引什麼樣的程序開發人員?
例如,值類型存在於託管堆上,在很多情況下值類型可以看到它們自身的存在。
1、通過隱含的加箱操作,當一個值類型的實例被分配給一個對象或當一個虛擬的方法通過一個值類型來調用;
2、當這個值類型被當作應用引用類類型的成員時;
3、當這個值類型 被當作CLI數組成員時;
需要指出的是,這種情況下開發人員是否被允許操作值類型的地址是CLI語言設計時必須應該予以考慮的問題。 在垃圾收集器掃描緊縮狀態下,位於託管堆上的任何對象非常可能面對重新定位問題。指向對象的指針可以實時跟蹤並修改。開發人員不能自己手動跟蹤,所以,如果你獲許取得一個可能位於託管堆上的值類型的地址時,除了本地指針外,還需要有一個跟蹤形態的指針。
銷售商考慮的是什麼?那就是需要簡單和安全,在語言中直接提供跟蹤一個對象或集合的指針使語言復雜化,沒有這種支持,將減少復雜程度,可資利用的、潛在的程序開發人群可能會增加,此外,准許程序開發人員操作生命短暫的值類型,增加了錯誤產生的可能性,程序開發人員可能有意無意地對內存進行錯誤操作,不支持跟蹤指針,一個潛在的更安全地實時環境產生了。
另一方面,效率和靈活性也是必須考慮的一個問題,每一次向同一個對象分配值類型時,一個全新的數值加箱操作發生了,准許存取加箱值類型允許在內存中進行更新,這可能在性能上產生了一個非常巨大的進步。沒有跟蹤形態的指針,你無法用指針演算法重新聲明一個CLI數組,這意味著CLI數組不能使用標准模板庫進行重新聲明,也不能使用一般的演算法。准許操作加箱數值使設計具有更大地靈活性。
微軟在C++/CLI中選擇地址集合模式來處理託管堆上的值類型。
int ival = 1024;
int^ boxedi = ival;
array<int>^ ia = gcnew array<int>{1,1,2,3,5,8};
interior_ptr<int> begin = &ia[0];
value struct smallInt { int m_ival; ... } si;
pin_ptr<int> ppi = &si.m_ival;
典型地C++/CLI開發人員是一個復雜的系統程序員,承擔著提供下層內部構造和有組織的應用程序的任務,而這些恰恰是未來商業發展的基礎。C++/CLI開發人員必須兼顧可測量性和可執行性,所以必須在系統的高度級上來看待CLI下層結構。CLI細節水平反映了開發人員的臉色。
復雜性本身並不代表對質量的否定,人類比單細胞細菌復雜的多,這當然不是一件壞事,然而,當表達一個簡單的概念變的復雜化後,這常常被認為是一件壞事。在C++/CLI中,CLI開發團隊已經試著提供一種精巧的方法來表達方式一個復雜的事情。 第三個設計方面是特定功能性的語言層,它遠遠超過CLI所提供的直接支持,雖然這可能需要在語言層支持和CLI底層執行模式間建立一個映射。但在某些情況下,這恰恰是不可能的,因為語言無法調節CLI的行為。這種情況的例子就是在基類的構造及析構函數中定義虛函數。根據ISO-C++在這種情況下的語言學,需要用每一個基類的構造和虛構函數重新設置虛擬表,而這是不可能的,因為虛擬表句柄是實時管理的,而不是某一個語言來管理。
所以,這個設計方面是在完美性和可行性之間的妥協產物,C++/CLI提供的額外功能主要表現在三個方面:
1、獲取資源的一種形式是對於引用類型的初始化,此外,提供一種自動化工具,用於佔用較少資源、所謂的可確定性自動消亡的垃圾收集類型對象。
2、一種深度拷貝形式的語法與C++拷貝構造函數和拷貝分配操作符相一致,但其並不適用與值類型。
3、除了最初的一般性CLI機制外,還有對於CTS類型的C++模板直接支持。這些是我第一篇文章中討論的主題。此外,還提供了針對CLI類型的可校驗STL版本。
讓我們來看一個簡單的例子,一個確定性消亡問題。在垃圾搜集器重新聲明一塊與對象相關聯的內存之前,一個相關的消亡方法,如果存在的話,將被調用。你可以認為這種方法是超級析構函數,因為它與對象的程序生命期無關。這就叫做終結。終結函數是否調用以及什麼時間調用都沒有明確規定,這就是垃圾收集器的非確定性終結。
在動態內存管理的情況下,非確定性終結工作非常好,當可用內存變的越來越少時,垃圾收集器介入並開始著手解決問題。然而,非決定性終結也有工作不好的時候,當一個對象維護一個重要資源,例如一個資料庫連接、鎖定某些類別、或者可能是本地的堆內存。在這種情況下,只要是不需要,應立即釋放資源。目前CLI所支持的解決問題的方法是,對於一個類通過執行IDisposable介面提供的Dispose方法釋放資源。這里的問題是執行Dispose方法需要一個清晰的聲明,所以它也就不可能存在調用。
最基本的C++中的設計模式是上述的通過初始化來獲取資源,這意味著類使用構造函數來獲取資源,相反,類使用析構函數來釋放資源。這些行為由類對象在生存期內自動管理。
下面是引用類釋放資源時所做的順序動作:
1、 首先使用析構函數來封裝所有與釋放類有關的資源時所必須的代碼;
2、 析構函數自動調用後,結束類對象的生命期。
對於引用類型來說,CLI沒有類析構函數的概念,所以析構函數不得不映射為在底層執行的其它代碼。此時,在內部,編譯器執行以下操作:
1、 類讓其基類列表繼承自IDisposable介面;
2、 析構函數轉換成IDisposable的Dispose方法。
以上實現了目標的一半,一種實現析構造函數自動調用的方法仍然需要,對於引用類型,一種特殊的基於棧的符號得到支持,也就是說,一個對象的生命期與它的聲明範圍有關。在內部,編譯器將符號轉換為在託管堆上分配引用對象。隨著作用域的終結,編譯器插入一個Dispose方法-用戶定義的析構函數。與對象有關的內存的收回在垃圾收集器的控制下得到執行。
C++/CLI並不是將C++拓展到一個託管的世界,更確切的說,它代表一個完全綜合的範例,某種程度上就象當初將泛編程模式和多重繼承綜合進該語言一樣。我認為C++/CLI開發小組做了一項非常卓有成效的工作。

『玖』 C++ /CLI 和 C++ 的區別

1、C++/CLI(CLI:Common Language Infrastructure)是微軟設計,用來代替C++託管擴展的語言。這門語言在兼容原有的C++標準的同時,重新簡化了託管代碼擴展的語法,提供了更好的代碼可讀性。和微軟.NET的其他語言一樣,微軟向ECMA提交了C++/CLI的標准化請求,並且被ECMA通過成為正式的標准[1]。C++/CLI現在可以被Visual C++2005和更高版本的編譯器支持。C++/CLI的部分特性已經申請了專利。

2、C++本來就是兼具面向過程和面向對象的特點。C++/CLI是.net下的規范,編譯器先編譯為MSIL,也就是所謂的託管代碼了。

『拾』 匯編語言sti和cli作用

是不是AVR單片機中的,sti置1,cli把全局中斷I清0

閱讀全文

與cil語言編譯指令相關的資料

熱點內容
伺服器和網站開發有什麼區別 瀏覽:762
如何下載測試伺服器 瀏覽:177
怎麼教育孩子的app 瀏覽:172
交叉編譯的輸出文件 瀏覽:330
手機app怎麼變更辦稅員 瀏覽:936
sql服務停用命令 瀏覽:912
為什麼系統要用兩個雲伺服器 瀏覽:680
兩個pdf怎麼合並 瀏覽:293
php查詢為空 瀏覽:589
香港伺服器丟包了怎麼辦 瀏覽:46
linux系統管理教程 瀏覽:643
共享文件夾怎麼設置只讀文件 瀏覽:295
小米添加雲伺服器地址 瀏覽:581
qt入門pdf 瀏覽:670
視頻監控取消默認加密 瀏覽:294
雲伺服器怎麼設置輸入鍵盤 瀏覽:817
單片機支持多大mhz 瀏覽:42
linux啟動mysql命令 瀏覽:792
編程和游戲買什麼筆記本 瀏覽:902
程序員座點陣圖片大全 瀏覽:142