资源描述:
《汇编语言的准备知识》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、有通用性的原因.下面简单讲讲基本知识(针对INTELx86及其兼容机)============================x86汇编语言的指令,其操作对象是CPU上的寄存器,系统内存,或者立即数.有些指令表面上没有操作数,或者看上去缺少操作数,其实该指令有内定的操作对象,比如push指令,一定是对SS:ESP指定的内存操作,而cdq的操作对象一定是eax/edx.在汇编语言中,寄存器用名字来访问.CPU寄存器有好几类,分别有不同的用处:1.通用寄存器:EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP(这个虽然通用,但很少被用做除
2、了堆栈指针外的用途)这些32位可以被用作多种用途,但每一个都有"专长".EAX是"累加器"(accumulator),它是很多加法乘法指令的缺省寄存器.EBX是"基地址"(base)寄存器,在内存寻址时存放基地址.ECX是计数器(counter),是重复(REP)前缀指令和LOOP指令的内定计数器.EDX是...(忘了..哈哈)但它总是被用来放整数除法产生的余数.这4个寄存器的低16位可以被单独访问,分别用AX,BX,CX和DX.AX又可以单独访问低8位(AL)和高8位(AH),BX,CX,DX也类似.函数的返回值经常被放在EAX中.ESI/ED
3、I分别叫做"源/目标索引寄存器"(source/destinationindex),因为在很多字符串操作指令中,DS:ESI指向源串,而ES:EDI指向目标串.EBP是"基址指针"(BASEPOINTER),它最经常被用作高级语言函数调用的"框架指针"(framepointer).在破解的时候,经常可以看见一个标准的函数起始代码:pushebp;保存当前ebpmovebp,esp;EBP设为当前堆栈指针subesp,xxx;预留xxx字节给函数临时变量....这样一来,EBP构成了该函数的一个框架,在EBP上方分别是原来的EBP,返回地址和参数.
4、EBP下方则是临时变量.函数返回时作movesp,ebp/popebp/ret即可.ESP专门用作堆栈指针.2.段寄存器:CS(CodeSegment,代码段)指定当前执行的代码段.EIP(Instructionpointer,指令指针)则指向该段中一个具体的指令.CS:EIP指向哪个指令,CPU就执行它.一般只能用jmp,ret,jnz,call等指令来改变程序流程,而不能直接对它们赋值.DS(DATASEGMENT,数据段)指定一个数据段.注意:在当前的计算机系统中,代码和数据没有本质差别,都是一串二进制数,区别只在于你如何用它.例如,CS制
5、定的段总是被用作代码,一般不能通过CS指定的地址去修改该段.然而,你可以为同一个段申请一个数据段描述符"别名"而通过DS来访问/修改.自修改代码的程序常如此做.ES,FS,GS是辅助的段寄存器,指定附加的数据段.SS(STACKSEGMENT)指定当前堆栈段.ESP则指出该段中当前的堆栈顶.所有push/pop系列指令都只对SS:ESP指出的地址进行操作.3.标志寄存器(EFLAGS):该寄存器有32位,组合了各个系统标志.EFLAGS一般不作为整体访问,而只对单一的标志位感兴趣.常用的标志有:进位标志C(CARRY),在加法产生进位或减法有借位
6、时置1,否则为0.零标志Z(ZERO),若运算结果为0则置1,否则为0符号位S(SIGN),若运算结果的最高位置1,则该位也置1.溢出标志O(OVERFLOW),若(带符号)运算结果超出可表示范围,则置1.JXX系列指令就是根据这些标志来决定是否要跳转,从而实现条件分枝.要注意,很多JXX指令是等价的,对应相同的机器码.例如,JE和JZ是一样的,都是当Z=1是跳转.只有JMP是无条件跳转.JXX指令分为两组,分别用于无符号操作和带符号操作.JXX后面的"XX"有如下字母:无符号操作:带符号操作:A="ABOVE",表示"高于"G="GREATER
7、",表示"大于"B="BELOW",表示"低于"L="LESS",表示"小于"C="CARRY",表示"进位"或"借位"O="OVERFLOW",表示"溢出"S="SIGN",表示"负"通用符号:E="EQUAL"表示"等于",等价于Z(ZERO)N="NOT"表示"非",即标志没有置位.如JNZ"如果Z没有置位则跳转"Z="ZERO",与E同.如果仔细想一想,就会发现JA=JNBE,JAE=JNB,JBE=JNA,JG=JNLE,JGE=JNL,JL=JNGE,....4.端口端口是直接和外部设备通讯的地方。外设接入系统后,系统就会把外设的数据
8、接口映射到特定的端口地址空间,这样,从该端口读入数据就是从外设读入数据,而向外设写入数据就是向端口写入数据。当然这一切都必须遵循外设的工