在很长一段时间里面因为有编译器的帮助,完全没有手工进行汇编语言和机器语言转化的需求。不过前面碰到了RDRAND 这样的指令,一方面说明CPU指令还在增长,另一方面也发觉还有这样的要求,于是进行一些探究。
从资料上看,目前还活着的汇编工具有 NASM。先查阅一下支持的指令【参考1】,确定支持了 RDRAND。
编写一个简单的 asm 程序,里面有六条指令:
rdrand eax
rdrand ebx
rdrand edi
rdrand ax
rdrand bx
rdrand di使用nasm进行编译,未指定格式默认编译目标为 Binary, -l test.lst 表示生成一个 list 文件
打开生成的 test.lst,可以看到下面每条语句对应的机器码(0x66 是32位操作的前缀)
1 00000000 660FC7F0 rdrand eax
2 00000004 660FC7F3 rdrand ebx
3 00000008 660FC7F7 rdrand edi
4 0000000C 0FC7F0 rdrand ax
5 0000000F 0FC7F3 rdrand bx
6 00000012 0FC7F7 rdrand di
同样的,NASM 还有一个反编译工具 ndisasm.exe:
从上面可以看出 NASM 可以用来生成指令对应的机器码。在没有涉及到内存地址的情况下是很好的工具。另外一个方面,使用他自带的反编译工具也可以方便的完成机器码到汇编指令的转换。
下载:http://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D
参考:
1. http://www.nasm.us/xdoc/2.13.01/html/nasmdocb.html
20190905 补充: 这里还有一个在线的汇编语言转机器的工具,可以方便的进行查询: