導航:首頁 > 程序命令 > 匯編O命令

匯編O命令

發布時間:2025-01-22 12:47:51

A. 匯編程序:接受鍵盤輸入字元,若輸入為字母,則顯示"L",若為數字,則顯示"D",其他的則顯示"O"。

直接寫主程序哈:
START: MOV AH,1
INT 21H
CMP AL,30H
JB OTHER
CMP AL,39H
JA NEXT
NUM1: MOV DL,'D'
MOV AH,2
INT 21H
JMP EXIT
NEXT: CMP AL,41H
JB OTHER
CMP AL,'Z'
JB CHR
CMP AL,'a'
JB OTHER
CMP AL,'z'
JA OTHER
CHR: MOV DL,'L'
MOV AH,2
INT 21H
JMP EXIT
OTHER: MOV DL,'O'
MOV AH,2
INT 21H
EXIT: RET

B. c程序o文件怎樣反匯編

在編程世界中,C語言和Pascal等高級語言被廣泛用於開發軟體。編寫完成的代碼經過編譯器轉化為可直接被計算機系統執行的執行文件。

然而,在某些情況下,我們可能需要將執行文件還原到更底層的語言,如匯編語言或其他高級語言。這個過程稱為反匯編,其目的是將機器語言代碼轉換回原始的編程語言代碼。盡管反匯編後的代碼和原始代碼的執行結果相同,但其結構和語法通常會有顯著差異,非編程專家往往難以理解。

為了進行反匯編,程序員可以使用專門的工具和軟體,如DEBUG等。這些工具提供了將二進制文件轉換回匯編代碼的功能。例如,通過在DEBUG中使用命令「-u」,可以實現文件位置的反匯編操作。盡管反匯編後的代碼與原始代碼存在差異,但通過這種方式,程序員可以進行逆向工程,修改代碼,例如,對於Flash文件生成的SWF文件,也能夠通過反匯編轉化為Flash源代碼。

C. O語言的簡述

O語言是一款中文計算機語言(或稱套裝),各部分開發狀態:
O匯編語言(簡稱OASM,√)
O中間語言(簡稱OML,√)
O高級語言(簡稱OXX,×)
界面描述語言(簡稱OFL,√)
窗口設計(√)
目前窗口設計、界面描述語言、O中間語言已經能很好的整合在一起(1.0.2.2版),基本有VB的事件驅動和窗口設計功能(但還不能創建COM控制項,自帶控制項也很少)。 顧名思義O匯編語言也是一門匯編語言,它具有傳統匯編語言的基本特點,也有與它們諸多不同之處。O匯編語言一個最大顯著的特點是支持語言配置,使得它可以支持所有你想支持的語言,當然,O匯編語言的初衷是為了支持中文,所以它可以非常好的支持中文匯編。如果你已經習慣了其它英文的匯編模式,比如你喜歡用EAX、EBP類似這樣的方式來命名寄存器,不要緊,只需要修改一下語言配置文件,這可以輕松做到。O匯編語言另一個顯著的特點是指令使用非常直觀和人性化,在不缺失匯編語言靈活性的情況下,使匯編語句的語意可以很直觀地表現出來,這主要得益於用了一些象徵性的符號,使得匯編語句不再是千篇一律的(指令 寄存器,內存操作數) 這樣的格式,而是更像 (寄存器 操作符 內存操作數)這樣的格式,不但容易理解,而且便於記憶,使匯編語言不再那麼枯燥,使人一團霧水。
當然,在這里我還是著重介紹怎麼用中文來編寫程序,匯編語言通常是分段的,O匯編語言也是如此,下面是O匯編語言的基本格式:
.位模式 32 ∥指明是16位、32位還是64位的代碼
文本編寫方式 符號編寫方式
∥這里包含一些頭文件和庫的引用
.包含文< 文件名 > 《 》
.引用庫< 庫文件 > 〈 〉
∥數據段
.數據段 ︻
{
} ︼
∥只讀段
.只讀段 ﹃
{
} ﹄
∥外部引用段
.引用段 ︽
{
} ︾
∥代碼段開始
.代碼段 ︷
{
∥開始函數定義
∏主函數()
{
∥這里添加代碼
}
} ∥代碼段結束 ︸
首先介紹注釋方式,O匯編語言使用行注釋與塊注釋方式,並分別支持兩種符號編寫方式。第一種支持C語言模式的注釋方式,即:以」//」雙左斜杠為行注釋符,以」/* */」作為塊注釋符。第二種方式是以『∥』這個符號作為行注釋的開始,以」「 」」這兩個符號作為塊注釋符。在一行中只要遇到行注釋符,這行內以這個符號之後的文字都被忽略,在兩個注釋塊符號之間的所有文字也都被忽略。
// 這行內這之後的文字被忽略
/*
這些文字被忽略
*/
∥ 這行內這之後的文字被忽略

