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

关于跳转指令的理解。解决办法

2012-05-15 
关于跳转指令的理解。大家看对不对。所有的跳转指令都是通过位移来进行的,不管是段间还是段内跳转,它都是在

关于跳转指令的理解。
大家看对不对。
  所有的跳转指令都是通过位移来进行的,不管是段间还是段内跳转,它都是在当前的程序计数器上加上相应的位移然后转移到目的地址
继续执行。

  所以跳转指令格式是:
指令字节 n字节位移 

  指令字节:
如jmp是0xE9, ja是0x77,jg是0x7F具体参考反汇编器

  位移字节:
  跳转的目的地址 - 跳转指令所在地址 - 跳转指令长度 = n字节位移(n=跳转指令长度-1)

  因为cpu执行跳转指令时已经从内存获取了指令并增加了程序计数器,所以要减去跳转指令的指令长度,才能算出正确位移。
  32位CPU中jmp指令长度为5 一字节指令 四字节位移
  条件跳转指令长度一般为2 一字节指令 一字节位移

  示例:
  77D172C4 E9 2A4A4188 JMP 0012BCF3(Intel小尾序)
  0012BCF3 - 77D172C4 - 5 = 0x 88 41 4A 2A = 0x 2A 4A 41 88(转换成Intel小尾序)

77D172FD 74 00 JE 77D172FF
77D172FF - 77D172FD - 2 = 0x00


77D17308 7F F5 JG 77D172FF
77D172FF - 77D17308 - 2 = 0xF5

[解决办法]
那是你不会找
http://developer.amd.com/documentation/guides/pages/default.aspx
http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

热点排行