微机原理——程序控制指令

目录

一、无条件转移指令JMP

二、条件转移指令JCC

1.判断单个标志位状态

2.比较无符号数高低

3.比较有符号数大小

三、循环指令LOOP、LOOPZ、LOOPNZ

四、子程序指令

五、系统功能调用

1.09H号DOS功能调用

2.01H号DOS功能调用

3.02H号DOS功能调用

4.25H号DOS功能调用

5.35H号DOS功能调用


一、无条件转移指令JMP

指令格式:JMP 目标地址

功能:JMP可以使程序无条件地跳转到程序在存储器中某目标地址。

注意:(1)指令目标地址若在JMP指令所在的代码段内,属段内跳转(短转移8位和近转移16位),指令只修改IP内容,指令目标地址若在JMP指令所在的代码段外,属段间跳转,CS及IP都需要修改(2)无条件跳转指令在执行结果中不影响标志位。


二、条件转移指令JCC

指令格式:JCC 标号

注意:条件转移指令JCC只能转移段内的短转移8位(0~255)。

JCC的指令分类很广泛,可以分为三类:(1)判断单个标志位状态(2)比较无符号数高低(3)比较有符号数大小;这三类均不影响标志位,但要利用标志位。

1.判断单个标志位状态

(1)JZ/JE和JNZ/JNE

利用零标志ZF,判断结果是否为零或相等。

(2)JS和JNS

利用符号标志SF,判断结果是正是负。

(3)JC和JNC

利用进位标志CF,判断结果是否进位或借位。

例题:寄存器AL中数据为负数,则令AH=-1,否则令AH=0

        CMP AL,0

        JS L1

        MOV AH,0

        JMP L2

        L1:MOV  AH,-1

        L2:HLT

2.比较无符号数高低

(1)JB/JNAE:低于/不高于等于

(2)JNB/JAE:不低于/高于等于

(3)JBE/JNA:低于等于/不高于

(4)JNBE/JA:不低于等于/高于

例题:AL和BL求大数;并赋值给MAX。

        CMP AL,BL

        JA  L1

        MOV  MAX,BL

        JMP L2

        L1:MOV MAX,AL

        L2:HLT

3.比较有符号数大小

(1)JL/JNGE:小于/不大于等于

(2)JNL/JGE:不小于/大于等于

(3)JLE/JNG:小于等于/不大于

(4)JNLE/JG:不大于等于/大于

例题:AL和BL求小数;并赋值给MIN。

        CMP AL BL

        JL L1

        MOV MIN,BL

        JMP L2

        L1:MOV MIN,AL

        L2:HLT


三、循环指令LOOP、LOOPZ、LOOPNZ

88/86针对CX计数器的计数循环指令。

(1)LOOP

格式:LOOP label

操作:(1)CX=CX-1(2)若CX不等于0,转到label出执行相关代码;否则退出循环,执行LOOP后面的指令

(2)LOOPZ

格式:LOOPZ label

操作:(1)CX=CX-1(2)若CX不等于0且ZF=1,则转至label处执行;否则退出循环,执行LOOPZ后面的指令。

(3)LOOPNZ label

格式:LOOPNZ label

操作:(1)CX=CX-1(2)若CX不等于0且ZF=0,则跳到label处执行;否则退出循环,执行LOOPNZ后面的指令。

例题:求100以内序数求和,存入AX

        XOR AX,AX

        MOV BX,1

        MOV CX,100

        L1:ADD AX BX

        INC BX

        LOOP L1


四、子程序指令

 子程序是完成特定功能的一段代码,主程序采用CALL调用指令转移到子程序的起始处执行,运行完子程序后,采用RET指令回到主程序继续执行。


 

五、系统功能调用

1.09H号DOS功能调用

主要作用是在屏幕上输出一个字符串

(1)功能调用号:AH=09H

(2)入口参数:

        DS:DX=显示字符串在内存中的首地址;

        内存中的字符串,必须用一个’$‘字符结尾

(3)功能调用:INT 21H

(4)出口参数:无

2.01H号DOS功能调用

主要功能是键盘接收一个字符

(1)功能调用号:AH=01H

(2)入口参数:无

(3)功能调用:INT 21H

(4)出口参数:AL=键盘接收字符的ASCII码

3.02H号DOS功能调用

主要功能是输出一个字符

(1)功能调用号:AH=02H

(2)入口参数:DL=显示字符的ASCII码

(3)功能调用:INT 21H

(4)出口参数:无

例题:将键盘输入的小写字母转换成大写字母并输出显示,直到输入字符以“#”结束,如果输入的不是小写字母时要显示错误提示“PLEASE INPUT AGAIN”

NEXT:MOV AH 1

             INT 21H

            CMP AL ‘#’

             JE EXIT

           CMP AL ‘a’

           JB ERR

          CMP AL 'z'

           JA ERR

          SUB AL,20H

         MOV DL ,AL

        MOV AH,2

        INT 21H

        JMP NEXT

ERR: LEA  DX,ERROR

            MOV AH,9

            INT  21H

            JMP NEXT

EXIT:MOV AH,4CH;(返回DOS也就是结束)

            INT 21H

4.25H号DOS功能调用

功能:设置中断类型号为N的中断服务程序的入口地址,存入DS:DX。

MOV DX,OFFSET SERV;SERV为中断服务子程序的名称

MOV AX,SEG SERV

MOV DS,AX

MOV AL,N

MOV AH,25H

INT 21H

5.35H号DOS功能调用

功能:获取中断类型号为N的中断向量ES:BX,并存入变量INTOFF和INTSEG中。

MOV AL,N

MOV AH,35H

INT 21H

MOV INTOFF,BX

MOV INTSEG,ES

  • 4
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄爱吃辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值