实验二 分支,循环程序设计
一.实验目的:
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