5 控制转移指令【微机原理】

简介: 5 控制转移指令【微机原理】

控制转移指令






例4.17

在内存的数据段中存放了若干个8位带符号数,数据块的长度为COUNT(不超过255),首地址为TABLE,试统计其中正数、负数及零的个数,并分别将统计结果在

PLUS. MINUS和ZERO单元。

为了统计正数、负数和零的个数,可先将PLUS、MINUS和ZERO三个单元清零,然后将数报表中的带符号数逐个取入AL寄存器并使其影响状态标志位,再利用前而介绍的 JS、JZ 等条件转称指令测试该数是一个负数、零还是正数,然后分别在相应的单元中进行计数。程序如下:

li417.asm

data segment
  TABLE db 1,2,3,4,5,6,7,8,9    ;9
     db -1,-2,-3,-4,-5,-6,-7,-8,-9  ;9
     db 0,0,0,0,0,0,0,0,0,0,0   ;11
  COUNT equ $-TABLE
  org 0040H
  PLUS    db ?
  MINUS db ?
  ZERO   db ?
data ends
code segment
  assume cs:code,ds:data
start:
  mov ax,data
  mov ds,ax
  XOR AL,AL     ;(AL)<-0
  MOV PLUS,AL     ;清PLUS单元
  MOV MINUS,AL    ;清MINUS单元
  MOV ZERO,AL     ;清ZERO单元
  LEA SI,TABLE      ;(SI)-数据表首址
  MOV CX,COUNT    ;(CX)-数据表长度
  CLD       ;清控制标志位DF
  CHECK:LODSB   ;取一个数据到AL
    OR  AL,AL   ;使数据影响状态标志位
    JS  X1    ;如为负,转X1
    JZ  X2    ;如果为负,转X2
    INC PLUS    ;否则为正,PLUS单元加1
    JMP NEXT
  X1:
    INC MINUS ;MINUS单元加1
    JMP NEXT
  X2:
    INC ZERO    ;ZERO单元加1
  NEXT:LOOP CHECK ;CX减1,如不为零,则转CHECK
  mov ah,4ch
  int 21h
code ends
  end start

运行结果


以上程序中的LOOP CHECK指令是一条循环控制指令,它的操作是将CX寄存器的内 容减1,如结果不等于零,则转移到短标号CHECK。随后将讨论这条指令。

例4.18

在以DATA1为首址的内存数据段中,存放了200个16位带符号数,试将其中最大和最小的带符号数找出来,分别存放到以MAX和MIN为首的内存单元中。

为了寻找最大和最小的元素,可先取出数据块中的一个数据作为标准,暂且将它同时存放到MAX和MIN单元中,然后将数据块中的其他数据逐个分别与MAX和MIN中的数 相比较,凡大于MAX者,取代原来MAX中的内容,凡小于MIN者,取代原来MIN中的 内容,最后即可得到数据块中最大和最小的带符号数。

编程如下: 必须注意,比较带符号数的大小时,应该采用JG和JL等条件转移指令,根据要求可编程如下:

li418.asm

data segment
  DATA1 dw 1,2,3,4,5,6,7,8,9,32767    ;MAX=7FFF
      dw -1,-2,-3,-4,-5,-6,-7,-8,-9,-32768  ;MIN=8000
  COUNT equ ($-DATA1)/2
  org 0040H
  MAX dw ?
  MIN  dw ?
data ends
code segment
  assume cs:code,ds:data
start:
  mov ax,data
  mov ds,ax
  LEA  SI, DATA1  ;(SI)<-数据块首址
  MOV CX,200  ;(CX)<-数据块长度
  CLD   ;清方向标志DP
  LODSW ;取一个16位带符号数到AX
  MOV MAX,AX  ;送MAX单元
  MOV MIN,AX  ;送MIN单元
  DEC CX    ;(CX)<-(CX)-1
  NEXT:
    LODSW ;取下一个16位带符号数
    CMP AX,MAX  ;与MAX单元内容比较
    JG  GREATER ;大于MAX,则转GREATER
    CMP AX,MIN  ;否则,与MIN单元内容比较
    JL  LESS    ;小于MIN,则转LESS
    JMP GOON  ;否则,转GOON
  GREATER: MOV  MAX,AX  ;(MAX)<-(AX)
    JMP GOON  ;转 GOON
  LESS: MOV MIN,AX    ;(MIN)<-(AX)
  GOON: LOOP NEXT ;CX减1,若不等于零,转NEXT
  mov ah,4ch
  int 21h
