- 2
- 0
- 约5.97万字
- 约 208页
- 2016-12-30 发布于广东
- 举报
第5章 IBM-PC机的指令系统 【例5-95】在字节变量X中存有一个无符号数,当它高于、等于或低于100的三种情况,分别转去执行三个不同的程序段PROG1、PROG2和PROG3。 主要程序段如下: MOV AL,X ;X送入AL CMP AL,100 ;X与100比较产生状态标志位 JA PROG1 ;X﹥100 转PROG1 JB PROG3 ;X﹤100 转PROG3 PROG2: ┉ ;X=100 执行程序段PROG2 ┋ PROG1: ┉ ;X﹥100 执行程序段PROG1 ┋ PROG3: ┉ ;X﹤100 执行程序段PROG3 3. 比较两个带符号数,根据比较结果转移 在带符号数判大小的指令中,G表示大于,L表示小于。本组指令的测试条件是OF、SF、ZF。测试是由指令本身自动完成,对编程者而言只须正确下达指令即可,并不涉及测试的具体细节。 ⑴ JL (或JNGE) (Jump if less,or not greater or equal) 小于,或不大于或者不等于则转移指令。 指令格式:JL (或JNGE) OPR 测试条件:SF⊕OF=1且ZF=0成立转移成功,否则往下执行 ⑵ JNL (或JGE) (Jump if not less,or greater or equal) 不小于,或大于或者等于则转移指令。 指令格式:JNL (或JGE) OPR 测试条件:SF⊕OF=0或ZF=1成立转移成功,否则往下执行 ⑶ JLE (或JNG) (Jump if less or equal,or not greater) 小于或者等于,或不大于则转移指令。 指令格式:JLE (或JNG) OPR 测试条件:SF⊕OF=1或ZF=1成立转移成功,否则往下执行 ⑷ JNLE (或JG) (Jump if not less or equal,or greater) 不小于或者不等于,或大于则转移指令。 指令格式:JNLE (或JG) OPR 测试条件:SF⊕OF=0且ZF=0或者(SF⊕OF)∨ZF=0。成立转移成功,否则往下执行。 对于无符号数与带符号数的两组条件转移指令,常用于对两个数(字节或字数据)进行比较,并根据比较结果为:<、≤、>、≥等几种不同情况来判断是否符合条件转移。其中前一组JB、JBE、JA、JAE四种指令适用于判断无符号数的高低,如用于地址比较或双精度数的低位字的比较等;而后一组JL、JLE、JG、JGE四种指令则适用于判断带符号数的大小。以上两种情况,在使用时必须严格地加以区分,否则会出现错误的结果。在计算机可识别二进制补码的条件下,一个数到底是表示无符号数还是有符号数,全靠程序员下达正确指令来解释。例如:两个数相比较,如果把它们看作无符号数,则前者大于后者(255>0),但是如果把它们看作带符号数,则前者小于后者(-1<0=。因而要根据数据所选择的不同类型,来下达条件转移指令,这道理必须清楚。这个例子的程序段可写为: ① MOV AL CMP AL,0 JA L1 ;看成无符号数 ┋ L1: …… ┋ ② MOV AL CMP AL,0 JL L1 ;看成带符号数 ┋ L1: …… ┋ 【例5-96】 设X、Y均为存放在BUF1和BUF2单元中的16位带符号数,满足X>100转移到TOOHIGH去执行,否则作X-Y,如出现溢出,则转移到OVERFLOW去执行,否则计算∣X-Y∣,并把结果存入RESULT中。 主要的程序段为: MOV AX,BUF1 ;取X值 CMP AX,100 JG TOOHIGH ;X>100 转 SUB AX,BUF2 ;X-Y→AX JO OVERFLOW ;溢出转 JNS NEXT NEG AX NEXT: MOV RESU
原创力文档

文档评论(0)