汇编-- 控制转移类指令 条件转移指令

控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变

控制转移类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的最常用指令

   重点掌握:JMP/Jcc/LOOP CALL/RET

  INT n/IRET 常用系统功能调用

  一般了解: LOOPZ/LOOPNZ INTO

JMP label ;程序转向label标号指定的地址

 

段内直接寻址 JMP NEAR PTR NEXT

段内间接寻址 JMP TABLE [ BX ]

段间直接寻址 JMP FAR PTR NEXT

段间间接寻址 JMP DWORD PTR [ BX ]

 

段内转移——近转移(near)

  在当前代码段64KB范围内转移( ±32KB范围)

  不需要更改CS段地址,只要改变IP偏移地址

段内转移——短转移(short)

  转移范围可以用一个字节表达,在段内-128~+127范围的转移

段间转移——远转移(far)

  从当前代码段跳转到另一个代码段,可以在1MB范围

  需要更改CS段地址和IP偏移地址

  目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址

 

JMP NEAR PTR NEXT 近转移 -32768 ~ +32767

JMP SHORT NEXT 短转移 -128 ~ +127

条件转移指令

Jcc label      ;条件满足,发生转移:IP←IP+8位位移量 ;条件不满足,顺序执行

16条指令分成3种情况:

1. 判断单个标志位状态

2. 比较无符号数高低

3. 比较有符号数大小

 汇编-- 控制转移类指令 条件转移指令_第1张图片

这组指令单独判断5个状态标志之一

⑴JZ/JE和JNZ/JNE:          利用零标志ZF,判断结果是否为零(或相等)

⑵JS和JNS:             利用符号标志SF,判断结果是正是负

⑶JO和JNO:             利用溢出标志OF,判断结果是否产生溢出

⑷JP/JPE和JNP/JPO:         利用奇偶标志PF,判断结果中“1”的个数是偶是奇

⑸JC/JB/JNAE和JNC/JNB/JAE:      利用进位标志CF,判断结果是否进位或借位

2.比较无符号数高低

无符号数的大小用高(Above)低(Below)表示   利用CF确定高低、利用ZF标志确定相等(Equal)   两数的大小分成4种关系:

⑴ 低于(不高于等于):JB(JNAE,JC)     <      jump if blow   

⑵ 不低于(高于等于):JNB(JAE,JNC) >=    jump if not blow 

⑶ 低于等于(不高于):JBE(JNA)     <=    jump if blow or equal,or above

⑷ 不低于等于(高于):JNBE(JA)     >      jump if above

3.比较有符号数大小

有符号数的大(Greater)小(Less)需要组合OF、SF标志,并利用ZF标志确定相等(Equal)   两数的大小分成4种关系:

⑴ 小于(不大于等于):JL(JNGE) < jump if less

⑵ 不小于(大于等于):JNL(JGE) >=

⑶ 小于等于(不大于):JLE(JNG)   <=

⑷ 不小于等于(大于):JNLE(JG )  >

 

(5)-3 循环指令(loop)

JCXZ label ;CX=0,转移到标号label

LOOP label ;CX←CX-1, ;CX≠0,循环到标号label

LOOPZ label ;CX←CX-1, ;CX≠0且ZF=1,循环到标号label

LOOPNZ label ;CX←CX-1, ;CX≠0且ZF=0,循环到标号label

循环指令默认利用CX计数器,方便实现计数循环的程序结构

label操作数采用相对寻址方式

 

(5)-5 中断指令

中断(Interrupt )是又一种改变程序执行顺序的方法

中断的指令有3条:   INT i8 IRET INTO

主要分成外部中断和内部中断

外部中断——来自CPU之外的原因引起的中断,又可以分成

  • 可屏蔽中断:可由CPU的中断允许标志IF控制
  • 非屏蔽中断:不受CPU的中断允许标志IF控制

内部中断——CPU内部执行程序引起的中断,又可以分成:

  • 除法错中断:执行除法指令,结果溢出产生的 0 号中断
  • 指令中断:执行中断调用指令INT i8产生的 i8 号中断
  • 断点中断:用于断点调试(INT 3)的 3 号中断
  • 溢出中断:执行溢出中断指令,OF=1产生的 4 号中断
  • 单步中断:TF=1在每条指令执行后产生的 1 号中断

INT i8 ;中断调用指令:产生i8号中断

IRET;中断返回指令:实现中断返回

INTO;溢出中断指令:;若溢出标志OF=1,产生4号中断 ;否则顺序执行

 系统功能调用

21H号中断是DOS提供给用户的用于调用系统功能的中断,它有近百个功能供用户选择使用,主要包括设备管理、目录管理和文件管理三个方面的功能

ROM-BIOS也以中断服务程序的形式,向程序员提供系统的基本输入输出程序

汇编语言程序设计需要采用系统的各种功能程序

充分利用操作系统提供的资源是程序设计的一个重要方面,需要掌握

DOS功能调用INT 21H 功能号:

  AH=02H

  入口参数:DL=字符的ASCII码

  功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置。如按Ctrl-Break或Ctrl-C则退出

显示器功能调用INT 10H

  功能号:AH=0EH

  入口参数:AL=字符的ASCII码

BL=字符的颜色值(图形方式) BH=页号(字符方式) 通常使BX=0 功能:将字符按原属性在光标处显示,光标自动移到下一个字符位置

 

字符输入的功能调用      键盘功能调用INT 16H

3.6 处理机控制与杂项操作指令:

 标志处理指令 CLC、 STC、 CMC、 CLD、STD、 CLI、STI

注意: * 只影响本指令指定的标志  其他处理机控制与杂项操作指令 NOP、HLT、WAIT、ESC、LOCK

 

你可能感兴趣的:(汇编-- 控制转移类指令 条件转移指令)