DDD

8088 汇编跳转
日期:2003年6月12日  出处:嬴政天下整理收藏  作者:看雪  人气: 8735

8088 汇编跳转

一、状态寄存器

PSW(Program Flag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示:

15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
 
 
 
 
OF
DF
IF
TF
SF
ZF
 
AF
 
PF
 
CF

条件码:
①OF(Overflow
Flag)溢出标志。溢出时为1,否则置0。
②SF(Sign Flag)符号标志。结果为负时置1,否则置0.
③ZF(Zero
Flag)零标志,运算结果为0时ZF位置1,否则置0.
④CF(Carry Flag)进位标志,进位时置1,否则置0.
⑤AF(Auxiliary
carry Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位置。有进位时1,否则置0.
⑥PF(Parity
Flag)奇偶标志。结果操作数中1的个数为偶数时置1,否则置0.

控制标志位:
⑦DF(Direction
Flag)方向标志,在串处理指令中控制信息的方向。
⑧IF(Interrupt Flag)中断标志。
⑨TF(Trap
Flag)陷井标志。

二、 直接标志转移(8位寻址)

指令格式
机器码
测试条件
如...则转移
 
 
指令格式
机器码
测试条件
如...则转移
JC
72
C=1
有进位
JNS
79
S=0
正号
JNC
73
C=0
无进位
JO
70
O=1
有溢出
JZ/JE
74
Z=1
零/等于
JNO
71
O=0
无溢出
JNZ/JNE
75
Z=0
不为零/不等于
JP/JPE
7A
P=1
奇偶位为偶
JS
78
S=1
负号
JNP/IPO
7B
P=0
奇偶位为奇

三、间接标志转移(8位寻址)

指令格式
机器码
测试格式
如...则转移
JA/JNBE(比较无符号数)
77
C或Z=0
>  高于/不低于或等于
JAE/JNB(比较无符号数)
73
C=0
>=  高于或等于/不低于
JB/JNAE(比较无符号数)
72
C=1
<  低于/不高于或等于
JBE/JNA(比较无符号数)
76
C或Z=1
<=  低于或等于/不高于
JG/JNLE(比较带符号数)
7F
(S异或O)或Z=0
>  大于/不小于或等于
JGE/JNL(比较带符号数)
7D
S异或O=0
>=  大于或等于/不小于
JL/JNGE(比较带符号数)
7C
S异或O=1
<  小于/不大于或等于
JLE/JNG(比较带符号数)
7E
(S异或O)或Z=1
<=  小于或等于/不大于

四、无条件转移指令(fisheep译 fisheep@sohu.com)

操作码 伪码指令 含义
EB  cb
JMP rel8 相对短跳转(8位),使rel8处的代码位下一条指令
E9  cw
JMP rel16 相对跳转(16位),使rel16处的代码位下一条指令
FF  /4
JMP r/m16 绝对跳转(16位),下一指令地址在r/m16中给出
FF  /4
JMP r/m32 绝对跳转(32位),下一指令地址在r/m32中给出
EA  cb
JMP ptr16:16 远距离绝对跳转,
下一指令地址在操作数中
EA  cb
JMP ptr16:32 远距离绝对跳转,
下一指令地址在操作数中
FF  /5
JMP m16:16 远距离绝对跳转,
下一指令地址在内存m16:16中
FF  /5
JMP m16:32 远距离绝对跳转,
下一指令地址在内存m16:32中

五、16位/32位寻址方式(fisheep译
fisheep@sohu.com)

操作码
伪码指令
跳转含义
跳转类型
跳转的条件(标志位)
0F 87  cw/cd
JA rel16/32
大于
near
(CF=0 and ZF=0)
0F 83  cw/cd
JAE rel16/32
大于等于
near
(CF=0)
0F 82  cw/cd
JB rel16/32
小于
near
(CF=1)
0F 86  cw/cd
JBE rel16/32
小于等于
near
(CF=1 or ZF=1)
0F 82  cw/cd
JC rel16/32
进位
near
(CF=1)
0F 84  cw/cd
JE rel16/32
等于
near
(ZF=1)
0F 84  cw/cd
JZ rel16/32
为0
near
(ZF=1)
0F 8F  cw/cd
JG rel16/32
大于
near
(ZF=0 and SF=OF)
0F 8D  cw/cd
JGE rel16/32
大于等于
near
(SF=OF)
0F 8C  cw/cd
JL rel16/32
小于
near
(SF<>OF)
0F 8E  cw/cd
JLE rel16/32
小于等于
near
(ZF=1 or SF<>OF)
0F 86  cw/cd
JNA rel16/32
不大于
near
(CF=1 or ZF=1)
0F 82  cw/cd
JNAE rel16/32
不大于等于
near
(CF=1)
0F 83  cw/cd
JNB rel16/32
不小于
near
(CF=0)
0F 87  cw/cd
JNBE rel16/32
不小于等于
near
(CF=0 and ZF=0)
0F 83  cw/cd
JNC rel16/32
不进位
near
(CF=0)
0F 85  cw/cd
JNE rel16/32
不等于
near
(ZF=0)
0F 8E  cw/cd
JNG rel16/32
不大于
near
(ZF=1 or SF<>OF)
0F 8C  cw/cd
JNGE rel16/32
不大于等于
near
(SF<>OF)
0F 8D  cw/cd
JNL rel16/32
不小于
near
(SF=OF)
0F 8F  cw/cd
JNLE rel16/32
不小于等于
near
(ZF=0 and SF=OF)
0F 81  cw/cd
JNO rel16/32
未溢出
near
(OF=0)
0F 8B  cw/cd
JNP rel16/32
不是偶数
near
(PF=0)
0F 89  cw/cd
JNS rel16/32
非负数
near
(SF=0)
0F 85  cw/cd
JNZ rel16/32
非零(不等于)
near
(ZF=0)
0F 80  cw/cd
JO rel16/32
溢出
near
(OF=1)
0F 8A  cw/cd
JP rel16/32
偶数
near
(PF=1)
0F 8A  cw/cd
JPE rel16/32
偶数
near
(PF=1)
0F 8B  cw/cd
JPO rel16/32
奇数
near
(PF=0)
0F 88  cw/cd
JS rel16/32
负数
near
(SF=1)
0F 84  cw/cd
JZ rel16/32
为零(等于)
near
(ZF=1)

注:一些指令操作数的含义说明:
  rel8      表示 8 位相对地址
 
rel16    表示 16 位相对地址
  rel16/32  表示 16或32 位相对地址
  r/m16    表示16位寄存器

  r/m32    表示32位寄存器

无条件转移指令

指令格式 JMP 地址表达式
指令功能 无条件地转移到由地址表达式所确定的目标单元。本指令对标志位无影响。
无条件转移指令根据其转移范围的大小可以分为以下四种方式:
四种方式 1.段内直接转移 2.段内间接转移 3.段间直接转移 4.段间间接转移
说    明     这是一种相对寻址方式。它转移的目标地址是当前IP内容加上一个八位相对位移量(DISP), DISP是汇编程序在汇编源程序时,根据目标地址和当前IP之间的距离自动生成的。     它转移的目标地址是可通过寄存器或存贮单元来寻址。     在一条无条件转移指令中的地址表达式是一个段间(FAR)标号或段间标号加减一常量(必须在该标号所在段内)时,则该指令被汇编成一个段间直接转移指令代码。     此指令的目标地址由存贮器寻址方式指定的内存中的连续两个字来决定,低地址的字取代IP,高地址的字取代CS。
指令功能 IP=IP+Disp IP=Reg16 或 IP=Mem16    

条件转移指令

指令格式 <指令助记符>  <短标号>
指令说明     当满足条件而发生转移的指令,称之为条件转移指令。它们以某些标志位或这些标志位的逻辑运算作为依据,若满足指令所规定条件,则程序转移,否则顺序执行。
1.根据单个标志位的条件转移指令: 2.用于无符号数的条件转移指令: 3.用于带符号数的条件转移指令:
(1)有进位转移(JC)或无进位转移(JNC)
(2)等于/为零转移(JE/JZ)或不等于/非零转移(JNZ)
(3)负数转移(JS)或正数转移(JNS)
(4)溢出转移(JO)或不溢出转移(JNO)
(5)偶校验转移(JP/JPE)或奇校验转移(JNP/JPO)
(6)寄存器CX为零转移(JCXZ)
(1)高于转移(JA)/不低于且不等于转移(JNBE)
(2)高于或等于转移(JAE)/不低于转移(JNB)
(3)低于转移(JB)/不高于且不等于转移(JNAE)
(4)低于或等于转移(JBE)/不高于转移(JNA)
(1)大于转移(JG)/不小于且不等于转移(JNLE)
(2)大于或等于转移(JGE)/不小于转移(JNL)
(3)小于转移(JL)/不大于且不等于转移(JNGE)
(4)低于或等于转移(JLE)/不高于转移(JNG)

注意:这类指令的转移范围只能在离当前IP的-128-+127个字节之内。它们对标志位均无影响。

重复控制指令

这类指令主要用来控制软件循环的重复过程,故又称作循环控制指令。

指令名称 指令功能
(1)LOOP指令 将CX内容减一,若CX不等于0,则循环至目标地址处(即IP+DISP);否则顺序执行后续指令。
(2)LOOPZ/LOOPE指令 将CX内容减一,若CX不等于0,且标志位ZF=1时,才循环至目标地址处;否则顺序执行后续指令。
(3)LOOPNZ/LOOPNE指令 将CX内容减一,若CX不等于0,且标志位ZF=0时,才循环至目标地址处;否则顺序执行后续指令。
(4)JCXZ指令 寄存器CX为零转移(JCXZ),这条指令前面已经介绍过。

注意:在执行此类重复控制指令前必须把重复次数送入寄存器CX中。

标志操作指令


清进位指令CLC
清除进位标志 CF←0
置进位指令STC
置进位标志 CF←1
清除方向位指令CLD
清除方向标志 DF←0
置方向位指令STD
置方向标志 DF←1
清中断允许指令CLI
清除中断标志 IF←0
置中断允许位指令STI
置中断标志 IF←1
 

处理器控制指令

   
处理器暂停指令 HLT     使CPU进入暂停状态,不进行任何操作,它可被"外部中断"和复位信号来清除。该指令不影响任何标志,常在程序中为了等待中断而使用。
空操作指令 NOP     该指令不进行任何操作,它仅充当一种为不做任何操作的“转向”点提供标号的手段。
处理器等待指令 WAIT     在处理器的引脚TEST=1时,使处理器进入等待状态;直到TEST=0,等待状态被清除,并恢复执行原停止的指令。
处理器交权指令 ESC     指出使用的协处理器编号及执行的操作,并为协处理器写指定一个操作数。
总线封锁指令 LOCK     使CPU的LOCK信号线上产生一个有效电位,以禁止总线上的其他主设备进行总线访问。

8088汇编跳转和PSW状态字寄存器的更多相关文章

  1. lmsw - 加载机器状态字

    将源操作数加载到机器状态字,即寄存器 CR0 的位 0 到 15.源操作数可以是 16 位通用寄存器或内存位置.只有源操作数的低 4 位(也就是 PE.MP.EM 及 TS 标志)会加载到 CR0.C ...

  2. IC卡T0协议中的过程字与状态字

    T0协议中,IC卡收到命里头以后向TTL回传过程字或状态字SW1.SW2: TTL和IC卡在二者之间的命令和数据交换的任何时刻都必须知道数据流的方向和IO线路由谁驱动. 摘录参考:<中国金融集成 ...

  3. 对状态字的理解 尤其是 首次检测位“/FC”的想法

    状态字 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0               BR CC1 CC0 OV OS OR STA RLO /FC 问题1 关于首次检测位& ...

  4. arm汇编学习(六)---跳转到thumb状态

    通常函数返回使用 pop {r7,pc}或bx lr等方式(bx,b类似jmp为跳转指令,但bx可以指定跳转区域究竟为thumb还是arm指令.thumb指令指令的时候,直接填写该地址却总是产生SIG ...

  5. 关于程序状态字寄存器PSW(Program Status Word)与多核多线程

    内核态(Kernel Mode)与用户态(User Mode) CPU通常有两种工作模式即:内核态和用户态,而在PSW中有一个二进制位控制这两种模式. 内核态:当CPU运行在内核态时,程序可以访问所有 ...

  6. JavaScript学习总结 Ajax和Http状态字

    Ajax及其工作原理 AJAX 是一种与服务器交换数据无需刷新网页的技术,最早由Google公司在谷歌地图里使用,并迅速风靡. AJAX是不能跨域的,如需跨域,可以使用document.domain= ...

  7. arm学习之汇编跳转指令总结

    目前所知道的跳转指令有 b,bl,bep,bne.他们共同点是都是以b开头,首先从字面上分析:b:是Branch,表示分支.bl:是Branch Link表示带连接的分支.bep:Branch ,Eq ...

  8. JavaScript学习总结(七)Ajax和Http状态字

    转自:http://segmentfault.com/a/1190000000691919 Ajax及其工作原理 AJAX 是一种与服务器交换数据无需刷新网页的技术,最早由Google公司在谷歌地图里 ...

  9. SIMATIC 1500 PLC 同步轴,状态字StatusWord信号描述

    轴名. StatusWord.X21 (Synchronizing) 正在建立同步 轴名. StatusWord.X22 (Synchronous) 已经建立同步

随机推荐

  1. Python中的函数(3)

    一.包含返回值的函数 下面来看一个函数,它接收名和姓并返回完整的姓名: def get_formatted_name(first_name,last_name): """ ...

  2. 2019年,Python工程师必考的6个面试题,Python面试题No5

    第1题:Python里面如何实现tuple和list的转换? 函数tuple(seq)可以把所有可迭代的(iterable)序列转换成一个tuple, 元素不变,排序也不变 list转为tuple: ...

  3. python接口自动化-有token的接口项目使用unittest框架设计

    获取token 在做接口自动化的时候,经常会遇到多个用例需要用同一个参数token,并且这些测试用例跨.py脚本了. 一般token只需要获取一次就行了,然后其它使用unittest框架的测试用例全部 ...

  4. [luoguP1266] 速度限制(spfa)

    传送门 因为到某一没有限速的路径速度会有不同的可能,所以直接用 dis[i][j] 表示到第 i 个点速度为 j 时的最短时间,然后跑spfa. ——代码 #include <queue> ...

  5. 【01背包变形】Robberies HDU 2955

    http://acm.hdu.edu.cn/showproblem.php?pid=2955 [题意] 有一个强盗要去几个银行偷盗,他既想多抢点钱,又想尽量不被抓到.已知各个银行 的金钱数和被抓的概率 ...

  6. 我是一个线程 - IBM刘欣

    来自:码农翻身(微信号:coderising) 作者:IBM刘欣 我是一个线程,我一出生就被编了个号: 0×3704,然后被领到一个昏暗的屋子里, 这里我发现了很多和我一模一样的同伴. 我身边的同伴0 ...

  7. 【BZOJ4736】温暖会指引我们前行(LCT)

    题意:有一张图,每条边有一个不同的编号,长度和权值,维护以下操作: 1.加边 2.修改边长 3.询问两点之间在最小权值最大的前提下的唯一路径长度 n<=100000 m<=300000 思 ...

  8. PatentTips - Wear Leveling for Erasable Memories

    BACKGROUND Erasable memories may have erasable elements that can become unreliable after a predeterm ...

  9. msp430项目编程04

    msp430中项目---TFT彩屏显示 1.TFT彩屏工作原理 2.电路原理说明 3.代码(静态显示) 4.代码(动态显示) 5.项目总结 msp430项目编程 msp430入门学习

  10. [Android] 随时拍图像处理部分总结及源码分享

    http://blog.csdn.net/eastmount/article/details/45492065#comments [Android] 图像各种处理系列文章合集 http://blog. ...