Java教程

汇编进阶笔记

本文主要是介绍汇编进阶笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、压栈与弹栈是非常重要的机器操作:

栈的特点:向下增长,栈顶地址最小;

压栈就是 1)拉开抽屉(esp 减小要压入数据的字节数)2)放入数据(高

位数据放入高地址,低位数据放入低地址)。

弹栈就是:1)拿出数据(字节数取决于 pop 后缀或者目的寄存器,同时

高地址数据放入目的寄存器高位);2)关上抽屉(esp 增加对应字节数)

2、基本与特殊的运算操作指令需要记住名称和具体操作,尤其是操作的顺序(例如减法是后面减前面,结果放入后面);

3、最重要的四个条件码

1)CF: 将运算看做“无符号数运算”,如果有进/借位,则置 1;

2)OF:将运算看做“有符号数运算”,如果产生溢出,则置 1;

3)SF: 如果运算结果最高位是 1,则置 1;

4)ZF: 如果运算结果是 0,则置 1.

4、无条件跳转 jmp 直接跳转到指定的地址,即:将其操作数作为地址写入%eip,实现 CPU 指令执行的改变。

四种方式:

 jmp LABEL 直接使用 LABEL 所在的地址

 jmp *LABEL 使用 LABEL 地址中存的地址(间接)

 jmp 0x8048056 直接使用立即数作为跳转的地址

 jmp *%eax 将%eax 中的内容作为跳转的地址

5、条件跳转:依据条件码的不同组合,可以判定大小关系,依据大小关系来决定的跳转就是条件跳转。指令符形式为 J 后面接表示判定结果的后缀 J 后面接表示判定结果的后缀,例

如:JGE,就是:jump if greater or equal—当大于或等于时跳转。

6、条件传送(cmov),功能与格式和 mov 完全相同,不同在于它和条件跳转

一样有后缀,满足后缀表示的比较关系才进行数据传送,例如:

comvge %ax,%bx 当大于或等于时才将%ax 的内容传给%bx

7、标志位设定指令( 标志位设定指令(set)是将后面跟着的操作数(一个字节)设为 1,前提是判定结果满足其后缀

例如:setge %al 表示当大于或等于时将%al 置 1。这样,比较的结果就以一个字节 1 的形式保留下来。

8、循环在机器中就是通过条件跳转来实现的。

循环体执行后,进行判定(循环变量,或者其它循环结束条件),不满足条件,直接跳转到循环体外的下一条指令地址处;满足条件,跳转回循环体开始阶段。

这篇关于汇编进阶笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!