8088汇编跳转和PSW状态字寄存器

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译 [email protected])






































操作码
伪码指令 含义

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译
[email protected])


































































































































































































操作码

伪码指令

跳转含义

跳转类型

跳转的条件(标志位)

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位寄存器

dxxx

时间: 2024-10-12 22:20:36

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

汇编跳转指令B、BL、BX、BLX 和 BXJ的区别

跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现程序流程的跳转: (1) 使用专门的跳转指令. (2) 直接向程序计数器 PC 写入跳转地址值. 通过向程序计数器 PC 写入跳转地址值,可以实现在 4GB 的地址空间中的任意跳转,在跳转之前结合使用 MOV LR , PC 等类似指令,可以保存下一条指令地址作为将来的返回地址值,从而实现在 4GB 连续的线性地址空间的子程序调用. 专门的跳转指令 B.BL.BX.BLX 和 BXJ: 跳转.带链接跳转(带返回的跳转).跳转并切

【转载】汇编跳转指令集

1汇编指令:  JO.JNO.JB.JNB.JE.JNE.JBE.JA.JS.JNS.JP.JNP.JL      2名称或内存 功能  操作数  操作码 模数 寄存器1 寄存器2 位移量 立即数 符号 方向 芯片型号 16位  32位  3JO   溢出跳转         短        $70    无  无  无  无  10  无  无  8086  无  无  4JNO  不溢出跳转       短        $71    无  无  无  无  10  无  无  8086 

Win32 汇编 - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

跳转指令分三类:一.无条件跳转: JMP;二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转);三.根据 EFLAGS 寄存器的标志位跳转, 这个太多了. 根据标志位跳转的指令: JE ;等于则跳转 JNE ;不等于则跳转 JZ ;为 0 则跳转 JNZ ;不为 0 则跳转 JS ;为负则跳转 JNS ;不为负则跳转 JC ;进位则跳转 JNC ;不进位则跳转 JO ;溢出则跳转 JNO ;不溢出则跳转 JA ;无符号大于则跳转 JNA

汇编入门学习笔记 (二)—— 寄存器(内存访问)、栈

疯狂的暑假学习之  汇编入门学习笔记 (二) 参考:<汇编语言> 王爽  第三章 一.寄存器(内存访问) 1.DS和[address] DS 数据段寄存器,用来存放数据段地址 [address] 用来表示数据段的偏移地址 同样跟CS一样,不可以通过 mov ds, 1000 给ds赋值 要通过通用寄存器ax等. 例如: mov ax, 1000 mov ds, ax mov al, [0] 把1000:0的内容存进al mov bx, 1000 mov ds, bx mov [0], al 把

Hive提交的MapReduce任务执行中段挂起(从Running状态跳回为Accepted状态)问题解决记录

一个用Java写的计算程序通过JDBC的方式连接Hive数据库,执行SQL查询语句查询数据.结果对应的MapReduce任务执行到Map 18% Reduce xx%之后,所有的进度输出都变为了Map 0% Reduce 0% 在排查Java语句无问题后,kill掉了Job,由于Job的log已经不可查,直接尝试重新运行程序 新的Hive查询创建的MapReduce任务阻塞在了Accepted状态,无法开始Running 仔细检查了Hadoop的Web页面,发现当前集群的5个节点都变为了Unhe

8088汇编指令大全

一.数据传输指令 ───────────────────────────────────────     它们在存贮器和寄存器.寄存器和输入输出端口之间传送数据.     1. 通用数据传送指令.         MOV    传送字或字节.         MOVSX  先符号扩展,再传送.         MOVZX  先零扩展,再传送.         PUSH    把字压入堆栈.         POP    把字弹出堆栈.         PUSHA  把AX,CX,DX,BX,SP

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

目前所知道的跳转指令有 b,bl,bep,bne.他们共同点是都是以b开头,首先从字面上分析:b:是Branch,表示分支.bl:是Branch Link表示带连接的分支.bep:Branch ,Equalbne:Branch ,Not Equal. B或BL指令引起处理器转移到"子程序名"处开始执行.两者的不同之处在于BL指令在转移到子程序执行之前将其下一条指令的地址拷贝到R14(LR,链接寄存器).由于BL指令保存了下条指令的地址因此使用指令"MOV PC,LR&qu

单击一个按钮,要根据ajax返回的结果来判断跳转和其他状态

$(".ajax").on("click", function() { // var newTab=window.open('about:blank'); var index = $(this).data("index"); $.post("/ajax/operation/openredenvelopetask", { taskid: index }, function(data) { if(data.errno === 0)

JavaScript学习总结 Ajax和Http状态字

Ajax及其工作原理 AJAX 是一种与服务器交换数据无需刷新网页的技术,最早由Google公司在谷歌地图里使用,并迅速风靡. AJAX是不能跨域的,如需跨域,可以使用document.domain='a.com':或者使用服务器代理,代理XMLHttpRequest文件 AJAX是基于现有的Internet标准,并且联合使用它们: XMLHttpRequest 对象 (异步的与服务器交换数据) JavaScript/DOM (信息显示/交互) CSS (给数据定义样式) XML (作为转换数据