亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > ASM > 正文

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

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

僅針對JVM的模板解釋器:

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

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

2、尋址模式

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

簡要說明下,更多的請參考intel的手冊:

-- 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),具體見手冊。--SIB:和Mod R/M結(jié)合起來指定尋址。--Displacement:配合Mod R/M和SIB指定尋址。--Immediate:立即數(shù)。

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

%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個參數(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位尋址)

我們在后文將會用到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位尋址)

同樣,因為用到了Mod R/M字節(jié),那么SIB字節(jié)也可能要用到:

這里寫圖片描述

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

來看個實際的例子。

下面的代碼是生成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)顧名思義就是生成了一個字節(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)鍵點:關(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)注點已經(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位機器):

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

好了,問題來了:

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

6.2、計算過程

我們給個下面的值:

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

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

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

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

0x89 0x04 0x19

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

這里寫圖片描述

從上表可以看出因為JVM工作在64位下,所以需要配合REX.W來“起頭”,不過在我們這個例子中,其恰好是0。

主要看那個89/r:

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

2、0x04代表什么?

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

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

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

3、0x19代表什么?

繼續(xù)查SIB表,對應(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ā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

成人v精品蜜桃久久一区| 91精品国产高清久久久久久| 日本在线播放视频| 亚洲美女色视频| 久久亚洲导航| 成人a免费视频| 亚洲精品天堂成人片av在线播放| 国产欧美日韩亚洲精品| 一级片免费在线观看视频| 国产喂奶挤奶一区二区三区| 在线免费观看av片| 91精品啪在线观看国产手机| 婷婷av一区二区三区| 伊人久久久久久久久久久久久久| 成人午夜大片| 亚洲国产欧美国产第一区| 韩国精品主播一区二区在线观看| 色一情一区二区三区| 360天大佬第二季在线观看| www在线视频| 欧美一级在线观看| 成人黄色激情网| 欧美人与牲动交xxxx| 亚洲黄色小说网站| 蜜桃视频动漫在线播放| 成人短视频在线| 污视频网站观看| 女明星视频黄又免费| 无码aⅴ精品一区二区三区| 伊人国产在线观看| 欧美在线色图| 9.1在线观看免费| 日韩在线播放一区二区| 亚洲美女尤物影院| 亚洲国产中文字幕在线| 二区中文字幕| 久久99国产精品一区| 日本欧美在线视频免费观看| 亚洲av熟女高潮一区二区| 成人永久在线| 99热国产在线中文| 九色蝌蚪av新入口| 亚洲中文字幕无码中文字| 亚洲欧美色一区| 性欧美ⅴideo另类hd| 日韩欧美精品一区| 日韩vs国产vs欧美| 人人妻人人玩人人澡人人爽| 久久久精品国产网站| 高清毛片aaaaaaaa**| 欧美aaaxxxx做受视频| 亚洲精品国产手机| 久久男人中文字幕资源站| 国产三级第一页| 国产一区二区三区黄片| 中文久久乱码一区二区| 久久亚洲欧美日韩精品专区| 日韩久久久久久久久久久久| 成人小视频在线看| 欧美影院精品| 秋霞欧美一区二区三区视频免费| 先锋在线资源一区二区三区| 黄色影院在线观看| 欧美日韩国产三级| 欧美成人精品福利在线视频| 国产一区红桃视频| 亚洲精选av在线| 91性高湖久久久久久久久_久久99| 欧美日韩精品电影| 成年人在线看| 成人性生生活性生交12| 小小水蜜桃在线观看| h视频免费观看| 精品人妻无码一区二区色欲产成人| 视频亚洲一区二区| 国产精品色综合| 涩涩屋成人免费视频软件| 日本91av在线播放| 国产精品久久久久久亚洲伦| 国产精品免费一区| 久国产精品韩国三级视频| 一级特黄aaaaaa大片| 92国产精品视频| 亚洲欧美激情另类| 欧美在线3区| 欧美人禽zoz0强交| 91中文字幕在线| 激情综合丝袜美女一区二区| 成人中文字幕电影| youjizz亚洲女人| 成人免费av资源| 久久天天做天天爱综合色| 精品伦精品一区二区三区视频密桃| 欧美精品videos另类日本| 国产精品久久久久久免费免熟| 风流少妇一区二区三区91| 久久久综合激的五月天| 国产精品久久久久久妇女6080| 最新天堂网www| 日韩电视剧免费观看网站| 亚洲精品国久久99热| 欧美性感美女h网站在线观看免费| 国产系列在线观看| 国产精品第七影院| 久久精品72免费观看| av国产在线观看| 国产精彩视频在线观看| 禁果av一区二区三区| 91成人精品网站| 亚洲精品午夜av福利久久蜜桃| 四虎影成人精品a片| 九九精品视频在线观看| 中文字幕男人天堂| 激情综合色综合久久综合| 欧美高清在线观看| 欧美日韩你懂的| 国产精品第八页| 添女人荫蒂视频| 91久久嫩草影院一区二区| 亚洲男人的天堂av| 国产日韩三级| 50一60岁老妇女毛片| 嫩草研究院在线| 亚洲人成人一区二区在线观看| 欧美精品在线观看播放| 亚洲午夜精品久久久久久久久久久久| 97成人在线观看| 中文一区一区三区免费在线观看| 蜜桃av导航| 午夜精品久久久久久久久久蜜桃| 亚洲乱码在线观看| 中文幕av一区二区三区佐山爱| 日本丰满www色| 最新av电影| 国产精品99一区二区| 欧洲激情视频| 国产精品午夜电影| 欧美日韩精品在线视频| 91精彩刺激对白露脸偷拍| 日韩中文一区二区| 欧美日韩成人| 亚洲免费999| 国产精品123| 成人漫画网站免费| 成人免费网站在线| 麻豆短视频在线观看| 每日更新av在线播放| 欧美大胆a人体大胆做受| 亚洲成av人片一区二区三区| 高清在线成人网| 国产欧美在线观看免费| 日韩欧美精品一区二区综合视频| 亚洲精品a区| 四虎5151久久欧美毛片| 在线欧美成人| 又大又长粗又爽又黄少妇视频| 日本一二三区在线视频| 欧美午夜精品久久久| 自拍偷拍亚洲| 亚洲国产精品小视频| 成人午夜在线观看视频| 后入内射欧美99二区视频| 欧美精品久久久久久久| 亚洲女性喷水在线观看一区| 久久久久久久久久久久网站| 国产男女无遮挡猛进猛出| 国产成人精品免费看视频| 国内精品久久久久久99蜜桃| 久久99热这里只有精品| 97se亚洲国产一区二区三区| 亚洲成人av一区二区三区| 亚洲欧美国产77777| 国产精品无码专区av在线播放| 香蕉视频在线观看免费| 中文字幕在线一| 91精品久久久久久久蜜月| 黄色免费网站观看| 激情综合网俺也去| 国产对白videos麻豆高潮| 国产视频福利| 亚洲激情自拍| 在线观看网站黄| 精品av在线播放| 日韩日韩日韩日韩日韩| 国产精品熟女视频| 亚洲区一区二区三| 色天使在线观看| 一本色道久久综合| 成人综合日日夜夜| 激情欧美一区二区三区在线观看| 日韩经典第一页| 男女啪啪无遮挡网站| 亚洲成**性毛茸茸| 黄页视频在线播放| 日韩亚洲欧美视频| 美女久久久久久| 亚洲国产一区二区三区青草影视| 国精产品久拍自产在线网站| 国产精品嫩草69影院| 日本强好片久久久久久aaa| 久久香蕉一区| 永久免费看mv网站入口78| 欧美 日韩 激情| 激情欧美一区二区三区在线观看| 免费一区二区三区在线视频| 欧美套图亚洲一区| 亚洲精品视频一区| 超清福利视频| 亚洲激情国产精品| 亚洲美女又黄又爽在线观看| 国产成人精品三级高清久久91| 免费毛片在线看片免费丝瓜视频| 欧洲一级视频| 久草在线免费二| 99re66热这里只有精品3直播| 日韩黄色一级视频| 亚洲精品影院| 激情综合一区二区三区| 久久精品国产久精国产爱| 女人黄色一级片| 精品噜噜噜噜久久久久久久久试看| 国产激情美女久久久久久吹潮| 中文文字幕文字幕高清| 图片区小说区区亚洲影院| 在线尤物九色自拍| 色av一区二区| 国产午夜亚洲精品不卡| 精品人妻一区二区三区蜜桃视频| 日本v片在线高清不卡在线观看| 一级全黄肉体裸体全过程| 毛片网站免费| 亚洲系列中文字幕| 好爽好深好紧好大| 秋霞欧美一区二区三区视频免费| 精品一成人岛国片在线观看| 在线亚洲色图| 高清亚洲成在人网站天堂| 国产av人人夜夜澡人人爽麻豆| 精品日产一区2区三区黄免费| 成人网页在线免费观看| 精品视频二区三区| 成人免费直播| 色先锋资源在线播放av| 台湾佬成人中文网222vvv| 自拍小视频在线观看| xxx国产精品| 欧美自拍视频| 成人国产精品久久久| 动漫h在线观看| 亚洲自拍偷拍图区| 亚洲精品视频在线免费| gogo亚洲高清大胆美女人体| 性感美女一区二区在线观看| av在线app| 神马久久资源| 亚洲色图14p| 91xxx视频| 国产成人精品免费视频网站| 国产精品高潮视频| 国产999在线观看| 欧美日韩网站| 欧美猛男男办公室激情| 亚洲精品98久久久久久中文字幕| 免费大片黄在线观看| 亚洲欧美一区二区三区孕妇| a天堂在线资源| 88国产精品视频一区二区三区| 日韩精品――中文字幕| 亚洲国产成人精品一区二区三区| 91综合精品国产丝袜长腿久久| 隔壁人妻偷人bd中字| 欧美日韩综合网| 国产区二区三区| 欧美大陆一区二区| 成人中文字幕在线| 国产午夜精品久久久久久久| 欧美日韩另类国产亚洲欧美一级| 欧美专区国产专区| 亚洲精品在线视频| 三上悠亚激情av一区二区三区| www夜片内射视频日韩精品成人| 国产精品久久久一区二区三区| 亚洲一区中文字幕在线| 少妇一级淫片免费放中国| 操人在线观看| 99久久婷婷国产综合| 日韩欧美国产亚洲| 国产午夜亚洲精品羞羞网站| 视频在线这里都是精品| 日韩精品电影网站| 2018中文字幕在线| www.狠狠操| 日日噜噜夜夜狠狠久久波多野| 伊人伊成久久人综合网站| 亚洲色在线视频| 欧美成人手机在线| 在线观看视频免费一区二区三区| 99精品视频免费在线观看| 成人爽a毛片一区二区免费| 亚洲欧洲性图库| 你懂的好爽在线观看| 国产免费又粗又猛又爽| 国产伦子伦对白视频| 亚洲精品网站在线观看| 蜜桃视频在线观看网站| 亚洲影院一区二区三区| 国产麻豆91视频| 亚洲精品一二三四五区| 欧美成人午夜激情在线| 青青草国产精品97视觉盛宴| 国产精品视频免费在线| 99在线视频播放| 亚洲欧美欧美一区二区三区| 色偷偷网友自拍| 免费永久网站黄欧美| 乱馆动漫1~6集在线观看| 青娱乐精品视频| 成人黄色在线看| 午夜小视频在线播放| 国产一卡2卡3卡四卡网站| 日韩人妻无码一区二区三区99| 在线观看日批视频| 亚洲毛片在线观看| 91日本在线视频| 久久精品日产第一区二区| 国产在线精品一区在线观看麻豆| 国自在线精品视频| 国内精品99|