程序控制类指令PPT课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
类指令
转移指令 循环控制 子程序调用 中断控制
3.9 转移指令
通过修改指令的偏移地址或段地址及偏移地 址实现程序的转移
无条件转移指令 无条件转移到目标地址,执行新的指令
有条件转移指令 在具备一定条件的情况下转移到目标地址
无条件转移指令
格式:
JMP OPRD
目标地址
与JMP在 同一代码段
与JMP不在 同一代码段
2)用于无符号数的条件转移指令 ① JA/JNBE ;高于/不低于等于转移,
CF∨ZF=0 ② JNA/JBE ;不高于/低于等于转移,
CF∨ZF=1 ③ JB/JNAE ;低于/不高于等于转移,CF=
1 ④ JNB/JAE ;不低于/高于等于转移,CF=
3)用于带符号数的条件转移指令 ① JG/JNLE 大于/不小于等于转移,(SF ∨OF)∨ ZF=

条件转移指令
在满足一定条件下,程序转移到目标地 址继续执行
条件转移指令均为段内短转移,即转移 范围为: -128~+127
条件转移指令的应用
1)简单条件(直接标志)转移指令(共10条) 根据CF、ZF、SF、OF、PF分别为1或0,共有10种状态,
设置了10种转移指令: JE/JZ JS JO JC JP ;标志为1转移 JNE/JNZ JNS JNO JNC JNP ;标志为0转
格式: CALL FAR PROC
段间调用例
CALL FAR TIMRE CALL DWORD PTR[SI]
段间调用例
格式:
CALL FAR PROC
格式例:
CALL FAR TIMRE
SI
CALL DWORD PTR[SI]
CS
IP
CALL




XXH
XXH

XXH

XXH

返回指令
REPNE SACSB
JZ NEXT
JMP NFOUND NEXT: … NFOUND:…
3.11 子程序调用返回指令
段内调用 段间调用
段内直接调用 段内间接调用 段间直接调用 段间间接调用
调用指令与转移指令的比较
用于调用一个子过程 调用前须保护断点地址 子过程执行结束后要返回原调用处继续
转移指令例(流程图)
将存放各元素个 数的单元清零
取首地址 设串长度
取一个字节数
为负?
N
Y
为零?
Y
N 正数个数加1
负数个数加1
零元素加1
3.10 循环控制指令
控制程序在以当前IP为中心的-128~+127 范围内循环执行
循环次数由CX寄存器指定
LOOP LOOPZ LOOPNZ
无条件循环指令
执行原程序
断点恢复
段内Biblioteka Baidu用
子过程与原调用程序在同一代码 段,在调用之前只需保护断点的
入口 地址
偏移地址
格式: CALL NEAR PROC
断点
近过程名
段内调用例
CALL TIMRE
直接调用
CALL WORD PTR[SI]
间接调用
段间调用
子过程与原调用程序不在同一代码段, 在调用之前需保护断点的段基地址和偏 移地址。先将断点的CS压栈,再压入IP
STRING DB ‘Personal Computer’ …
MOV BX,OFFSET STRING DEC BX MOV CX,17 NEXT: INC BX CMP [BX],BYTE PTR 20H LOOPNE NEXT

方法二: MOV DI,OFFSET STRING MOV AL,20H MOV CX,17
0 ② JGE/JNL 大于等于/不小于转移,(SF ∨OF)=0 ③ JL/JNGE 小于/不大于等于转移,(SF ∨OF)=1 ④ JLE/JNG 小于等于/不大于转移,(SF ∨OF)∨ ZF=
1
转移指令例
统计内存数据段中以TABLE为首地 址的100个8位符号数中正数、负数 和零元数的个数。
无条件段内转移 段内间接寻址
JMP BX JMP WORD PTR[BX]
IP
BX=1200

JMP


码 段
指令码

XXH XXH
数 据 段

无条件转移指令——段间转移
转移的目标地址不在当前代码段内
指令中直接给 出目标地址
段间直接寻址
由指令中的32位存 储器操作数指出目 标地址
段间间接寻址
无条件段间转移
原则上可实现在整个内存空间的转移
无条件转移指令 段内转移
转移的目标地址在当前代码段内
指令中直接给 出目标地址
由指令中的寄存器 或存储器操作数指 出目标地址
段内直接寻址
段内间接寻址
无条件段内转移
段内直接寻址 JMP Label
近地址标号
位移量

JMP




Label
下一条要执行指令的

偏移地址=当前IP+位移量
从堆栈中弹出断点地址,返回原程序 格式:
RET RET指令一般位于子程序的最后
3.12中断指令
中断与过程调用:
中断是随机事件或异常事件引起,调用则是事 先已在程序中安排好
响应中断请求不仅要保护断点地址,还要保护 PSW内容
调用指令在指令中直接给出子程序入口地址, 中断指令只给出中断向量码,入口地址则在向 量码指向的内存单元中
段内直接寻址
IP
JMP FAR Label
远地址标号

JMP

XXH

XXH

XXH
1
XXH
Label与
CS


JMP之间
Label

的位移量


2
无条件段间转移
段内间接寻址 JMP DWORD PTR[BX]
[BX] IP
CS



JMP
段 1


指令码



2
XXH
XXH

XXH

XXH

格式: LOOP LABEL
循环条件: CX ≠ 0
操作: DEC CX JNZ 符号地址
条件循环指令
格式:
LOOPZ LABEL LOOPE LABEL 循环条件: CX ≠ 0 ZF=1
格式:
LOOPNZ LABEL LOOPNE LABEL 循环条件: CX ≠ 0 ZF=0
例:在一个由17个字符组成的字符串STRING中,现 在查找该字符串中是否包含空格字符(其ASCII码为 20H),若未找到或尚未查完,则继续查找,直到找 到第一个空格字符或查完了才退出循环。
1. 中断指令
格式: INT n
说明: nх4
中断类型码 n=0 〜 255
n х4
入口的偏移地址 入口的段地址
存放中断服务子程序入口 地址的单元的偏移地址
该单元在数据段,段地址=DS
XXH
XXH

XXH

XXH




码 段
中断指令的执行过程
将PSW压入堆栈; 将INT指令的下一条指令的CS、IP压栈; 由n× 4得到存放中断向量的地址; 将中断向量(中断服务程序入口地址)
相关文档
最新文档