英特尔8086,一些小东西

时间:2013-07-26 01:57:43

标签: assembly encoding x86-16

MOV AL,4的8086指令的编码是c604吗?

另外,我如何编码MOV AX, DS:5678hSUB BX,[Di+6]

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

MOV AL,4已编码为B004

MOV AX, DS:5678hinvalid combination of opcode and operands。这不会编译。

SUB BX, [DI+6]已编码为2B5D06


对于那些感兴趣的人,这是如何解码编译的16位汇编程序。

......这可能是一个很好的维基。

首先:这是在Mac OS X上完成的,但任何Linux发行版都可以使用所描述的工具。

在x86(8086)汇编语言以及许多其他汇编语言中,汇编程序将(人机可读的)助记符编译为字节码。每个助记符都转换为特定的字节码。例如:

XOR AX, AX编码为31C0

要解码机器语言,您需要自己喜欢的文本编辑器,NASM(Netwide Assembler)和十六进制编辑器。

步骤1:首先使用[BITS 16]指令在文本编辑器中输入要解码的助记符。保存。

step1

步骤2:使用命令nasm <your file> -f bin -o <output file>

进行编译

step2

步骤3:使用十六进制编辑器打开输出文件。

step3

步骤4:显示的字节将是解码的助记符。


以下是如何将字节码反编译为NASM语法助记符。这与上述步骤相反。

NASM附带工具ndisasm - 或Netwide反汇编程序。该程序将字节码反汇编回原始指令。

您将需要NASM工具集,如果需要,还需要一个十六进制编辑器。

第1步:获取字节码文件。这应该是编译汇编语言。 C / C ++代码或任何其他机器语言文件可能在实际机器代码之前包含标题。

如果需要,可以使用十六进制编辑器检查/编辑字节码文件。

step4

步骤2:运行此命令:ndisasm -b 16 <bytecode file>。终端右侧显示的行是字节代码中的助记符。

step1-2

如果字节码无效,有时ndisasm会说某些字节是db助记符 - 这意味着define byte。换句话说,这是一个填充字节,ndisasm找不到有效的助记符。

step2-2

另外,请记住,在使用ndisasm和任何其他反编译器或反汇编程序时,反编译器/反汇编程序不会检索注释或空格。