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

本文详细介绍了几种常用的汇编指令,包括检测位指令如何影响标志位、循环指令的特点及使用、以及转移指令的分类与应用。其中特别强调了转移指令在汇编语言程序中的重要性和灵活性。

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)转移(在不同的代码段内跳转。)

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

转移指令本身不影响标志位。

转载于:https://www.cnblogs.com/coderlee/archive/2008/02/16/1070487.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值