【发布时间】:2014-05-18 04:02:11
【问题描述】:
我创建了一个非常简单的汇编程序,可以在 DOS 中打印字母“a”。 我在十六进制编辑器中打开它,结果是这样的:
汇编代码:
mov ah, 2
mov dx, 'a'
int 21h
十六进制代码
B4 02 B2 61 CD 21
我想了解它是如何生成的!就像,我不知道我是否正确,但我意识到:
B4 = mov ah
02 = 2
B2 = mov dx
61 = 'a'
CD = int
21h = 21
02、61 和 21 我明白发生了什么,但是 B4、B2 和 CD?
【问题讨论】:
-
官方文档:intel.com/content/www/us/en/processors/… 如果您只对“指令操作码”感兴趣,那么在之前链接的站点上,不同指令编码成的字节以该文档开头:“手册卷 2A:指令集参考,AM”下面的答案链接的站点 (ref.x86asm.net/coder32.html) 是对英特尔 PDF 的非常好的总结/概述,但请阅读英特尔文档以了解指令的确切行为。
-
顺便说一句,如果您正在考虑使用汇编,也许还有反汇编/逆向工程,那么请尝试有史以来最好的反汇编/调试器,它有一个免费版本(5.0),它知道的要少得多较新的版本,但即使是这个旧的免费版本也可以击败任何其他解决方案:hex-rays.com/products/ida/support/download_freeware.shtml 它可以方便地分析内容。