這些文字被忽略
」 O中間語言可以說是匯編語言的抽象,它和匯編語言一樣,使用單句的語法,除了基本的條件句和函數調用外,基本的一條指令對應一條語句,因此,它比C語言在語法上更低級一些。這樣設計的目的是為了保持底層足夠大的靈活性,使前端代碼比較容易地映射到中間語言。C語言毋庸置疑是很強大,Pascal語言也非常強大,但是你很難將兩者代碼進行相互轉換,如果使用中間語言作為中間層,就能夠兼容兩者的語法。
O中間語言使用了掛載技術,使前端代碼的解析與後端代碼生成操作進行了分離,使用這一技術只須擴展相應的前端語法就能支持多種語法。所有掛載的介面都封裝在OMount.dll的動態鏈接庫中。
與O匯編語言相比之下的特色:
1.去除了匯編中段的概念(方便調用API,仍保留「引用段」)。
2.增加了控制台和動態鏈接庫的創建。
3.增加數組支持。
4.增加for語句,格式:設(;;;){}
5.增加do...while語句,格式:執行{}當()
6.增進循環語句。
7.增加字元變數。
8.去除了匯編語言中的寄存器概念。
9.增進了語法,「如果」也可以寫成「若」等。
10.支持英文語句,如「函數」可寫為function,如果寫為if,否則寫為else,.包含文寫為.include等等。
11.可以直接支持masm32的宏定義。
12.可以直接使用O匯編的函數,須在引用段進行調用,調用方式為API的調用方式。
13.增加了指針支持。

D. Gcc 和 Clang

GCC 編譯器作為 linux 系統下的主要 C/C++ 編譯工具,廣泛安裝於多數 Linux 發行版中。其命令形式通常為「gcc」,並提供了豐富的選項來輔助編譯過程。其中,常用選項包括:-E 僅執行預處理,-c 編譯或匯編源文件但不執行鏈接,-S 完成編譯但不匯編,僅生成匯編代碼,-o 用於指定輸出文件名。在 Linux 系統中,未指定輸出文件名時,默認輸出名為「a.out」,源文件後綴生成為「.o」,匯編文件後綴為「.s」。GCC支持多種環境的代碼生成,如使用-m32、-m64、-m16選項生成不同位數環境的代碼,例如,-m32下int、long和指針類型均為32位,-m64下int為32位,long和指針類型為64位,-m16與-m32類似,但在匯編文件開頭添加了gcc匯編制導,用於運行16位模式的二進制文件。

編譯過程主要分為預處理、編譯、匯編和鏈接四個階段。下面以一段源碼為例,詳細分析每個階段的內容。

首先,預處理過程會展開宏定義和條件編譯,生成預處理文件。使用cpp命令執行預處理,得到的sample.i文件中,宏定義和條件編譯已根據實際情況展開,宏引用被替換為實際值。通過-D指令可以自定義宏的值,進行預處理。在Linux系統下,通過「man gcc」可查詢GCC命令的詳細用法。

接著,GCC將預處理文件編譯為匯編代碼,生成匯編文件。匯編文件包含了核心的匯編代碼,展示了編譯過程中的匯編指令和數據操作。對比32位機器和64位機器匯編代碼的差異,可以發現主要在於寄存器的位寬和指令的位寬不同。

匯編代碼中,.cfi_startproc和.cfi_endproc用於初始化和結束本地數據結構,本地標簽用於分支目的地標記。基本匯編指令如pushl、movl、subl、cmpl、je、addl、sall、ret、movl等,分別用於操作寄存器、存儲數據、進行算術運算和邏輯運算、控制流程等。了解這些基本指令的用途有助於深入理解程序的執行流程。

