32位汇编语言学习笔记(3)--leal和算术运算指令



leal指令用于加载有效地址(loadeffective address)。

leal指令的目的操作数必须是寄存器。实际上leal指令有时用于与加载地址无关的场景。

示例:

leal 6(%eax), %edx //eax的值+6放入edx中。

leal (%eax, %ecx), %edx //eax+ecx的值装入edx中。

leal (%eax, %ecx, 4), %edx //eax + 4*ecx的值装入edx中。

leal 7(%eax, %eax, 8), %edx //9*eax +7的值装入edx中。

leal 0xA(,%eax,4), %edx //4*eax + 10的值装入edx中。

leal 9(%eax, %ecx, 2), %edx //eax + 2*ecx+ 9的值装入edx中。

 

如下是算术逻辑运算指令:

inc D,加1

dec D,减1

neg D,取负数。

not D,取反。

add S, DD= D +S,加。

sub S, DD= D –S,减。

imul S, DD= D * S 乘。

xor S, DD = D ^ S 异或。

or S, DD = D | S,或。

and S, DD = D & S,与。

 

示例:

假设eax值是0x100ecx1edx3

0x100的值是0xff0x104的值是0xab0x108的值是0x130x10c的值是0x11

 

addl %ecx (%eax) //更新的eax寄存器指向的内存地址中的值。eax保存地址是0x1000x100中保存的值是0xffecx中的值是1,那么更新后值应该是0x100

subl %edx, 4(%eax) //更新的是eax+4指向的内存地址的值,也就是0x104地址更新后的值是0xa8

imull $16, (%eax, %edx,4)//更新的是0x10c的地址中的值,更新后的值是0x110

incl 8(%eax) // 更新0x108的地址的值,更新后的值是0x14

decl %ecx // 更新ecx的值,更新后的值是0

subl%edx, %eax // 更新 eax 的值,更新后的值是 0xfd

你可能感兴趣的:(Linux)