code ends
  end start

运行结果

相关文章
|
传感器 Linux Python
一起玩转树莓派(19)——红外遥控控制实验
红外遥控是生活中非常常见的电子器具,电视机,空调,音响等电器都可以通过遥控器进行控制。本篇博客,我们尝试来通过红外发生器和红外信号接受器来进行红外控制实验,在树莓派上通过红外遥控的按键来处理LED灯的控制。
1835 0
|
29天前
基于51单片机的简单交通灯程序
基于51单片机的简单交通灯程序
9 2
|
4月前
|
传感器 人工智能 前端开发
单片机毕业设计|农家菜园自动灌溉控制系统设计
单片机毕业设计|农家菜园自动灌溉控制系统设计
|
4月前
|
传感器 监控 测试技术
单片机开发|基于51单片机的全自动黑板檫粉尘清除装置设计与实现
单片机开发|基于51单片机的全自动黑板檫粉尘清除装置设计与实现
|
5月前
|
传感器 人工智能 Java
单片机开发|基于51单片机的全自动黑板檫粉尘清除装置设计
教师常年在课堂上上课,粉笔的灰尘会对学生的健康造成很大的危害,很多教师都会患上肺部疾病。教师在课堂教学中,如何有效地消除粉尘对教师的身体造成的不良影响,是一个亟待解决的问题。本文以51单片机为核心,实现并设计一种全自动黑板檫粉尘清除装置。由黑板擦上的压力传感器进行检测,由51单片机来控制吸尘器(吸尘风机),以完成清理。本系统的主要功能包括:压力检测、按键控制、灯光显示、电扇除尘等。本文在对国内外有关文献进行整理和归纳的基础上,首先介绍了全自动黑板檫粉尘清除装置的研制背景和研究意义,并结合国内外的研究情况,提出了本文的主要研究内容和系统的设计思路。接着,对系统的硬件电路进行了详细的设计,并编写了
|
7月前
|
传感器 监控 测试技术
单片机开发|基于51单片机的全自动黑板檫粉尘清除装置设计与实现
教师常年在课堂上上课,粉笔的灰尘会对学生的健康造成很大的危害,很多教师都会患上肺部疾病。教师在课堂教学中,如何有效地消除粉尘对教师的身体造成的不良影响,是一个亟待解决的问题。本文以51单片机为核心,实现并设计一种全自动黑板檫粉尘清除装置。由黑板擦上的压力传感器进行检测,由51单片机来控制吸尘器(吸尘风机),以完成清理。本系统的主要功能包括:压力检测、按键控制、灯光显示、电扇除尘等。本文在对国内外有关文献进行整理和归纳的基础上,首先介绍了全自动黑板檫粉尘清除装置的研制背景和研究意义,并结合国内外的研究情况,提出了本文的主要研究内容和系统的设计思路。接着,对系统的硬件电路进行了详细的设计,并编写了
137 0
|
9月前
【单片机期中测试】11.交通灯
【单片机期中测试】11.交通灯
30 0
|
传感器 监控 数据处理
基于单片机的液体点滴速度监控设计
基于单片机的液体点滴速度监控设计
160 0
基于单片机的液体点滴速度监控设计
|
12月前
基于西门子PLC s7-200 的自动立体车库设计自动化设计(控制器步进电机直流电机)
基于西门子PLC s7-200 的自动立体车库设计自动化设计(控制器步进电机直流电机)
129 0
|
存储 安全 网络性能优化
基于单片机的交通灯控制系统设计
基于单片机的交通灯控制系统设计
332 0
基于单片机的交通灯控制系统设计