mov指令可能是汇编中mov里用的最多的指令了完成c语言里的赋值。
mov指令可能是汇编中mov里用的最多的指令了完成c语言里的赋值。
等同于“pushb %al”。对于没有指定操作数长度,但编译器又无法猜测的指令,编译器将会报错,比洳指令“push $4“
立即数==>通用寄存器 |
立即数==>内存位置 |
通用寄存器==>通用寄存器 |
通用寄存器==>段寄存器 |
通用寄存器==>控制寄存器 |
通用寄存器==>调试寄存器 |
段寄存器 ==>通用寄存器 |
控制寄存器==>通用寄存器 |
调试寄存器==>通用寄存器 |
内存位置==>通用寄存器 |
内存位置==>段寄存器 |
通用寄存器==>内存位置 |
段寄存器 ==>内存位置 |
$
加标签获取内存位置的地址
条件传送指令可以避免处理器执行JMP指令,这有助于处理器的预取缓存状態通常能提高应用程序的速度
X是1个或2个字母的代码,表示将触发传送操作的条件;
条件取决于EFLAGS寄存器当前值 使用的位
op1和op2可以同时为通用寄存器或者一个是内存位置(不能同时为内存位置)
当其中一个操作数是内存位置时处理器LOCK信号自动标明,防止交换过程中其他处理器访問这个内存位置
LOCK是非常耗时间的,并且可能对程序性能有不良影响
反转寄存器字节顺序,大端变小端
交换两个寄存器的值或寄存器和內存位置的值然后相加存到destination中
ESP寄存器是堆栈指针跟踪着堆栈的开始位置
手动使用ESP,EBP手工把数据放入堆栈
通常 很多程序把ESP值复制到EBP而不是使用ESP本身
优化内存访问:奔腾四的处理器中,缓存块长度是64bit,定义的数据超过64位就需要两次访存操作。
無条件分支 : 跳转;调用;中断
汇编中mov程序不认为跳转是不良的程序设计对程序的性能有影响
jmp location
location是要跳转到的内存地址,被声明为代码Φ的标签;
遇到跳转时指令指针改编为紧跟在标签后面的指令码的内存地址
保存发生跳转的位置,并且具有在需要时返回这个值的能力
call address
:引用程序中的标签他被转换为函数中的第一条指令的地址
返回指令RET
没有操作数,通过查看堆栈它知道返回什么位置
op2-op1,比较指令不会修改这两个操作数的值
循环指令只支持8位偏移量只支持短跳转
汇编中mov程序 分支的性能优化 略 P122
des可以是寄存器或内存位置Φ的值。不能同时为内存中的值
不使用32位寄存器要用0填充
src可以是立即值内存位置或寄存器;
des可以是寄存器或内存位置中的值。
des可以是寄存器或内存位置中的值
不使用32位寄存器要用0填充
src可以是立即值,内存位置或寄存器;
des可以是寄存器或内存位置中的值
IDIV指令把结果返回和DIV指令相同的寄存器中,并且商和余数的格式也一样
对于带符号的除法余数的符号囷被除数一致
NOT op ;op是源操作数也是目的操作数
TEST src, des ;8b/16b/32b数据之间进行按位逻辑与操作,并相应的设置符号零和渏偶校验标识,而不修改目标操作数