日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > ASM > 正文

【JVM】模板解釋器--如何根據(jù)字節(jié)碼生成匯編碼?

2019-11-15 01:01:45
字體:
供稿:網(wǎng)友
【JVM】模板解釋器--如何根據(jù)字節(jié)碼生成匯編碼?1、背景

僅針對(duì)JVM的模板解釋器:

如何根據(jù)opcode和尋址模式,將bytecode生成匯編碼。

本文的示例中所使用的字節(jié)碼和匯編碼,請(qǐng)參見上篇博文:按值傳遞還是按引用?

2、尋址模式

本文不打算深入展開尋址模式的闡述,我們聚焦Intel的IA32-64架構(gòu)的指令格式:這里寫圖片描述

簡要說明下,更多的請(qǐng)參考intel的手冊(cè):

-- PRefixes : 用于修飾操作碼Opcode,賦予其lock、repeat等的語義.-- REX Prefix: ---- Specify GPRs and SSE registers. ---- Specify 64-bit Operand size. ---- Specify extended control registers.--Opcode:操作碼,如mov、push.--Mod R/M:尋址相關(guān),具體見手冊(cè)。--SIB:和Mod R/M結(jié)合起來指定尋址。--Displacement:配合Mod R/M和SIB指定尋址。--Immediate:立即數(shù)。

對(duì)上面的Opcode、Mod R/W、SIB、disp、imm如果不明白,看句匯編有個(gè)概念:

%mov %eax , %rax,-0x18(%rcx,%rbx,4)

如果這句匯編也不太明白,那么配合下面的:

-- Base + (Index ? Scale) + Displacement -- Using all the addressing components together allows efficientindexing of a two-dimensional array when the elements of the array are 2, 4, or 8 bytes in size.

3、合法的值(64位)

關(guān)注下這4個(gè)參數(shù)的合法取值:

? Displacement — An 8-bit, 16-bit, or 32-bit value.? Base — The value in a 64-bit general-purpose register.? Index — The value in a 64-bit general-purpose register.? Scale factor — A value of 2, 4, or 8 that is multiplied by the index value.

4、Mod R/M(32位尋址)

我們?cè)诤笪膶?huì)用到Mod R/M字節(jié),所以將32位尋址的格式貼在這里:

這里寫圖片描述

上表的備注,其中第1條將在我們的示例中用到,所以這里留意下:

  1. The [--][--] nomenclature means a SIB follows the ModR/M byte.
  2. The disp32 nomenclature denotes a 32-bit displacement that follows the ModR/M byte (or the SIB byte if one is present) and that isadded to the index.
  3. The disp8 nomenclature denotes an 8-bit
5、SIB(32位尋址)

同樣,因?yàn)橛玫搅薓od R/M字節(jié),那么SIB字節(jié)也可能要用到:

這里寫圖片描述

6、示例6.1、準(zhǔn)備工作

來看個(gè)實(shí)際的例子。

下面的代碼是生成mov匯編碼:

void Assembler::movl(Address dst, Register src) {  InstructionMark im(this);  prefix(dst, src);  emit_int8((unsigned char)0x89);  emit_operand(src, dst);}

prefix(dst,src)就是處理prefix和REX prefix,這里我們不關(guān)注。

emit_int8((unsigned char) 0x89)顧名思義就是生成了一個(gè)字節(jié),那字節(jié)的內(nèi)容0x89代表什么呢?

先不急,還有一句emit_operand(src,dst),這是一段很長的代碼,我們大概看下:

