大家好,感謝邀請,今天來為大家分享一下匯編指令機器碼對應表的問題,以及和機器碼的形式是什么的一些困惑,大家要是還不太明白的話,也沒有關系,因為接下來將為大家分享,希望可以幫助到大家,解決大家的問題,下面就開始吧!
cpu指令集和匯編指令區(qū)別
CPU指令集是在CPU設計時固化在里面邏輯電路,作用是把匯編語言”轉換到“機器碼”,是CPU中的"譯碼電路"。
匯編指令是匯編語言中使用的一些操作符和助記符。匯編指令同機器指令一一對應。不同的CPU都有自己的匯編指令集。
keil怎么看每段c語言對應的匯編
keil里面,要看每段C語言對應的匯編,需要先對C源程序進行編譯,編譯成功后才能進入調試模式,之后才能打開Disassembly窗口,里面就是C和匯編對應的代碼。
已知機器碼怎么算注冊碼
沒做過注冊機,不過做過這樣的事,通過在彈出框messagebox函數下斷點,然后打開注冊碼驗證界面,隨便輸入一串注冊碼,這樣會彈出錯誤提示進入斷點模式,然后在內存堆棧里面查看你剛輸入的注冊碼是和哪個內存數據對比的,然后通過在exe空白段寫入自己準備好的調用messagebox的匯編指令,通過jmp跳過去把真實注冊碼彈出來。
一條匯編指令的屬性包括哪些內容
關于這個問題,一條匯編指令的屬性包括以下內容:
1.操作碼(Opcode):指令的操作碼表示指令的功能和操作類型。
2.操作數(Operand):指令的操作數表示指令要操作的數據或者地址。
3.尋址方式(AddressingMode):指令的尋址方式表示指令如何獲取操作數的地址。
4.指令長度(InstructionLength):指令的長度表示指令占用的字節(jié)數。
5.執(zhí)行時間(ExecutionTime):指令的執(zhí)行時間表示指令執(zhí)行所需的時鐘周期數。
6.算術邏輯單元(ALU)操作:指令執(zhí)行時,ALU執(zhí)行的操作。
7.控制單元操作:指令執(zhí)行時,控制單元執(zhí)行的操作,如分支、跳轉、中斷等。
8.指令的編碼方式:指令在計算機中的二進制編碼方式。
9.指令的功能描述:指令的具體功能描述,例如加法、乘法、移位等。
10.指令的影響:指令執(zhí)行后對標志位、寄存器、內存等的影響。
11.指令的操作類型:指令的操作類型表示指令的功能類型,例如算術操作、邏輯操作、數據傳輸等。
怎樣使用匯編指令對8位、16位、32位寄存器數據進行存儲
回答這個問題前需要先介紹一款調試工具DTdebug.EXE以便我們通過實驗來驗證。在電腦旁的同學可以自己親自動手實驗一下,實踐出真知,掌握本質對于學習計算機的同學來說還是很有意思的。
如果要真正明白,必須要掌握以下的知識點:
掌握DTDebug界面、并熟練使用
1、熟記匯編窗口的組成及寄存器窗口的組成
2、MOV指令的熟練使用
3、掌握字節(jié)、字、雙字的知識
4、使用匯編指令對8位、16位、32位寄存器數據的存儲
寄存器是處理器(CPU)中用來存儲數據的地方。接下來我們借用【DTDebug軟件】來分析。
DTDebug.exe是供程序員使用的程序調試工具?!颈竟?jié)只簡單介紹DTDebug的使用,詳細說明書請到編程達人官網去下載相關文檔】
雙擊DTDebug.exe軟件圖標如圖2-4-1所示,打開界面如圖2-4-2所示。
圖2-4-2是軟件的原始界面,沒有任何記錄。那該怎么把將要被調試的程序打開哪?
有四種方式:
1、在如圖2-4-2程序窗口中找到File->Open->找到調試程序;
2、直接將要被調試的程序拖拽到如圖2-4-2程序窗口中。
3、關閉如圖2-4-2窗口,把將要被調試的程序拖到如圖2-4-1DTDebug圖標上。
4、在如圖2-4-2程序窗口中找到File->Attach->找到將要被調試的程序(正在運行的軟件)。
以IPMGS.exe為例,介紹DTDebug界面,如圖2-4-3,圖2-4-4所示。
圖2-4-4中標注的4個窗口,分別為匯編窗口、寄存器窗口、內存窗口、堆棧窗口。
【匯編窗口】
簡單介紹匯編窗口,匯編窗口由內存、特征碼、匯編、標注區(qū)(從左向右)這四塊組成?!驹诒竟?jié)這三塊不做介紹】
一個程序運行以后,處理器會一行行的執(zhí)行它的代碼,如圖2-4-4處理器會沿著匯編窗口從上往下一行行執(zhí)行代碼,直至結束。跟著操作時肯定會有如下疑問,首先沒有看到被調試的程序運行,其次匯編窗口并沒有從上往下一行行執(zhí)行代碼。接下來解答一下,DTDebug軟件是可以中斷當前運行的程序的,如圖2-4-4黃色區(qū)域中寫著Paused表示當前程序是被中斷的,其次接著看圖2-4-4匯編窗口中有黑色區(qū)域表示當前被調試的程序被中斷在這塊內存區(qū)域。該塊區(qū)域是被調試程序的入口點?!疚闹兄v到的中斷指:處理器運行到該段程序時,讓該程序停止運行了】。那怎么讓程序一行行往下執(zhí)行哪?看圖2-4-4中有一個三角符號按下程序將會一行行往下執(zhí)行,此時被調試的程序就會運行起來。
接下來介紹寄存器窗口。如圖2-4-4寄存器窗口所示。
【寄存器窗口】
簡單介紹寄存器窗口,寄存器窗口由EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI這8個通用寄存器,還有EIP寄存器、EFLAGS寄存器及它們相對應存儲的數值。
EIP、EFLAGS寄存器與8個通用寄存器的區(qū)別在于,以EAX寄存器為例,EAX寄存器可以任意讀寫數據,而EIP寄存器,它的作用是存放當前代碼段即將被執(zhí)行的下一條指令的地址,不可以隨意讀寫,如圖2-4-4寄存器窗口所示,EIP當前存儲的值為:004185B7,看匯編窗口黑色區(qū)域和EIP存儲的值是一樣的。那么EFLAGS是標志寄存器,它是受特殊匯編指令的控制,特殊匯編指令決定它當前數值位的變化。
寄存器窗口簡單介紹完了,那怎么用通用寄存器哪?在介紹使用之前先介紹一個指令。
【MOV指令】
MOV指令是移動數據。MOV指令可以把立即數移動到寄存器,也可以把寄存器的數據移動到寄存器。
例:
MOVEAX,1(把1移動到EAX寄存器里)
MOVEAX,ECX(把ECX寄存器的數據移動到EAX寄存器里)
用DTDebug軟件把例題操作一遍。首先打開軟件如圖2-4-4所示,將鼠標移動到匯編窗口,雙擊黑色區(qū)域所對應的那一行匯編代碼,彈出輸入指令窗口如圖2-4-5所示,把鼠標移動到輸入窗口中,將里面的指令編寫成:MOVEAX,1如圖2-4-6所示,點擊Enter鍵,匯編指令將被顯示到匯編窗口,如圖2-4-7所示。MOVEAX,ECX重復以上的操作。完成后按F8執(zhí)行,觀察寄存器窗口,如圖2-4-8、圖2-4-9所示。
彈出輸入指令窗口
輸入指令:MOVEAX,1
輸完指令點擊鍵盤Enter鍵
F8單步運行
F8單步運行
簡單介紹完了MOV指令,通過對MOV指令的編寫、運行,寄存器相對應存儲的數據發(fā)生了變化,那這些數據是怎么存儲的哪?接下來介紹數據在通用寄存器中的存儲。
【通用寄存器對數據的存儲】
先回顧一下8位、16位、32位通用寄存器。
如通用寄存器表所示。
根據圖2-4-9寄存器窗口所示,EAX對應的數據是:0x0012FFB0.只有8個數據。而EAX是32位的,它是怎么存儲的哪?
這里要回顧一下字節(jié)、字、雙字這個知識點。
字節(jié):記為Byte,一個字節(jié)由8個bit組成,可以存在8位寄存器中。
字:記為Word,一個字由兩個字節(jié)組成,這兩個字節(jié)分別為這個字的高位字節(jié)和低位字節(jié),可以存在16位寄存器中。
雙字:記為DoubleWord,一個雙字由2個字組成,這兩個字分別為這個雙字的高位字和低位字,可以存在32位寄存器中。
一個雙字可以存在一個32位寄存器中,這個雙字由高位字和低位字組成。低位字可以存放16位寄存器,而16位寄存器,由兩個字節(jié)組成,這個高位字節(jié)和低位字節(jié)自然就存在這個寄存器的高8位寄存器和低8位寄存器中。
以EAX寄存器為例,如圖2-5-11所示。
圖2-4-10EAX寄存器邏輯結構圖
知道了字節(jié)、字、雙字,在看寄存器窗口中的數據相信大家知道它是怎麼存儲了的。
接下來用匯編指令來實現(xiàn)對8位、16位、32位寄存器進行存儲。
以下例題自己在軟件中實驗,增強寄存器對數據存儲的認識,其次可以加強對MOV指令的練習,再者多熟悉該軟件,我們以后的章節(jié)都會用到。
例:
MOVAL,1
MOVAH,2
MOVAX,0xFFFF
MOVEAX,0xFFFF0000
MOVCL,1
MOVCH,2
MOVCX,0xFFFF
MOVECX,0xFFFF0000
匯編器怎么將匯編語言編譯成機器代碼
就是翻譯,將匯編轉成二進制文件保存你可以打開可執(zhí)行文件EXE里面全是二進制的,其實說白了,硬盤里只保存2種文件,一種是指令文件,一種是信息文件,指令文件可被CPU執(zhí)行,就是可執(zhí)行文件,信息文件存放的是數據,CPU無法執(zhí)行,當然也不是無法執(zhí)行,只不過這些對于CPU來說都是亂碼,執(zhí)行毫無意義具體原理學多了就知道了
關于匯編指令機器碼對應表和機器碼的形式是什么的介紹到此就結束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關注本站。