实验要求
定义一组数,判断这一组数据中的正数,负数和0的个数
程序
DATAS SEGMENT
table db 7,98,-98,158,10,133,-45,66,-134,-122,0,-33,0,-99,0
a1 byte 'The number of positive numbers is:!'
a2 byte 'The number of negative numbers is:!'
a3 byte 'The number of 0 is:!'
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov bl,15 ;计数
call count
mov si,offset a1 ;调出提示信息
call output1
add al,48 ;显示正数的个数
mov dl,al
mov ah,2
int 21h
call control
mov si,offset a2
call output1
add ch,48 ;显示负数的个数
mov dl,ch
mov ah,2
int 21h
call control
mov si,offset a3
call output1
add bh,48 ;显示零的个数
mov dl,bh
mov ah,2
int 21h
MOV AH,4CH
INT 21H
;统计个数
count proc
mov al,0 ;正数
mov ch,0 ;负数
mov bh,0 ;零
mov cl,0 ;计数
mov dh,0
mov si,offset table
LL:
cmp [si],dh
jz equal ;相等
js lown ;负数
jns highn ;正数
highn:
add al,1
add cl,1
add si,1
cmp cl,bl
jb LL
jmp cover
lown:
add ch,1
add cl,1
add si,1
cmp cl,bl
jb LL
jmp cover
equal:
add bh,1
add si,1
add cl,1
cmp cl,bl
jb LL
jmp cover
cover:
ret
count endp
;输出函数
output1 proc ;入口参数si
push si
push ax
push dx
o1:
mov ax,[si]
cmp al,'!' ;!为结束标志
je oover
mov dl,al
mov ah,2
int 21h
add si,1
jmp o1
oover:
pop dx
pop ax
pop si
ret
output1 endp
;回车换行
control proc
push ax
push dx
mov dl,13
mov ah,2
int 21h
mov dl,10
mov ah,2
int 21h
pop dx
pop ax
ret
control endp
CODES ENDS
END START