標題真的說了一切。我的一個朋友告訴我他知道一個可以用二進制編程的人。我從來沒有聽說過用二進制編程的人,幾次Google搜索沒有返回任何有用的東西。所以我想我會轉向SO社區。有沒有人有任何關於二進制編程的信息,如果可能的話可能是一個快速的Hello World示例。提前致謝。是否可以用二進制編程?
回答
當然。它通常被稱爲machine code。這基本上是assembly language沒有助記符設備。懂得彙編的人可以用機器代碼進行額外的編程,根據需要參考操作碼列表(例如x86)。
我會這麼做嗎?不可以。即使是在極少數情況下,組裝也是有用的,除了證明你的技能之外,沒有理由拒絕assembler的幫助。
既然您問過關於hello world,那麼您應該查看this article。他展示了他如何編寫,然後優化了一個x86 ELF程序來輸出它。它最初是在nasm中編寫的,然後在十六進制編輯器中進行了修改。
沒有太多的要求,但已完成。有一段時間,代碼可以從前端控制檯以二進制形式輸入到系統中。這是容易出錯的。
我曾經有一個非常短的uudecoe程序,用ASCII編碼,可以加上UUEncoded文件的前綴。生成的文件將自解壓並可通過電子郵件發送。我希望機器代碼是手工完成的。我找不到它,即使可以,也沒有用處。
當然,您可以編寫機器代碼的二進制文件,然後通過您的十六進制鍵盤輸入機器代碼到您的計算機中。我已經將基於TMS1100的計算機放在一起。
一個簡單的程序在十六進制LED上顯示5將是0001000 0000101 0000001寫成二進制轉換爲機器碼將是8 5 1。然後該程序將運行並在LED上顯示5。
對於使用TMS1100的更復雜的程序,我可以按照這個程序進行操作,我猜想用二進制編程。
其實,如果你對數學和編程感興趣,我認爲這是非常令人滿意和有益的。
對於勇敢的心臟:您可以嘗試獲取MikeOS軟盤映像並運行monitor.bin程序。它允許您手動輸入十六進制操作碼並執行它們。例如(如文檔所述),輸入以下指令: BE0790 E8FD6F C3 4D00$
將在屏幕上產生一個單一的M
。
有一些深奧的編程語言。它們被用作實驗,而且不切實際,但是一個名爲BrainF ** k(是的,它實際上是一個真實的東西)使用八個不同的字符來修改字節值。這些類型的語言儘可能地接近你所能得到的。
非常有可能記住機器代碼相當於彙編指令。實際上,在用匯編語言編寫代碼時,通常會看到通過machine code monitor s,disassembler s,assembly listings等等的十六進制代碼。因此,隨着時間的推移,一些指令可以以十六進制格式存儲,而不需要額外的努力。
- 在畫面中的6502 ROM監控所看到的,其中十六進制代碼和組裝助記符並排顯示。
你需要的第二項技能是將十六進制代碼轉換爲二進制頭腦,這很簡單,我會稍微解釋一下。但是,記住所有十六進制數字的二進制等價物非常容易,其中有16個數字,畢竟(不是很多,不是嗎?)。
讓我們假設它是在1988年,我們花了近十年的移植8位視頻遊戲不同的平臺爲生,因此記住以下6502十六進制代碼說明對應的彙編指令:
OPCODE HEX
LDA #$44 0xA9 0x44
STA $44 0x85 0x44
STA ($44),Y 0x91 0x44
LDY #$44 0xA0 0x44
通過以上的操作碼僅存儲,我們可以僅使用筆和紙寫入以下機器碼:
0xA9 0x00 0x85 0x01 0xA9 0x02 0x85 0x02 0xA0 0x00 0xA9 0x01 0x91 0x01
實際上上面是在助記符形式下面彙編代碼:
LDA #00
STA $01
LDA #02
STA $02
LDY #00
LDA #01
STA ($01), Y
- 上面的代碼中6502asm.com彙編把一個白色像素在屏幕的左上角/仿真器的,繼續嘗試吧!
如果您已經記住了每個十六進制數字的二進制形式,那麼您可以將整個代碼寫成二進制。
但是,如果你沒有記住他們,或不肯定的二進制形式是什麼,很容易將它們與下面的技巧轉換:
1 1 1 1
| | | |
v v v v
8 + 4 + 2 + 1
| | | +---> 2^0 * 1 Ex: 13 is 8 + 4 + 0 + 1
| | +-------> 2^1 * 1 1 1 0 1 -> 1101 (0xD)
| +-----------> 2^2 * 1 Ex: 7 is 0 + 4 + 2 + 1
+---------------> 2^3 * 1 0 1 1 1 -> 0111 (0x7)
其中上飛幫助一個二進制代碼寫入:
LDA #00 -> 0xA9 0x00 -> 10101001 00000000
STA $01 -> 0x85 0x01 -> 10000101 00000001
LDA #02 -> 0xA9 0x02 -> 10101001 00000010
STA $02 -> 0x85 0x02 -> 10000101 00000010
LDY #00 -> 0xA0 0x00 -> 10100000 00000000
LDA #01 -> 0xA9 0x01 -> 10101001 00000001
STA ($01),Y -> 0x91 0x01 -> 10010001 00000001
有了一些復古的計算精神和動機有樂趣,我們實際上可以寫成二進制整個代碼不寫下來的中間步驟。
- 1. 與XlsxWriter是否可以進行二進制相同的輸出?
- 2. 是否可以編輯和重新編譯iOS二進制文件?
- 3. Linux:是否可以使用靜態鏈接的二進制文件進行一些面向插件的編程?
- 4. 運行32位編譯二進制文件的進程是否可以使用超過4GB的內存?
- 5. 是否可以從erlang節點啓動外部二進制應用程序?
- 6. 是否可以在某個二進制代碼片段中使用vtune而不是整個二進制文件?
- 7. 是否有工具可以將CIL編譯爲二進制文件?
- 8. 是否可以重新定位二進制文件?
- 9. 是否可以在java中執行二進制文件?
- 10. 是否可以訪問GLKTextureInfo中的二進制圖像數據?
- 11. 是否可以查看一個和零個二進制文件?
- 12. 是否可以使用iPhone陀螺儀進行編程?
- 13. 是否可以使用phpspec進行函數式編程?
- 14. 這個二進制到十進制的程序是否正確?
- 15. 是否可以在`flip`中使用一元函數而不是二進制?
- 16. 是否可以製作應用程序
- 17. 是否可以在Mac OS X上使用GNU彙編程序生成純二進制文件?
- 18. 如何以編程方式獲得二進制數的二進制補碼
- 19. 是否可以限制外部進程的CPU使用率?
- 20. 您是否可以限制N | Solid使用的進程數量?
- 21. 是否可以從控制器調用守護進程方法
- 22. 「編碼」和「二進制」都可以用於「Text :: CSV :: Encoded」嗎?
- 23. 是否可以使用PCNTL設置子進程的進程組?
- 24. 是否有一個函數可以否定C中的二進制數?
- 25. 是否可以強制VS 2013使用VS 2010編譯器進行編譯?
- 26. 是否有可能用ShellScript生成二進制/ Merkle樹?
- 27. 如何以編程方式編輯二進制文件(x86)?
- 28. C/C++:是否可以通過控制檯傳遞二進制數據?
- 29. 是否可以從CVS以二進制模式檢出所有文件?
- 30. 是否可以使用Python將二進制文件發佈到usenet?
是的,當然。請朋友的這位朋友出示這個例子。 ;-) – Keith 2011-02-11 02:15:13
與[我可以直接用二進制寫程序嗎?我怎樣才能讓電腦執行它? (http://stackoverflow.com/questions/4197055/can-i-write-a-program-in-binary-directly-how-can-i-get-the-computer-to-execute)。 – 2011-02-11 02:22:01
$ ad xx yy $ 20 $ ff $ d2或者它已經有一段時間了 – time4tea 2011-02-11 02:24:28