摘要: intel指令系统为了缩减指令长度,采取的策略是这样的:只有在必要的时候,使用某些字节域,但是有一个域必须存在主操作码。指令前缀有4种,而且一条指令可以前有多种前缀,每一个前缀占一个字节,在32位指令里,前缀种类的排列顺序不作规定1] 操作数长度前缀(66H) 对于32位指令系统而言,默认寄存器都是32位的,但是我们不可避免的会使用其他长度地寄存器。如果要使用16位长度的寄存器,只需在指令前加66H,即用操作数长度前缀标记。然而对于8位长度的寄存器,不是通过操作数前缀标记的。后文将说明它和32位操作数长度如何区分的举例:mov eax,1 = B8 01000000mov ax,... 阅读全文
posted @ 2013-11-12 21:27 SolarJupiter 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 一个比较特别的指令是lea, 意思是"装入有效地址"(Load Effective Address), 它的操作数就是地址,所以lea eax,[edx-02] 就是把 edx 中的值减去2再送入eax, 而不是把由[edx-02]指明的内存地址上的值放到eax. 其结果是[eax]和[ebx-02]都表示同一个地址.//大端、小端: 大小端是指CPU存储数据的方式,比如一个0x01020304这个整数,在WIN、Linux下在内存中的布局如下 [01][02][03][04] 注意左边是高地址,而右边是低地址 在UNIX下则是 [04][03][02][01] 注意... 阅读全文
posted @ 2013-11-12 16:49 SolarJupiter 阅读(258) 评论(0) 推荐(0) 编辑