MMIX机器简要介绍
生活随笔
收集整理的這篇文章主要介紹了
MMIX机器简要介绍
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
學計算機的應該聽過Don Knuth的大名吧,他的七卷本著作《the Art of Computer Programming》的第四卷的草稿也出來了。Knuth大神計劃在完成第五卷后重新修訂一、二、三卷,屆時上面的程序就不會用MIX匯編了,而是用MMIX匯編。別看僅僅是多了個M,這差別可大了,MIX和MMIX可以說是完全不同的機器,MIX設計于六十年代,當時計算機體系結構與今日大不相同,如果你看過TAOCP卷一的話肯定能明白MIX匯編的晦澀難懂。三十年過去了,Knuth終于要重新設計一臺機器,并且是RISC風格的64位機器。Knuth原話如下:
??? Thirty years have passed since the Mix computer was designed. And computer architecture has been converging during those years towards a rather different style of machine. Therefore it is time to replace MIX with a new computer that contains even less saturated fat than its predecessor.
可以看出新的機器必定簡單化,實際上Knuth就是在Hennessy和Patterson的幫助下設計MMIX的,那當然是一個RISC機器咯。
MMIX簡介
MMIX機器RISC風格的,這意味這它應該有很多寄存器,大部分操作因該都是在寄存器中完成;MMIX是64位機器,說明MMIX的寄存器應該都是64位的。
不錯,MMIX有256個通用寄存器,供程序作算術邏輯運算。比如 ADD $0,$1,$2 就是把1號寄存器和2號寄存器的值相加結果存入0號寄存器。
另有32個專用寄存器,供隱式尋址和一些特權指令操作。
MMIX的指令格式為 OP X,Y,Z
操作碼和每個操作數各占一字節,就是說MMIX指令的長度永遠是4個字節。X一般做目的操作數。
MMIX Hello World
在這里我不能詳細描述MMIX,只能提供一些資料,然后寫個Helloworld程序,因為我自己所知道的也非常有限。
MMIX模擬器稱為mmix,匯編器叫mmixal,下面就寫個hello.mms。(mms是MMIX匯編的通用后綴名)
???????
以*開頭的行是注釋
第5行應該很好理解,就是占用一些內存區,在里面存入"Hello, world!"中每個字符的ASCII值,10是換行,0和C語言中的'\0'是一樣的意思。
從第6行行開始每行都是一條指令,MMIX匯編格式中的指令分為三部分,標號、操作碼、操作數,之間用空白字符隔開。學過其他匯編的人應該很容易理解MMIX匯編的格式,只是要注意一點,操作數之間只能有一個逗號,連空格都不能有,這應該是knuth寫的詞法分析中的"BUG"。
第6行將字符串首地址String裝入最后一個寄存器
然后在第7行執行TRAP指令,TRAP相當于X86中的中斷指令。中斷服務程序是Fputs(模擬器提供的基本輸入輸出函數),它把$255中指示的字符串輸出到StdOut中。
最后用TRAP執行Halt指令,退出模擬器。
寫好后,就如同使用GCC一樣,先用mmixal匯編該源文件得到目標文件
??? mmixal -o hello hello.mms
再將目標文件hello載入mmix模擬器即可
??? mmix hello
編譯安裝mmix模擬器、匯編器及相關工具
本來這一節應該放在Hello World前面,但是我覺得上面的編譯過程與平常使用GCC沒什么區別,所以把最重要的一節放到最后。
在本文最后我提供了最新的MMIX模擬器源碼(不僅僅是模擬器,還有一系列工具,如匯編器),請讀者先下載。
解壓后打開Readme文件仔細閱讀,現在就沒我什么事兒了。
什么?不想看英文!哎,這怎么能學得好計算機呢。其實就是下面三步
$ make doc????????????????????????? // 會得到所有的文檔,包括MMIX架構說明,MMIX匯編說明,應該仔細看看
$ make mmix???????????????????????? // 得到MMIX模擬器的可執行文件 mmix
$ make mmixal?????????????????????? // 得到MMIX匯編器的可執行文件 mmixal
上面的安裝并不是經典的 confgiure、make、make install三部曲。實際上就相當于我們自己寫好了源碼,然后編譯得到了可執行文件,所以如果你想在任何目錄下都能執行 mmix,mmixal的話,就要把它所在的目錄假如PATH變量
OK,現在你可以去編譯開始寫的hello文件,并在模擬器中運行了。
ps: 讀者如果有興趣的話最好看看make doc產生的三個文檔,實際上幾乎沒有其他的參考資料
??? 對MMIX感興趣或有研究的朋友可以通過此博客或者JohnWaken@163.com聯系我
MMIX虛擬機源碼下載
??? Thirty years have passed since the Mix computer was designed. And computer architecture has been converging during those years towards a rather different style of machine. Therefore it is time to replace MIX with a new computer that contains even less saturated fat than its predecessor.
可以看出新的機器必定簡單化,實際上Knuth就是在Hennessy和Patterson的幫助下設計MMIX的,那當然是一個RISC機器咯。
MMIX簡介
MMIX機器RISC風格的,這意味這它應該有很多寄存器,大部分操作因該都是在寄存器中完成;MMIX是64位機器,說明MMIX的寄存器應該都是64位的。
不錯,MMIX有256個通用寄存器,供程序作算術邏輯運算。比如 ADD $0,$1,$2 就是把1號寄存器和2號寄存器的值相加結果存入0號寄存器。
另有32個專用寄存器,供隱式尋址和一些特權指令操作。
MMIX的指令格式為 OP X,Y,Z
操作碼和每個操作數各占一字節,就是說MMIX指令的長度永遠是4個字節。X一般做目的操作數。
MMIX Hello World
在這里我不能詳細描述MMIX,只能提供一些資料,然后寫個Helloworld程序,因為我自己所知道的也非常有限。
MMIX模擬器稱為mmix,匯編器叫mmixal,下面就寫個hello.mms。(mms是MMIX匯編的通用后綴名)
???????
以*開頭的行是注釋
第5行應該很好理解,就是占用一些內存區,在里面存入"Hello, world!"中每個字符的ASCII值,10是換行,0和C語言中的'\0'是一樣的意思。
從第6行行開始每行都是一條指令,MMIX匯編格式中的指令分為三部分,標號、操作碼、操作數,之間用空白字符隔開。學過其他匯編的人應該很容易理解MMIX匯編的格式,只是要注意一點,操作數之間只能有一個逗號,連空格都不能有,這應該是knuth寫的詞法分析中的"BUG"。
第6行將字符串首地址String裝入最后一個寄存器
然后在第7行執行TRAP指令,TRAP相當于X86中的中斷指令。中斷服務程序是Fputs(模擬器提供的基本輸入輸出函數),它把$255中指示的字符串輸出到StdOut中。
最后用TRAP執行Halt指令,退出模擬器。
寫好后,就如同使用GCC一樣,先用mmixal匯編該源文件得到目標文件
??? mmixal -o hello hello.mms
再將目標文件hello載入mmix模擬器即可
??? mmix hello
編譯安裝mmix模擬器、匯編器及相關工具
本來這一節應該放在Hello World前面,但是我覺得上面的編譯過程與平常使用GCC沒什么區別,所以把最重要的一節放到最后。
在本文最后我提供了最新的MMIX模擬器源碼(不僅僅是模擬器,還有一系列工具,如匯編器),請讀者先下載。
解壓后打開Readme文件仔細閱讀,現在就沒我什么事兒了。
什么?不想看英文!哎,這怎么能學得好計算機呢。其實就是下面三步
$ make doc????????????????????????? // 會得到所有的文檔,包括MMIX架構說明,MMIX匯編說明,應該仔細看看
$ make mmix???????????????????????? // 得到MMIX模擬器的可執行文件 mmix
$ make mmixal?????????????????????? // 得到MMIX匯編器的可執行文件 mmixal
上面的安裝并不是經典的 confgiure、make、make install三部曲。實際上就相當于我們自己寫好了源碼,然后編譯得到了可執行文件,所以如果你想在任何目錄下都能執行 mmix,mmixal的話,就要把它所在的目錄假如PATH變量
OK,現在你可以去編譯開始寫的hello文件,并在模擬器中運行了。
ps: 讀者如果有興趣的話最好看看make doc產生的三個文檔,實際上幾乎沒有其他的參考資料
??? 對MMIX感興趣或有研究的朋友可以通過此博客或者JohnWaken@163.com聯系我
MMIX虛擬機源碼下載
轉載于:https://www.cnblogs.com/john-d/archive/2009/12/06/1618056.html
總結
以上是生活随笔為你收集整理的MMIX机器简要介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (双指针、二分Binary Search
- 下一篇: HTTP与HttpServlet