使用GCC的-c選項編譯源代碼為機器代碼,通過-o選項指定輸出文件名。可以使用as命令得到機器語言,通過objmp指令查看目標文件的機器碼,反匯編指令幫助理解機器碼的含義。在程序中發現符號定義沖突時,可以使用nm命令列出目標文件中的符號,快速定位問題。

最後,鏈接器(ld)將編譯生成的目標文件鏈接為可執行文件。鏈接過程中,鏈接器解析未定義的符號引用,將目標文件中的佔位符替換為實際的符號地址。如果缺少必要的CRT文件,ld會生成警告。可通過查詢/usr/lib/x86_64-linux-gnu路徑找到CRT文件。C運行時文件(CRT)包含程序入口函數_start,負責調用__libc_start_main初始化libc,並調用main函數;_init函數在main函數前運行;_fini函數在main函數後運行。鏈接時使用-lc選項鏈接C標准庫。

Clang 是一個基於LLVM的C/C++編譯器,提供C/C++/Objective C/Objective C++語言的編譯支持,旨在超越GCC。Clang預處理、生成匯編代碼、生成目標文件、得到可執行文件的過程與GCC類似,但Clang提供了更多的特性,如更快的編譯速度、更好的錯誤診斷和更先進的類型推斷能力。使用Clang替代GCC進行C程序編譯時,可以體驗到這些額外的優勢。

Clang編譯過程包含預處理、生成32位和64位機器匯編代碼、生成目標文件和得到可執行文件等步驟。使用Clang編譯後的匯編代碼、目標文件和可執行文件與GCC編譯結果一致,但Clang在性能和語言支持方面可能具有優勢。

E. 匯編指令test的用法

test屬於邏輯運算指令,其功能為功能執行BIT與BIT之間的邏輯運算和測試功能(兩操作數作與運算,僅修改標志位,不回送結果)。

Test對兩個參數(目標,源)執行AND邏輯操作,並根據結果設置標志寄存器,結果本身不會保存。EST AX, BX與AND AX, BX命令有相同效果。TEST語法規格:TEST r/m,r/m/data。其影響標志包括:C,O,P,Z,S(其中C與O兩個標志會被設為0)。

test的運用舉例:利用Test指令測試一個位,例如寄存器:

test eax, 100b;/b後綴意為二進制/

jnz ******;/如果eax右數第三個位為1,jnz將會跳轉/

jnz跳轉的條件非0,即ZF=0,ZF=0意味著零標志沒被置位,即邏輯與結果為1。

(5)匯編O命令擴展閱讀

與匯編指令test功能相仿的還有cmp指令,CMP屬於算術運算指令,其功能為功能為比較兩個值(寄存器,內存,直接數值),與Test指令的測試功能相仿,其語法格式為CMP r/m,r/m/data,影響的標志位包括C,P,A,Z,O。

CMP比較.(兩操作數作減法,僅修改標志位,不回送結果)。cmp實際上是只設置標志不保存結構的減法,並設置Z-flag(零標志)。零標志很像carry,也是內部標志寄存器的一位。

閱讀全文

與匯編O命令相關的資料

熱點內容
央視網下載加密 瀏覽:452
命令行訪問伺服器 瀏覽:36
梁加密區箍筋是不是必須封閉箍筋 瀏覽:760
在百度地圖如何定位伺服器地址 瀏覽:570
單片機計數器中斷 瀏覽:296
哈啰安裝文件夾名稱 瀏覽:294
解壓視頻聲控用杯子玩泡沫 瀏覽:740
19年的普通安卓機怎麼樣了 瀏覽:604
如何在app上刷導游題目 瀏覽:861
子彈解壓視頻大全 瀏覽:323
鴻蒙加密等級 瀏覽:806
cocos2dluapdf 瀏覽:493
假的加密鎖靠譜嗎 瀏覽:176
經營聖手伺服器怎麼調 瀏覽:749
arduino手機編程 瀏覽:481
西醫pdf下載 瀏覽:29
後浪電影學院pdf 瀏覽:813
程序員怎麼做到不被人嫉妒 瀏覽:669
cmd新建文件夾md命令 瀏覽:570
php數組中的數值排序 瀏覽:832