編排 |?strongerHuang 微信公眾號 | strongerHuang
今天分享一個朋友的代碼文章,關于DOS、把運匯編的內容,以及雷軍的故事。
這是一段古董代碼了,因為在1994年,當時我的一個老師也是做匯編項目,他跟我聊過的故事是,當時是他跟一個前輩一起去現場給客戶看故障,調試,用的ARM匯編,當時前輩是賺了2w,他賺到了6k的樣子。
在94年能夠精通匯編,雖然不被大眾認可,認為這個電腦還是比較飄幻,因為那時候還沒有進入尋常百姓家,我接觸電腦在初中,那時候也02-03年了,而且那時候要記指令,也沒多少畫面,印象不深。
記得學校有個校園網劇音頻版,就是《讓青春繼續》,講述的牽扯到了四小龍以及當時的包分配最終走向自營的過程,剛好也是這個時間段,主人公百腦也是系統子弟,叛逆的去學了編程,最終走出自己的傳奇人生。
他們都是出生在這個時代,這個時代造就的人才,科技人才,能夠接觸到信息技術,那么很容易就能夠出彩。像馬化騰,張小龍,還有雷軍,李彥宏,都是做過技術開發的,有了程序員思維,同時又在商業中尋求生存,試錯的機會以及風口卷動,最終扶搖而出。
之前看到有朋友發雷軍寫的代碼,因為現在都不直接用匯編去寫代碼,但是如果用匯編寫過代碼的話,其實對于硬件接觸的多會對編碼有更深的理解,具體就是能夠將實現具體拆下去成顆粒狀的指令,這個跟我們一般意義的C語言還是有區別的。
當寫匯編的時候,會曉得一點,就是能夠感知到指令周期,以及時鐘運轉的流程,指令是計算機中表征最小顆粒,再往下的微指令一般都不深究,到這里就足夠將計算機系統搭建完成。
那么回過頭來,我們看下雷軍當時寫的代碼,因為是匯編語言,看了下大致就是MASM,于是我上網找出MASM32plus工具,但是編譯的結果是報錯,爆出很多不識別的指令。
這個也沒細究,我之前用MASM的時候,也已經是有API的,就是匯編的API,已經不是純粹匯編寫法了,大致是這種寫法了。
那么我再繼續查找,這段代碼跟我之前寫的C51的寫法差不多,我找了相關的一個編譯工具,emu8086,這個工具是識別這段匯編的,但是有個報錯是,重定義。這里主要就是代碼中多處的@@2這類標簽,在這個emu8086里面會認為這個是多重定義,但是按理說不應該,所以工具是沒選對的。也就是emu8086會把標簽認定成是全局的,但是實際上這個是函數內部的標簽。
那么我繼續去找ASM的編譯工具,找的關鍵字都是8086ASM,最終試了多個都是失敗了,也是比較挫折的。今天又想著不能放棄,再找找看看有沒有線索,于是便繼續檢索,找到了一本書,這本書給出了答案。
這本書的作者是雷軍,對就是寫這個的,求伯君和雷軍,寫出的金山軟件。書名是《深入DOS編程》,因為這段代碼就是DOS下的清理軟件,而且時間點也是匹配的,所以這個書里面應該有答案的。(文末提供這本書的鏈接,以及對應的所有工具。)
我要找的是什么?就是編寫代碼,以及書里面怎么編譯的。簡單驗證了下匯編寫法一致,那么就剩下找到書里的編譯工具,幸運的是,找到了,具體是:
TASM 3.0。引用下百度的介紹:
下一步便是找到工具,從csdn找到的開發包缺少tlink工具,于是又百度找了下,最終找全了。在win7 ,win10上面,運行不了這個工具了,因為缺少DOS環境了,那么我們就應該找到 XP 系統,這個里面是包含著DOS系統的,我們去看windows的PE結構,就知道里面前面的一部分是表征的DOS結構。
那么我們裝一個虛擬機,我這里用的Vbox,我電腦裝VM12裝xp系統就會卡死,于是我用了Vbox安裝了雨林木風的GHOST,最終把工具放到里面,運行成功。以下是運行的效果,編譯過程。
具體是:tasm 匯編成obj,然后使用tlink進行鏈接,最終生成COM可執行程序。
最后分享個學習方法,在使用一個工具的時候,可以去看看它的官方文檔,以及工具中的文件夾,幸運的是,TASM安裝包有EXAMPLES,打開可以去看看一些實例,學習,編譯。同時還能快速的確認出來,跟雷軍的代碼使用的偽指令,匯編代碼差不多,也就是這個工具就對了。
當然這個工具真正要跑應用,是在DOS的實模式運行,我們的XP是模擬的DOS環境,所以也不是完全一致,這塊如果要真正測驗,需要一個DOS的模擬器,完全一致下,測試效果就出來了。
最后分享一張雷軍還是碼農的時候照片,有時候在想,是不是因為要時常輔導女同事,然后最終把自己的技術煉道成仙了呢?
什么是自由軟件?
C語言實現面向對象的原理
無MMU搶占式操作系統的搶占工作原理
長按前往圖中包含的公眾號關注
免責聲明:本文內容由21ic獲得授權后發布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!