北邮微机原理 实验二 分支,循环程序设计

来源:互联网 发布:聚划算与淘宝的区别 编辑:程序博客网 时间:2024/05/16 08:32

        实验二   分支,循环程序设计
一.实验目的:
    1.开始独立进行汇编语言程序设计;
    2.掌握基本分支,循环程序设计;
    3.掌握最简单的 DOS 功能调用.

二.实验内容:
    1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过 9.
    2.编写一个程序统计数据区中正数,负数和零的个数.
    3.将统计结果在屏幕上显示.

源码:

DATA SEGMENT
BUFF DW 0,-9,29,9,-3,0,32,-34
COUNT EQU $-BUFF ;count的值为buff所占字节数
STRING1 DB 'THE NUMBER OF PLUS IS ','$'
STRING2 DB 'THE NUMBER OF ZERO IS ','$'
STRING3 DB 'THE NUMBER OF MINUS IS ','$'
PLUS DB ? ;大于零的个数
ZERO DB ? ;等于零的个数
MINUS DB ? ;小于零的个数
DATA ENDS
STACK SEGMENT STACK 'STACK'
      DB 100 DUP (?)
STACK ENDS
CODE  SEGMENT
      ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
BEGIN: MOV AX,DATA
       MOV DS,AX
       MOV CX,COUNT
       SHR CX,1 ;相当于除2,正好为buff中的数据个数
       MOV DX,0 ;设定初值,dh及dl分别为等于,大于零的个数
       MOV AH,0 ;ah为小于零的个数
       LEA BX,BUFF
AGAIN: CMP WORD PTR [BX],0
       JGE PLU ;大于等于零时转plu
       INC AH ;统计小于零的个数
       JMP NEXT
PLU:   JZ  ZER ;等于零时转zer
       INC DL ;统计大于零的个数
       JMP NEXT
ZER:   INC DH ;统计等于零的个数
NEXT:  INC BX ;修改地址指针
       INC BX
       LOOP AGAIN
       MOV PLUS,DL ;保存结果
       MOV ZERO,DH
       MOV MINUS,AH
      
       MOV AH,09H ;输出结果
       MOV DX,OFFSET STRING1
       INT 21H
       MOV AH,02H
       MOV AL,PLUS
       ADD AL,30H
       MOV DL,AL
       INT 21H
       MOV DL,0DH
       INT 21H
       MOV DL,0AH
       INT 21H
       MOV AH,09H
       MOV DX,OFFSET STRING2
       INT 21H
       MOV AH,02H
       MOV AL,ZERO
       ADD AL,30H
       MOV DL,AL
       INT 21H
       MOV DL,0DH
       INT 21H
       MOV DL,0AH
       INT 21H
       MOV DX,OFFSET STRING3
       MOV AH,09H
       INT 21H
       MOV AH,02H
       MOV AL,MINUS
       ADD AL,30H
       MOV DL,AL
       INT 21H
       MOV AX,4C00H
       INT 21H
CODE   ENDS
       END BEGIN

原创粉丝点击