export hello export msg jump hello msg: db "Hello Hello!", '\n', 0 hello: push msg call system.outstr ret 這是使用jaja指令集實作的一個HelloWorld程式,jaja指令集乍看下和x86指令集很相像,但其實並不相同。jaja是一個軟體虛擬機器,是一個Stack Machine類型的虛擬機器,也就是指令操作的對象都是置於堆疊中。 原始碼檔組譯過後,如果沒有任何錯誤發生則會輸出一個mod檔案。每一個原始碼檔,可以組譯成一個對應的mod檔。透過dump工具顯示組譯過後的mod檔內容,如下。 module 'test/hello.mod', version: 0.01 ...names table 0 hello 1 msg 2 system 3 outstr ...exports table 0 hello 16 1 msg 3 ...imports table 0 system.outstr ...code section code size: 23 byte(s) 可以觀察到,mod檔是section導向的。可以看到import/export表,這和系統呼叫及symbol匯出相關。import/export表都是以字串型式儲存,所以還可看到一個名稱字串表。最後是一個程式碼區段,每一個程式碼區段的大小最大為64k。 使用dbg工具,可以以單步的方式去追踪程式的執行,以及作基本的除錯。在命令提示符號下輸入g指令直接執行程式,觀看結果。畫面輸出 Hello World! 在Hello程式裡面,export了二個symbol,hello及msg。hello指向一個函式的開始,而msg指向一串資料的開始。下面的範例import中,使用了這二個在...