回 帖 发 新 帖 刷新版面

主题:请教一个关于反汇编的问题~

请问反汇编到底是什么回事?其实是这样的一个问题:
我用keil(单片机开发软件)写汇编代码,而在调试时,有一个disassembly的按钮,点击查看这个窗口时,就会看到反汇编的结果。
我很纳闷,怎么我写的已经是汇编代码了,为什么还能反汇编呢?而且反汇编的结果和我写的源汇编代码不一样,长很多很多!···
到底这个disassembly和我们自己写的汇编有什么关系的?

谢谢!!

回复列表 (共1个回复)

沙发

汇编源代码编译后生成二进制机器码,一条汇编语句通常和一小段二进制机器码是对应的。如 "int 21h" 编译后对应 "CD 21"(十六进制)。

但是,二进制机器码中是不含有符号信息的。举例:
"jmp NEXT"这条语句编译后会将NEXT换成具体的地址内容。

反汇编就是根据二进制机器码再翻译回汇编语句,上面的jmp语句再翻译回来就变成
jmp xxxxh 的形式,而不是jmp NEXT了。

可以认为反汇编的代码就是你的原始汇编代码去掉所有的符号信息后的样子,当然它是不会变长的。 
除非原始汇编代码中使用了一些高级语法或伪指令等,它们不是标准汇编指令,编译后形成的代码会变长。这和一段C代码编译后会变成长很多的汇编代码是一个道理。

熟悉汇编debug的话,上面的内容很容易理解。

我来回复

您尚未登录,请登录后再回复。点此登录或注册