②flag的設置的原因是:本地方法的參數的個數不是固定的,而OS20所提供的用匯編調用函數在回到函數入口點時只彈出Wptr"指向的4個單元的內容,因此多余的參數出棧操作也必須通過調節Wptr手動完成,通過向下移動Wptr查找flag標志,再調節Wptr到Wtpr+2即可正確地回到匯編函數。當本地方法的參數完全手動入棧后就可以手動調節工作區指針Wptr而進入到調用的本地函數,函數返回后的第一件事是保存在寄存器中的函數的返回值到returnvalue,恢復工作區指針Wptr,并將本地方法的返回值類型作為嵌入匯編的函數的返回值,此時就完成了由Java棧到C棧的轉換,并成功調用本地方法。
圖3Java棧到本地棧的轉換
結論
通過對Sun公司下載的CDC代碼的修改與編寫,對CDC中的加載的類做了一些裁減,并且將線程化的解釋器改為一次性解釋字節碼的單線程解釋器簡化程序,成功地生成了在機頂盒上可以運行簡單的Java程序的虛擬機。