关于汇编原理的几个小问题~~ 你说的“断开”,大概指的是ES后面与SS之间还有一段空白吧?你图中最后那句“段与段可以不连续”,就是你说的“断开”。在程序运行中,CS,DS,ES,SS这4个段寄存器的值,相互之间没有联系,每一个都是可以独立取值的,因而可以出现“重叠”(甚至完全重合)和“断开”。它们并不需要一个接一个地连续排列。段寄存器中存放的,是“段地址”。16位的“段地址”,是20位的“段首地址”的高16位,20位中剩下的低4位是0000。也就是说,段的开始地址是十进制数16(十六进制数10H)的整数倍。“段地址”,规定了一个段的开始位置。一个段的大小,只是“最大”可以达到64KB(偏移地址从0000H~FFFFH),不是“始终”是独占64KB的固定大小。实际程序中,代码或数据一般不会不多不少正正好是64KB,很可能会小于64KB。为了充分使用内存,将程序装入内存后,并不是会给程序里的每一个逻辑段都分配一个完整的64KB段让它独占。而是需要多少就分配多少。剩下的要给别的段使用。在访问程序里的逻辑段中的数据时,偏移地址的取值范围是按逻辑段的实际大小处理的。举个例子:假设,程序中的一个数据段里只定义了256个字节(100H个字节)的变量空间。假设将这个逻辑段装入内存时的段地址是。
编译原理和汇编的原理? 编译是编译器把源文件编译成目标程序.汇编是一中低级语言,是可以用来直接与硬件操作的程序语言.祝你早日解决该问题。
反汇编的原理 这个问题.问的我都不知道如何回答了.如果只是想知道如何反汇编,使用几个工具就可以了.用一下你就能感受到了.w32dasm,Ollydbg调试器,IDApro.反汇编原理这个东西,怎么回答你好呢,说起来太多了.首先你需要了解一下opcode.比如说,这个汇编代码(应该说是助记符才对)mov eax,ebx,对应的opcode是8BC3.而现在所见到的一般反汇编引擎XDE32,LDE32,ADE32.就是把这个8BC3,解析为 mov eax,ebx.但这只是最简单的.要解析exe文件(PE文件更恰当些.)还有很多工作要做.如果你只是想了解下的话,可以把这些反汇编引擎下载下来,自己UltralEdit手工构造一个文件(*.dat或者*bin之类的)里面填一些opcode,fopen()函数打开之.然后使用下这几个反汇编引擎你就能看到效果了.另外可以的几个反汇编引擎也推荐下,都是开源的.libdasm,BeaEngine.OD作者公布的一个反汇编源代码.(自己把这些东西下载下来,然后读一读里面的文档.)如果对这方面感兴趣,可以参考看雪论坛,bbs.pediy.com