学习笔记——从零开始速通汇编(五):程序控制类&串操作类指令系统
导航
✨学习笔记——从零开始速通汇编(一):寄存器 | JinYu🐟
🎉学习笔记——从零开始速通汇编(二):汇编程序语句结构&寻址方式 | JinYu🐟
🎊学习笔记——从零开始速通汇编(三):数据传送类&算术运算类指令系统 | JinYu🐟
🎃学习笔记——从零开始速通汇编(四):逻辑运算与移位操作类指令系统 | JinYu🐟
🎄学习笔记——从零开始速通汇编(五):程序控制类&串操作类指令系统 | JinYu🐟
学习笔记——从零开始速通汇编(五):程序控制类&串操作类指令系统
程序控制类指令:
程序控制类指令用于实现复杂的程序执行路径控制,包括分支、循环、子程序调用与返回、中断服务程序调用与返回等
程序转移执行时,需要用程序控制类指令来修改IP(段内转移)或CS:IP(段间转移),以达到改变程序执行路径的目的
无条件转移指令
指令格式:JMP OPR
指令功能:按OPR描述的转移地址,无条件转移到目标指令执行
条件转移指令
条件转移指令在满足特定的条件时,转移到指定的目标指令处继续往下执行程序,而在条件不满足时,则顺序执行程序(不转移)
条件转移指令所检测的条件有单个条件标志CF、ZF、SF、OF、PF,也有由多个条件标志形成的组合条件,如CF和ZF的组合,SF、OF及ZF的组合等
条件转移指令通常在运算类指令之后使用
条件转移指令均为段内短距离转移指令。转移成功时,将IP修改为目标指令的偏移地址,而转移失败时,不改变IP
简单条件转移指令
这类条件转移指令只对单个条件标志进行检测,并根据检测结果决定是转移执行还是顺序执行
无符号数比较转移指令
这类条件转移指令根据对两个无符号数的比较结果,决定转移执行或顺序执行
对无符号的比较用CMP指令
有符号数的比较转移指令
这类条件转移指令根据对两个有符号数的比较结果,决定转移执行或顺序执行
对有符号的比较用CMP指令
循环指令
将一段程序连续、重复执行多次,就形成了循环
从程序控制的角度来说,循环是由转移指令向后转形成的
有确定重复次数的循环称为计数型循环,可用一个循环计数器来控制循环的次数
没有确定的重复次数,只在某个特定的条件成立时执行循环,而当条件不成立时结束循环,这称为条件型循环。条件型循环用条件转移指令控制即可
下面的循环指令用于控制计数型循环
指令格式:LOOP label;;label为循环入口指令标号
指令功能:LOOP指令用于控制计数型循环,作为循环程序段的最后一条指令。循环计数器指定用CX寄存器,采用减1计数方式,初值为循环次数;CX未减到0时,转移到标号label处,继续循环;CX减到0时,循环结束
LOOP指令的功能等效于以下两条指令的组合
1 | DEC CX |
注意:LOOP指令的转移范围为段内短距离转移
处理器控制类指令
这类指令用于强行设置某些标志,或改变处理器的某些工作方式
串操作类指令:
基本串操作指令
串传送(MOVS)类指令
MOVS类指令将源串指针所指的串元素值,传送到目的串指针所指的串元素位置
串比较(CMPS)类指令
CMPS类指令主要用于比较两个等长的串是否完全相同。其方法时比较两个串对应位置上的串元素是否都相同
串搜索(SCAS)类指令
SCAS类指令主要用于在一个串(目的串)中搜索(查找)一个特定的串元素。其方法是将需要查找的元素值与串中各个串元素依次进行比较
串存数(STOS)类指令
STOS类指令用于将一个元素值存入目的串指针所指的串元素中
串操作的重复前缀
重复前缀置于基本串操作指令之前,用于控制基本串操作指令的连续、重复执行。重复前缀指定使用CX寄存器作为重复次数计数器,且采用减1计数方式