8086汇编小问题

__lhy 2012-02-02 11:57:53
计算机把cs:ip指向的地址当作代码执行 执行一句指令 然后根据指令长度累加ip指令 使之指向下一条指令 请问他是怎么获取指令长度的?
...全文
67 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
masmaster 2012-02-02
  • 打赏
  • 举报
回复
在第一步取指的时候,就可以获取指令长度啦。
zara 2012-02-02
  • 打赏
  • 举报
回复
指令,要被分析、解释和执行的,这个分析过程就能知道这个指令的长度了。
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zara 的回复:]

#5楼 的例子不妥。E9 cw 还是 E9 cd ,这个可不是由后面的控制什么来的,E9 后面没有其它内容了,就只是跳转偏移。究竟是 16 位还是 32 位,是看执行环境的,即当前程序段类型的,简单地说,dos16 类的程序里就是 16 位,Win32 类的程序里就是 32 位的。
[/Quote]

我的意思是 E9 11 11 (这里后面有没有 push 之类的指令 - -# 可能表达错了)
受教。。。
zara 2012-02-02
  • 打赏
  • 举报
回复
#5楼 的例子不妥。E9 cw 还是 E9 cd ,这个可不是由后面的控制什么来的,E9 后面没有其它内容了,就只是跳转偏移。究竟是 16 位还是 32 位,是看执行环境的,即当前程序段类型的,简单地说,dos16 类的程序里就是 16 位,Win32 类的程序里就是 32 位的。
  • 打赏
  • 举报
回复

JMP EB cb rel8 Jump short, relative, displacement relative to next instruction
JMP E9 cw rel16 Jump near, relative, displacement relative to next instruction
JMP E9 cd rel32 Jump near, relative, displacement relative to next instruction
JMP FF /4 r/m16 Jump near, absolute indirect, address given in r/m16
JMP FF /4 r/m32 Jump near, absolute indirect, address given in r/m32
JMP EA cd ptr16:16 Jump far, absolute, address given in operand
JMP EA cp ptr16:32 Jump far, absolute, address given in operand
JMP FF /5 m16:16 Jump far, absolute indirect, address given in m16:16
JMP FF /5 m16:32 Jump far, absolute indirect, address given in m16:32


举例吧,好像程序遇到 E9 就是 JMP
但是是 E9 cw 还是 E9 cd 呢?
就看后面是 word 还是 dword (怎么看? 看后面有没有控制指令呗。。。)

分析出来之后是不是就知道指令的长度了。。。
masmaster 2012-02-02
  • 打赏
  • 举报
回复
由于X86指令的长度不是固定的,通常是1~15个字节。获取指令长度应该是在译码阶段吧,指令从内存读入到cache中,开始预解码,得出预译码标识。预译码标识就包括了指令的起始地址和结束为止,从而获取指令长度。然后再做解码位uop等等操作。 我想这跟处理器有太多关系。
__lhy 2012-02-02
  • 打赏
  • 举报
回复
先谢谢两位的回答
我的意思是:在地址中存储的都是数据,当cs:ip指向时才当作代码执行,他是怎么判断取一多长的数据为一句代码?

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