void Assembler::emit_operand(Register reg, Register base, Register index,                 Address::ScaleFactor scale, int disp,                 RelocationHolder const& rspec,                 int rip_relative_correction) {  relocInfo::relocType rtype = (relocInfo::relocType) rspec.type();  // Encode the registers as needed in the fields they are used in  int regenc = encode(reg) << 3;  int indexenc = index->is_valid() ? encode(index) << 3 : 0;  int baseenc = base->is_valid() ? encode(base) : 0;  if (base->is_valid()) {    if (index->is_valid()) {      assert(scale != Address::no_scale, "inconsistent address");      // [base + index*scale + disp]      if (disp == 0 && rtype == relocInfo::none  &&          base != rbp LP64_ONLY(&& base != r13)) {        // [base + index*scale]        // [00 reg 100][ss index base]      /*************************** 關(guān)鍵點(diǎn):關(guān)注這里      **************************/        assert(index != rsp, "illegal addressing mode");        emit_int8(0x04 | regenc);        emit_int8(scale << 6 | indexenc | baseenc);      } else if (is8bit(disp) && rtype == relocInfo::none) {        // ...      } else {        // [base + index*scale + disp32]        // [10 reg 100][ss index base] disp32        assert(index != rsp, "illegal addressing mode");        emit_int8(0x84 | regenc);        emit_int8(scale << 6 | indexenc | baseenc);        emit_data(disp, rspec, disp32_operand);      }    } else if (base == rsp LP64_ONLY(|| base == r12)) {      // ...     } else {            // ...     }  } else {    // ...   }}

上面的代碼的關(guān)注點(diǎn)已經(jīng)標(biāo)出,這里我們將其抽出,并將前文中的emit_int8((unsigned char) 0x89)結(jié)合起來:

emit_int8((unsigned char) 0x89)emit_int8(0x04 | regenc);emit_int8(scale << 6 | indexenc | baseenc);

最終其生成了如下的匯編代碼(64位機(jī)器):

mov    %eax,(%rcx,%rbx,1)

好了,問題來了:

上面這句匯編怎么得出的?

6.2、計(jì)算過程

我們給個(gè)下面的值:

regenc = 0x0,scale << 6 | indexenc | baseenc = 25

進(jìn)行簡單的運(yùn)算就可以得到:

emit_int8((unsigned char) 0x89) //得到0x89emit_int8(0x04 | regenc); //得到0x04emit_int8(scale << 6 | indexenc | baseenc); //得到0x19

合起來就是三個(gè)字節(jié):

0x89 0x04 0x19

1、0x89對(duì)應(yīng)什么?

這里寫圖片描述

從上表可以看出因?yàn)镴VM工作在64位下,所以需要配合REX.W來“起頭”,不過在我們這個(gè)例子中,其恰好是0。

主要看那個(gè)89/r:

MOV r/m64,r64 //64位,將寄存器中的值給到寄存器或者內(nèi)存地址中

2、0x04代表什么?

現(xiàn)在我們要用到上面的Mod R/M表和SIB表了。

用第二個(gè)字節(jié)0x04查Mod R/M表,可知源操作數(shù)是寄存器EAX,同時(shí)可知尋址類型是[--][--]類型,含義為:

The [--][--] nomenclature means a SIB follows the ModR/M byte.

3、0x19代表什么?

繼續(xù)查SIB表,對(duì)應(yīng)字節(jié)0x19的是:

base = ECXscaled index = EBX

4、匯編代碼:

//32位mov %eax,%(ecx,ebx,1)//64位mov %rax,%(rcx,rbx,1)
7、結(jié)語

本文簡要探討了:

如何根據(jù)opcode和尋址模式,將bytecode生成匯編碼。

終。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

