中国的一级毛片_H无码精品3D动漫在线观看_9191久久_国产精品永久免费_亚洲精选一区_肉体裸体xxxxx免费观看

搜索新聞

Java虛擬機用于數字電視機頂盒研究與實現

本地方法函數調用
來源:中國有線電視 更新日期:2007-10-15 作者:佚名
內容導航:  分頁瀏覽 | 全文瀏覽

   本地方法

    解釋器處理字節碼時,與給定字節碼有關的動作的語義、執行字節碼的相關動作大多是從堆棧中獲得其操作數,并將其結果送回堆棧中。典型的情況下字節碼是帶有參數的,這些參數在字節碼流中緊跟在字節碼自身之后。

    在虛擬機解釋字節碼過程中,執行引擎會不時遇到請求本地方法調用的指令,虛擬機負責試著發起這個本地方法的調用。本地方法是Java虛擬機指令集的一種可編程擴展,運行這個本地方法就是Java虛擬機對這條指令的執行。

    本地方法函數調用

    為了增加虛擬機的性能,加快其速度,解釋器在處理一些字節碼時調用的本地方法函數用匯編實現了將Java棧轉換為C棧,然后在C堆棧上實現函數的調用。Linux下是用獨立的匯編語言程序invokeNative_i386。S實現函數CVMjniInvokeNative(),我們采用在C里面嵌入匯編的形式來實現該函數。

    該函數的形參有7個,完成的主要功能是將由實參傳遞來的部分數據通過直接或者運算后得到本地方法的參數,然后壓入本地棧,通過匯編來實現本地的C函數調用。實參傳遞過來的7個數據包含JNI環境指針(env)、本地方法的函數指針(nativecode)、Java棧指針(args)、本地方法的描述符(tersesig),Java棧的參數總數(argssize)表示靜態或非靜態方法的類對象標志(classobject)及用于存儲返回值的一個指針變量(returnvalue),其中env要作為第一個本地方法的參數傳遞,并且nativecode也要傳遞到本地方法來實現本地方法的正確調用。

    J2ME中的CDC移植

    由于Linux有多個通用寄存器,在實現該函數的代碼中充分運用了如esp、ebp、esi等寄存器,但是OS20提供的可操作的寄存器只有3個通用寄存器Areg、Breg、Creg和1個工作指針寄存器Wptr(相當于堆棧指針),在實現過程中,我們用在C函數中設立局部變量來代替Linux的通用寄存器,通過手動調整工作棧指針來實現本地方法的調用,具體實現過程如圖3所示。

    當進入匯編函數時,工作區指針為Wptr,實參、狀態寄存器和指令指針寄存器的值全部自動入棧,然后是我們定義的代替Linux寄存器的局部變量自動入棧,此時的Wptr自動移到Wptr′,利用OS20的匯編指令,手動將實參傳遞過來的參數通過計算得到本地方法參數的個數,然后將本地方法所需的參數依次壓棧,最后再手動調節工作區指針實現本地方法的成功調用。這里我們先將本地方法函數指針和1個標志位flag(0x10101010)入棧,原因有兩個:

 標簽:
推薦液晶電視品牌
廣告聯系:010-82755684 | 010-82755685 手機版:m.pjtime.com官方微博:weibo.com/pjtime官方微信:pjtime
Copyright (C) 2007 by PjTime.com,投影時代網 版權所有 關于投影時代 | 聯系我們 | 歡迎來稿 | 網站地圖
返回首頁 網友評論 返回頂部 建議反饋
快速評論
驗證碼: 看不清?點一下
發表評論
主站蜘蛛池模板: 精品国精品自拍自在线 | 好男人看在线视频 | 亚洲人精选亚洲人成在线 | 成人av中文解说水果派 | 国产探花在线观看视频 | 亚洲精品一区av在线播放 | 免费国产自线拍一欧美视频 | 国产一区在线观看麻豆 | 宝贝张开腿嗯啊高潮了视频 | 老熟妇bbxxx视频 | 亚洲欧美www | 噗嗤噗嗤高清在线视频www | 成年人福利视频 | 色老板最新地址入口处 | 又爽又黄又无遮挡网站动态图 | 久久久人成影片一区二区三区 | 变态孕交videosgratis孕妇 | 久久久久久A亚洲欧洲AV冫 | 中文字幕Va一区二区三区 | 黄色1级毛片 | 国产中文字幕网 | 国产无限资源在线观看 | 91精品国产高清久久久久久 | xxx在线播放xxx | 欧美成人理论片乱 | 丁香五月AV在线播放 | 天天爱天天色 | 亚洲成av人片在线观看麦芽 | 亚洲高清国产拍精品影院 | 99热精品首页| www.亚洲一区二区 | 亚洲精品无码AV专区最新 | 国产日产一区二区三区久久久久久 | 久久这里只精品国产免费10 | 亚洲日产精品一二三四区新增区域 | 三年片在线观看免费视频 | 亚洲欧美日韩一区二区三区在线 | 欧洲视频在线观看 | 国产一二三四ts人妖 | 午夜福利啪啪无遮挡免费 | a级毛片黄|