[英]Intel 8086, a few little things
MOV AL,4
的8086指令的編碼是否為c604
?
另外,我將如何編碼MOV AX, DS:5678h
和SUB BX,[Di+6]
謝謝你的幫助。
MOV AL,4
被編碼為B004
。
MOV AX, DS:5678h
是invalid combination of opcode and operands
的invalid combination of opcode and operands
。 這將無法編譯。
SUB BX, [DI+6]
被編碼為2B5D06
。
對於那些感興趣的人,這是如何解碼已編譯的16位匯編器。
...這可能是一個很好的Wiki。
首先:這是在Mac OS X上完成的,但是任何Linux發行版都可以使用所描述的工具。
在x86(8086)匯編語言以及許多其他匯編語言中,匯編器將(幾乎)人類可讀的助記符編譯為字節碼。 每個助記符都會轉換為特定的字節碼。 例如:
XOR AX, AX
編碼為31C0
。
要解碼機器語言,您將需要您喜歡的文本編輯器,NASM(Netwide匯編器)和十六進制編輯器。
步驟1:在文本編輯器中輸入要解碼的助記符,首先使用[BITS 16]指令。 救。
步驟2:使用命令nasm <your file> -f bin -o <output file>
編譯
步驟3:使用十六進制編輯器打開輸出文件。
步驟4:顯示的字節將為解碼助記符。
這是如何將字節碼反編譯為NASM語法助記符。 這與上述步驟相反。
NASM帶有工具ndisasm
或Netwide Disassembler。 該程序會將字節碼反匯編成原始指令。
您將需要NASM工具集,並且,如果需要,可以使用十六進制編輯器。
步驟1:獲取您的字節碼文件。 這應該是匯編語言。 C / C ++代碼或任何其他機器語言文件可能在實際機器代碼之前包含標頭。
如果需要,可以使用十六進制編輯器檢查/編輯字節碼文件。
步驟2:運行此命令: ndisasm -b 16 <bytecode file>
。 終端右側顯示的行是字節碼中的助記符。
如果字節碼無效,則有時ndisasm
會說某些字節是db
助記符-這些意味着define byte
。 換句話說,這是一個填充字節,並且ndisasm
找不到有效的助記符。
另外,請記住,使用ndisasm
和任何其他反編譯器或反匯編器時,反編譯器/反匯編器將不會檢索注釋或空格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.