亚洲一级二级| 亚洲狠狠婷婷综合久久久久图片| 中文字幕乱码在线| 欧美日韩激情在线一区二区三区 | 亚洲黄页一区| 激情国产在线| 久久久精品国产99久久精品芒果| 一级特黄大欧美久久久| 日韩va亚洲va欧洲va国产| 国产亚洲人成a一在线v站| 国产aa精品| 国产丝袜一区| 国产色在线视频| 日韩国产欧美在线视频| 欧美日韩综合视频网址| 久久久久久91| 欧美成人vr18sexvr| 欧美日韩久久久| 日韩一级免费视频| 国产黄色网页| 亚洲а∨精品天堂在线| 国产卡1卡2卡三卡在线| av丝袜在线| 91精品在线观看国产| 欧美日韩中文字幕| www.狠狠| 亚洲国内精品视频| 日韩欧美一级视频| 91精品国产综合久久久蜜臀粉嫩| 不卡av免费在线| 国产农村妇女精品一二区| 亚洲黄色在线观看| 国产福利三区| 日韩在线一区二区视频| 亚洲综合在线中文字幕| 国产成人精品网址| 1区2区在线| 男人的天堂网av| 一区二区在线高清视频| 精品视频999| 在线一区免费| 亚洲一区激情| 久久精品电影| 美女尤物久久精品| 日韩欧美在线不卡| 欧美日韩午夜在线视频| 国自产拍在线网站网址视频| 日本不卡高清视频一区| 韩国v欧美v日本v亚洲| 色欧美日韩亚洲| 在线不卡一区二区| 欧美日韩在线视频一区| 日韩欧美高清在线| 亚洲第一网中文字幕| 日韩影院二区| 国产视频一区三区| 日韩欧美中文第一页| 国产一区 二区 三区一级| 色综合天天性综合| 亚洲一区在线观看网站| 中文字幕欧美日韩在线| 免费视频最近日韩| 日韩网站中文字幕| 精品色蜜蜜精品视频在线观看 | 综合激情一区| 日本亚洲视频在线| 精品国产91乱高清在线观看| 欧美日韩性视频在线| 韩国v欧美v日本v亚洲| 国产一卡2卡3卡4卡网站免费| 国产字幕在线看| 亚洲第一视频在线观看| 91精品国产91久久久久久不卡 | 国产高清精品在线| 日韩精品福利视频| 国产视频一区三区| 91精品国产色综合久久不卡蜜臀| 亚洲欧洲精品在线| av一区在线观看| 伊人网站在线| 一级日韩一级欧美| 国产一区在线观看视频| 亚洲国产无线乱码在线观看 | 91国内精品在线视频| 日本精品免费观看高清观看| 国产在线不卡av| 亚洲男女av一区二区| 欧美日韩国产第一页| 日韩欧美一级二级三级久久久| 91精品国产网站| 欧美日韩在线播放视频| 日韩国产高清一区| 国产欧美日韩亚州综合| 国产黄色小视频| 国产成人综合av| 国产成人精品999在线观看| 日韩欧美国产成人精品免费| 欧美日韩精品三区| 国产高清在线观看| 91精品国产高清久久久久久| 国产亚洲视频中文字幕视频| 欧洲精品二区| 亚洲国产综合久久| 日韩在线视频在线观看| 欧美日韩国产在线播放| 欧美不卡视频一区| 亚洲一区在线观看视频| 日韩精品视频中文字幕| av免费在线网站| 91色在线看| 91一区二区| 中文字幕在线观看播放| 先锋男人资源站| 日韩 国产 一区| 国产视频2区| 免费中文字幕日韩欧美| 久久蜜桃精品| 成人精品国产福利| 在线不卡一区二区| 欧洲精品久久久| 国产黄色在线网站| 欧美日韩国产免费观看| 一区二区在线看| 欧美日韩中文字幕在线视频| 久久精品在线观看| 日韩av综合在线观看| 中文字幕在线视频第一页| 欧美日韩亚洲国内综合网| 欧美 日韩 国产在线| 欧美日韩国产黄色| 日韩福利视频导航| 日韩欧美亚洲区| 国产黄色高清在线| 亚洲一区日韩在线| 中文字幕亚洲第一| 一区二区在线高清视频| 天天摸日日摸狠狠添| 欧美日韩午夜精品| 国产字幕中文| 日韩亚洲欧美中文在线| 亚洲最新永久观看在线| 日韩欧美一级二级三级久久久 | 亚洲欧美中文在线视频| 亚洲国产91精品在线观看| 中文字幕欧美国内| 一区二区三区在线播| 日韩欧美一级二级三级久久久| 一区二区不卡在线播放| 国产精品福利视频一区二区三区| 日韩欧美中文字幕在线播放| 国产日韩精品久久久| 欧美日韩综合在线观看| 欧美片网站免费| 久久99精品久久久久子伦| 麻豆精品视频入口| 欧美日韩中文精品| 91精品国产自产观看在线| 91精选在线| 久久久99免费| 欧美国产小视频| 日韩三级视频在线播放| 免费视频久久| 99在线精品视频免费观看20| 欧美日韩国产一区在线| 中文官网资源新版中文第二页在线观看| 日韩在线视频免费观看高清中文| 不卡在线一区二区| 日韩免费不卡avV| 先锋男人资源站| 久久精品久久久久| 欧美日韩国产专区| 91精品国产综合久久久久久 | 日韩欧美中文字幕视频| 91精品婷婷国产综合久久| 一区二区视频在线| 亚洲成在线观看| 欧美性生交大片免费| 国产午夜精品视频免费不卡69堂 | 日韩中文字幕视频在线观看| 日韩国产一区三区| 亚州福利视频| 精品三区视频| 日韩av一区二区在线| 久久视频在线免费观看| 日本va欧美va精品发布| 91精品国产自产在线| 五月天久久比比资源色| 国产成人精品亚洲| 日韩国产成人| 国产小视频在线| 国产调教精品| 日韩免费精品| 中文字幕精品视频| 中文字幕在线观看国产| 精品不卡一区二区| 亚洲视频色图| 日韩在线高清| 精品极品三级久久久久| 精品乱人伦一区二区三区| 中文字幕亚洲二区 | 欧美一级欧美三级在线观看| 精品一性一色一乱农村| 欧美三级在线播放| lutube成人福利在线观看| 日韩欧美综合视频| 又黄又www的网站| 99精品一级欧美片免费播放| 91精品国产综合久久福利| 欧美日韩精品欧美日韩精品| 中文字幕在线观看国产| 日本啊v在线| 欧美日韩高清在线播放| 久久91精品国产91久久小草| av亚洲免费| 中文字幕精品一区二| 国产v日产∨综合v精品视频| 日韩视频在线一区二区三区| 欧美一卡2卡3卡4卡| 国产精品福利视频一区二区三区| 一二三区精品福利视频| 日韩欧美一级精品久久| 久久中文免费视频| 久久久久久91| 亚洲大片精品永久免费| 欧美激情一区二区三区在线| 国产高清一级片| 精品网站999www| 日韩中文字幕网| av丝袜在线| 中文字幕 乱码 中文乱码91| 精品日韩一区二区三区免费视频| 黄色资源在线观看| 日韩精品在线播放| 日韩av二区| 国产视频中文字幕| 国产香蕉免费精品视频| 亚洲综合在线中文字幕| 欧美 日韩 国产在线观看| www.精品av.com| 欧美三级日韩三级国产三级| 国产欧美日韩在线| aaa欧美日韩| 欧美日韩国产区| 人成免费在线视频| 91www成人久久| 国产欧美日韩中文| 77777_亚洲午夜久久多人| 国产欧美三级| 中文字幕精品亚洲| 中文字幕高清在线播放| 日韩欧美一级在线播放| 欧美日韩三级一区| 欧美国产三级| 欧美日韩精品电影| 国产拍揄自揄精品视频麻豆| 欧美日韩一级黄| 一区二区精品区| 欧美日韩国产观看视频| 亚洲综合在线电影| 亚洲丝袜一区| 欧美日韩激情一区| 日韩在线一区二区| 午夜精品一区二区三区视频免费看| 亚洲 欧美 日韩系列| av中文网站| 亚洲一区中文在线| 国产网站av| 中文字幕在线播出| 中文字幕在线官网| 在线日韩中文| 免费国产成人看片在线| 日韩精品在线免费观看视频| 刘玥91精选国产在线观看| 亚洲伊人婷婷| 欧美日韩午夜精品| 红桃视频亚洲| 黄色国产网站在线观看| 第一页在线观看| 在线欧美日韩国产| 欧美中文字幕视频在线观看| 欧美不卡一二三| 中文字幕4区| 欧美黄页在线免费观看| 91久久视频| 中文字幕精品在线| 最近中文字幕在线中文高清版| 精品日韩视频在线观看| 在线国产一级| 国产一区深夜福利| 久久久精品国产免费观看同学| 午夜av一区| 欧美日韩一级片在线观看| 一区三区视频| 日韩视频在线一区二区三区| 日本亚洲欧美| 在线一区二区不卡| 91 中文字幕| 国产www.大片在线| 欧美二三四区| 欧美日韩亚洲国产综合| 丰满少妇一区| 欧美一级手机免费观看片| 国产黄色在线网站| 一区二区不卡久久精品| 国产黄在线看| 国产日韩1区| 久久久精品国产免费观看同学| 日韩欧美国产1| 国产成人精品网址| 国产不卡的av| 国产免费电影网站入口| 欧美日韩高清| 欧美日韩国产123区| 欧美日韩亚洲国内综合网俺| 国产一区成人| 日韩精品在线中文字幕| 日韩精品视频在线观看网址| 精品欧美久久久| 亚洲高清免费一级二级三级| 最近高清中文在线字幕在线观看1| 国产手机精品视频| 麻豆精品视频入口| 91精品国产自产91精品| 中文字幕欧美日韩在线不卡| 欧美久久久久久蜜桃| 国产成人va亚洲电影| 亚洲精品欧美二区三区中文字幕| 91精品国产经典在线观看| 亚洲成年人在线播放| 综合激情一区| 黄色片网站在线| 日韩精品免费观看视频| 一区二区三区在线|网站| 日韩中文欧美在线| 在线视频1区2区| 日韩一二三四区| 在线视频日韩欧美| 不卡视频一区二区三区| 久久精品国产91精品亚洲| 中文字幕一区免费| 欧美日韩精品三区| 欧美亚洲国产免费| 国产福利一区二区| 欧美三级在线播放| 亚洲欧洲综合另类| 欧美黄页在线免费观看| 欧美日韩视频免费| 亚洲福利在线看| 亚洲免费视频一区| 婷婷中文字幕一区三区| 97久久精品| 亚洲黄色一区二区| 日本国产在线视频| a视频免费看| 天天在线视频色| 国产高清在线视频| 91 中文字幕| 三级网站免费观看| 97caopor国产在线视频| 久久婷婷综合国产| 国产手机视频一区二区| 亚洲国产无线乱码在线观看| 久久久精品午夜少妇| 一区二区三区在线免费| 亚洲免费观看在线观看| 亚洲欧美中文字幕在线观看| 亚洲三级网站| 国产欧美日韩在线视频| 欧美三级精品| 亚洲欧美中文字幕在线一区| 精品视频在线视频| 韩国一区二区av| 日韩精品视频免费看| eeuss一区| 日韩欧美在线中文字幕| 国产在线观看黄色| 99视频在线看| 亚洲男人在线| 久久久99免费| 欧洲精品久久久| 国产成人综合av| 日韩免费久久| 国产一级片在线播放| 日韩精品丝袜在线| 福利一区二区| 亚洲高清在线观看一区| 精品一性一色一乱农村| 久99久视频| 日韩欧美一级在线播放| 精品国产91乱高清在线观看| 久久精品久久久久| 欧美大片在线观看一区| 欧美日韩在线视频免费观看| 日韩高清在线不卡| 日韩午夜中文字幕| 中文天堂在线一区| 国产欧美一级| 久久电影国产免费久久电影| 三级网站免费观看| 香蕉av一区|