首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

是不是每个汇编指令多有自己对应的二进制代码呀?解决办法

2012-04-26 
是不是每个汇编指令多有自己对应的二进制代码呀?00462CEF: 83 C4 18ADD ESP,1800462D01: 83 C6 0FADD ESI,

是不是每个汇编指令多有自己对应的二进制代码呀?

00462CEF: 83 C4 18 ADD ESP,18

00462D01: 83 C6 0F ADD ESI,0F

00462D3F: 83 C4 14 ADD ESP,14

00462D57: 83 C6 0F ADD ESI,0F

像上面第一行 83代表add C4代表esp 18代表18  
是不是每个指令自己多有对应的二进制(十六进制)代码呀
还是怎么样呢??



00462C5D: E8 5F FF FF FF CALL 00462BC1
00462C62: 59 POP ECX
00462C63: E9 6F 01 00 00 JMP 00462DD7

像这些代码 最后一行“E9 6F 01 00 00 ”和“JMP 00462DD7” 根本不是一一对应嘛~~

好难理解哟



[解决办法]
承蒙提示,敝人认真滴看了所谓的INTEL官方文档。但是,发现和你说的不太符合。
首先,相对短转移,用的是8位相对偏移量,这个与你所说符合;
其次,16位相对近转移,用的是相对偏移量,这个与你所说符合;
再次,32位相对近转移,用的是相对偏移量,这个与你所说符合;
第四,16位直接远转移,用的是绝对地址,你没说。如jmp 0x2000:0x5500
第五,32位直接远转移,用的是绝对地址,你也没说。如jmp 0x2000:0x6000000
第六,16位间接绝对近转移,用的是绝对地址,你也没说。如jmp cx或者jmp near [bx]
第七,32位间接绝对近转移,用的是绝对地址,你也没说。如jmp ecx或者jmp near [ecx]
第八,16或32位间接绝对远转移,用的是绝对地址,你也没说。如jmp far [5]

探讨
楼主,对于JMP的机器码是跟跳转的类型是密切相关的
短跳转和近跳转指令中包含的操作数都是相对于EIP的偏移,而远跳转指令中包含的是目标的绝对地址,所以短/近跳转会出现跳至同一目标的指令机器码不同。而远跳转中包含的是绝对地址,因此转移到同一地址的指令机器码相同,如果要了解更多,楼主可以参考Intel的官方文档的第一卷。有关opcode的信息

热点排行