汇编原理6:opcode

来源:互联网 发布:matlab字符分割算法 编辑:程序博客网 时间:2024/06/01 09:02
        自从分析完前面的init_memory子程序后,好长一段时间没有看fasm1.0的源代码。工作忙是一方面的原因,另一方面的原因是晚上回家来后不想看程序,只想看看小说,玩会儿游戏什么的。过了好长一段时间才又振奋起来,鼓励自己继续看fasm1.0的代码,不要半途而废。于是又静下心来,咬着牙看完了。
        我看代码的途径是通过分析fasm汇编器汇编一个简单程序的过程来理解fasm的思路。那个简单程序文件的名字是comdemo.asm,大小只有71个字节。后来我嫌71个字节也太多,索性改为17个字节大小,只有两行代码:mov ah,9和 int 20h。使用fasm comdemo.asm hello.com进行编译,得到的可执行文件大小只有4个字节:b4 09 cd 20 。后面又分析了get_params子程序,preprocessor子程序,parser子程序,assembler子程序,formatter子程序,终于得到了hello.com这个可执行文件。分析完了才发现,涉及到80x86的opcode了。这下有点傻眼了。
        于是又上网查80x86的opcode的知识,找到一些资料,也找到一些好网站,比如罗聪的 http://www.luocong.com/learningopcode.htm ,还有mik的mouseOS小站中的"x86/x64体系指令系统":http://www.mouseos.com/x64/default.html ,他们讲的都很好,可是对于我来说还是有些难度。因为网上的这些资源大多讲的是80386以上的指令体系结构的opcode,指令长度是1~15个字节。而我现在连8086的opcode都没弄清楚,直接看80386的看不太懂。都说学习是个循序渐进的过程,如果8086的opcode学明白了,再学80386的opcode应该就容易多了。利用google的高级搜索功能,专门搜索8086的opcode,还是搜到了一些资料,呵呵。当然,最有价值的还是8086的manual。
        我的计划是这样的:1.先学习一下简单的8086的opcode的知识,然后动手精简fasm,使得它只能支持8086的指令。2.看fasm1.51 for DOS的源代码,看看fasm1.51是如何实现在保护模式下也能进行汇编的。3.将精简后的fasm代码修改,使得它也能在保护模式下面运行。如果要更精确一点的说,第1步中首先要实现这样的功能:精简后的fasm只能编译两条指令:一条是 mov reg,immediate和int 指令。后面再慢慢扩展可编译的指令,直到最后可以支持8086所有的指令。
        饭要一口一口地吃,路要一步一步地走。别着急,慢慢来。嘿嘿。先给自己加把油!

原创粉丝点击