每日一课(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)转移(在不同的代码段内跳转。)
短转移和近转移只是代码段内的转移,仅仅需要把偏移量入栈,远转移需要把要跳转的代码段的地址和偏移量入栈。
转移指令本身不影响标志位。
受影响标志位: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)转移(在不同的代码段内跳转。)
短转移和近转移只是代码段内的转移,仅仅需要把偏移量入栈,远转移需要把要跳转的代码段的地址和偏移量入栈。
转移指令本身不影响标志位。
相关文章推荐
- 每日一课(3/75) 算术运算指令
- 每日一课(14/75)调整偏移量的伪指令
- 每日一课(2/75) 常用指令(传送 交换 取地址 取段 栈操作)
- 每日一课(20/75)汇编语言指令系统简介
- 每日一课(4/75)逻辑运算指令
- 每日一课(7/75) 汇编预备知识
- 汇编语言实验4-利用跳转指令构造循环
- 跳转指令和循环指令详解
- 每日一课(15/75)复合内存变量的定义 重复定义 和 结构定义
- 每日一课(1/75) 通用寄存器及标志寄存器
- 每日一课(16/75)联合类型和记录类型 还有数据类型的自定义typedef
- 每日一课(12/75)操作数的寻址方式
- 每日一课(19/75)符号定义语句
- 每日一课(6/75) 子程序的定义 调用及返回
- Win32汇编笔记-内存管理,和跳转,分支,循环指令
- 每日一课(8/75)CPU资源和存储器 之 寄存器组的介绍
- 每日一课(17/75)标号和属性
- 每日一课(18/75)表达式
- 每日一课(9/75) CPU资源和存储器 之 通用寄存器的主要作用
- 每日一课(10/75)CPU资源和存储器 之 专用寄存器的作用