您的位置:首页 > 其它

每日一课(5/75) 跳转指令及循环指令

2008-02-16 11:07 253 查看
1. TEST reg/mem, reg/mem/imm - 检测位指令

受影响标志位:CF(0),OF(0),PF,SF和ZF

功能:检测位指令会将源操作数和目标操作数进行逻辑与操作,根据运算结果设置标志位,但是并不保存运算结果到源操作数,只是设置标志位。该指令执行后通常是一条JE,JNE,JZ或JNZ等条件转移指令。

2. 循环指令

循环指令的执行本身并不影响任何标志位,以CX或ECX做为计数器。

LOOP/LOOPW/LOOPD 标号

LOOP: 在实地址模式下使用CX寄存器而不是ECX寄存器。

LOOPW:在任何模式下都会使用CX寄存器作为计数器。

LOOPD:在任何模式下都会使用ECX寄存器作为计数器。

3. 转移指令

转移指令是汇编语言程序员经常使用的一组指令。在高级语言中,时常有“尽量不要使用转移语句”的劝告,但如果在汇编语言的程序中也尽量不用转移语句,那么该程序要么无法编写,要么没有多少功能,所以,在汇编语言中,不但要使用转移指令,而且还要灵活运用,因为指令系统中有大量的转移指令。

转移指令分无条件转移指令和有条件转移指令两大类。

无条件转移指令:包括JMP指令,子程序的调用和返回,中断的调用和返回。

JMP 标号/reg/mem

JMP指令是从程序当前执行的地方无条件转移到另外一个地方执行,这种执行可以是一个短(short)转移(偏移量在-128到127范围内),近(near)转移(偏移量在正负32K范围内),或者远(FAR)转移(在不同的代码段内跳转。)

短转移和近转移只是代码段内的转移,仅仅需要把偏移量入栈,远转移需要把要跳转的代码段的地址和偏移量入栈。

转移指令本身不影响标志位。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: