您的位置:首页 > 其它

汇编指令【下】

2016-04-09 13:23 375 查看
pusha push ax cx dx bx sp bp si di与pushad 类似

popa = pop di si bp sp bx dx cx ax

操作的是十六位寄存器

eax 是三十二位寄存器 ax 是十六位寄存器

下面验证一下 eax ax到底有毛关系

eax = 754033b8

esp = 0018ff8c 内容 754033ca

push ax

esp就会 -2个字节 esp = 0018ff8a

看看这里保存的内容是什么吊东西

0018ff8a内容 0000ca33

现在执行push ax 看看这几个寄存器的变化

执行过后

esp = 0018ff8a 内容33ca33b8

push ax 将 33b8 保存到 0018ff8a

0018ff8a 内容 b8

0018ff8b 内容 33

eax 保存的值 754033b8 ax 的值就是33b8 保存到esp中的顺序从右向左开始保存的!!

MOV

该指令将第二个操作数赋值给第一个操作数

mov eax,ebx 就会将ebx的值赋值给eax

试试

eax = 754033b8

ebx = 7efde000

mov eax,ebx

执行完过后 eax = 7efde000

ebx = 7efde000

mov al,cl 将cx的低八位 赋值给ax的低八位

低八位是左边还是右边这个真不知道

做个测试

eax 7efde000 ax = e000

ecx 12345678 cx = 5678

执行完过后

eax = 7efde078 ax = e078 低八位在右边 al = 78

ax = e000 低八位al = 00

cx = 5678 cl = 78

寄存器做右向左 就是从低到高

AL-是EAX的最后两位数字以及CL-是ECX的最后两位数字

现在我们试试内存单元

mov ax,word ptr ds:[405008]

将这个内存单元的内容赋值给ax

405008里的内容 08 30 0f 30

eax = 7efde078

执行过后eax = 7efd3008

也就是将08 30 存储到了ax中去 是从右向左存储的数据

mov ax,dword ptr ds:[405008]

会发生什么东西呢,人要敢于尝试

没法odb 有检查功能不让这么干,估计这个程序会报错

mov al,byte ptr ds:[405008]

就是将第一个字节存储到al中去 al是eax最右边的两位记住哦

我们来试试其它扩展的mov指令

MOVSX (带符号扩展的传送指令)

第二个操作数可能一个寄存器也可能是内存单元,第一个操作数的位数比第二个操作数多,

第二个操作数的符号位填充第一个操作数剩余部分。

符号位什么吊东西,我不知道,先搞个例子,再猜!

movsx eax,bx

eax = 7efd3008

ebx = 7efde000 bx = e000

执行完了

eax = ffffe000

将bx的值赋给了ax

剩下的都用f去填充了

f就是符号位了

为啥bx的符号位是f呢?

你妹的没基础就跟白痴一样,符号位都不知道真是干,我去百度看看!

符号位就是正负!

e000 是个十六位的二进制数 2个字节

有符号的十六位数就是-32768-32767的范围

ffff表示-32768

e000 转换为二进制数1110000000000000 如果是有符号的数第一位是1

就是负数

是0就是正数

所以ax的其它位用1填充 就是ffff了

16位数的范围是0000到FFFF。0000到7FFF是正数,8000到FFFF是负数。

MOVZX (带0扩展的传送指令)

movzx eax bx

第二个操作数的位数小于第一个操作数的位数 剩余位用0去填充 不需要去判断正负了

省心

LEA (取地址指令)

类似于MOV指令, 但是第一个操作数是一个通用寄存器,并且第二个操作数是一个内存单元。

当计算的时候要依赖于之前的结果的话,那么这个指令就非常有用。

lea eax,[405088]

405088内容 7e348434

eax = ffffe000

执行完之后 我操 eax = 405088

人家只要获取后面内存单元的地址,不要内容,我白操心了。

XCHG (交换 寄存器/内存单元 和 寄存器)

交换两个操作数的值

想想编程还得写几条语句呢,一条指令搞定真是伤心

xchg eax,ecx

eax = 00405088

ecx = 12345678

执行完之后

eax = 12345678

ecx = 00405088
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: